2017-01-31 9 views
1

私はwso2 ESB 4.8でカスタムメディエーターを実装しようとしています。 this articleを参考にしてthe docsにも言いましたが、ESBに自分のmediatorのxml設定を認識させることができませんでした。カスタムメディエーターを展開する際のWSO2 ESBエラー

私は、ドキュメントに記載されたすべての手順を追った仲介者のプロジェクト<ESB_HOME>/ repository/components/libの.jarを移動し、サーバーを再起動しますが、私は展開時に次のエラーを受信し続ける:ここ

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; 
    } 
} 

、工場の実装:私はそのカスタムタグの方法を試していない

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

答えて

2

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; 
    } 
} 

ここで私は、カスタムメディエーターを参照するプロキシサービスからの抜粋です。しかし、ちょうどあなたの情報のために、あなたはこのようにクラスメディエーターに電話することができます。

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

WSO2 Dev Studioでカスタムメディエーターを作成したときと同じ問題がありました。詳細はhereを参照してください。

これを解決するには、コマンドラインからmavenを使用してメディエータを構築する必要がありました。

希望に役立ちます。