2017-01-31 44 views
1

我试图在wso2 ESB 4.8中实现自定义介体。 我使用this article作为参考,并将其转换为the docs,但无法让ESB识别我的介体的xml配置。部署自定义介体时出现WSO2 ESB错误

我紧跟在文档中提到的所有步骤,感动了调解员的项目的.jar<ESB_HOME>/ repository/components/lib和重新启动服务器,但我一直在部署期间收到以下错误:

ERROR - MediatorFactoryFinder Unknown mediator referenced by configuration element : {http://ws.apache.org/ns/synapse}currencyMediator 

这里如下调解员代码:

package org.wso2.esb.tutorial.custom; 

import java.util.Iterator; 

import javax.xml.namespace.QName; 

import org.apache.axiom.om.OMElement; 
import org.apache.axiom.om.OMNode; 
import org.apache.axiom.soap.SOAPBody; 
import org.apache.synapse.MessageContext; 
import org.apache.synapse.mediators.AbstractMediator; 


public class CurrencyMedXML extends AbstractMediator { 
    private String symbol = "$"; 

    public boolean mediate(MessageContext synCtx) { 

     // get symbol, last elements of SOAP envelope 
     SOAPBody body = synCtx.getEnvelope().getBody(); 
     OMElement firstElement = body.getFirstElement(); 

     //Iterator it = firstElement.getChildren(); 
     Iterator it = firstElement.getChildrenWithName(new QName("return")); 
     while (it.hasNext()) { 
      OMNode node = (OMNode)it.next(); 
      if (node.getType()==OMNode.ELEMENT_NODE) { 
       OMElement ele=(OMElement)node; 
       String text = ele.getText(); 
       ele.setText(symbol+text); 
      } 
     } 


     return true; 
    } 

    public void setSymbol(String sym){ 
     symbol=sym; 
    } 

    public String getSymbol(){ 
     return symbol; 
    } 
} 

的串行执行:

package org.wso2.esb.tutorial.custom; 

import org.apache.axiom.om.OMElement; 
import org.apache.synapse.Mediator; 
import org.apache.synapse.config.xml.AbstractMediatorSerializer; 

public class CurrencyMedXMLSerializer extends AbstractMediatorSerializer { 

    public String getMediatorClassName() { 
     return CurrencyMedXML.class.getName(); 
    } 

    @Override 
    protected OMElement serializeSpecificMediator(Mediator m) { 
     if (!(m instanceof CurrencyMedXML)) { 
       handleException("Unsupported mediator passed in for serialization : " 
        + m.getType()); 
     } 

     CurrencyMedXML mediator = (CurrencyMedXML) m; 
     OMElement CurrencyMediatorElement = fac 
      .createOMElement(CurrencyMedXMLFactory.CURRENCY_MEDIATOR_Q); 

     saveTracingState(CurrencyMediatorElement, mediator); 

     OMElement symbolElement = fac.createOMElement(CurrencyMedXMLFactory.SYMBOL_Q, CurrencyMediatorElement); 
     symbolElement.setText(mediator.getSymbol()); 

     return CurrencyMediatorElement; 
    } 
} 

,工厂实现:

package org.wso2.esb.tutorial.custom; 

import java.util.Properties; 

import javax.xml.namespace.QName; 

import org.apache.axiom.om.OMElement; 
import org.apache.synapse.Mediator; 
import org.apache.synapse.SynapseException; 
import org.apache.synapse.config.xml.AbstractMediatorFactory; 
import org.apache.synapse.config.xml.XMLConfigConstants; 

public class CurrencyMedXMLFactory extends AbstractMediatorFactory { 

     static final QName CURRENCY_MEDIATOR_Q = new QName(
      XMLConfigConstants.SYNAPSE_NAMESPACE, "currencyMediator"); 

     static final QName SYMBOL_Q = new QName(
      XMLConfigConstants.SYNAPSE_NAMESPACE, "symbol"); 

     public QName getTagQName() { 
     return CURRENCY_MEDIATOR_Q; 
     } 

    @Override 
    protected Mediator createSpecificMediator(OMElement elem, Properties properties) { 
     // create new mediator 
      CurrencyMedXML newMediator = new CurrencyMedXML(); 

     // setup initial settings 
      processAuditStatus(newMediator, elem); 

      OMElement symbolElement = elem.getFirstChildWithName(SYMBOL_Q); 
      if (symbolElement != null) { 
       String symbol = symbolElement.getText(); 
       newMediator.setSymbol(symbol); 
      } else { 
       throw new SynapseException("default percentage element missing"); 
      } 

     return newMediator; 
    } 
} 

下面是从哪里引用自定义中介代理服务的一个片段:

<outSequence> 
    <currencyMediator> 
    <symbol>$</symbol> 
    </currencyMediator> 
    <send/> 
</outSequence> 

回答

2

我还没有试过,自定义标签的方法。但只是为了您的信息,您也可以这样称呼您的班级中介。

<class name="samples.mediators.DiscountQuoteMediator"> 
    <property name="discountFactor" value="10"/> 
    <property name="bonusFor" value="5"/> 
</class> 
1

我在使用WSO2 Dev Studio创建自定义介体时遇到了同样的问题。更多的信息可以在here找到。

为了解决这个问题,我必须使用maven从命令行构建中介。

希望有所帮助。