首页 文章

Clone Mediaotor在WSO2 ESB 4.8.1中不起作用

提问于
浏览
1

我已经定义了 "Validate" Mediator故障序列 . 如果我的验证失败,我想要 . 消息应该发送回客户端以及基于JMS的队列 .

Problem:

克隆调解员无法正常工作 . 我使用clone mediator将消息发送到队列,然后“Respond”mediator将消息发送回客户端 .

Note: 如果我删除了克隆介体,则该消息将完美地发送回客户端 . 但是使用clone mediator它不起作用 .

Validate Mediator Code:

<validate>
         <schema xmlns:ns2="http://org.apache.synapse/xsd" xmlns:ns="http://org.apache.synapse/xsd" key="gov:/xsd/testschema.xsd"></schema>
         <on-fail>
            <makefault version="soap11">
               <detail xmlns:ns2="http://org.apache.synapse/xsd" xmlns:ns="http://org.apache.synapse/xsd" expression="get-property('ERROR_DETAIL')"></detail>
            </makefault>
            <payloadFactory media-type="xml">
               <format>
                  <ErrorMessage xmlns="">
                     <ErrorCode>007</ErrorCode>
                     <ErrorMessage>Not Correct Request</ErrorMessage>
                  </ErrorMessage>
               </format>
            </payloadFactory>
            <clone continueParent="true" sequential="false">
               <target>
                  <endpoint>
                     <address uri="jms:/ErrorQueue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&amp;java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&amp;java.naming.provider.url=tcp://localhost:61616&amp;transport.jms.DestinationType=queue"></address>
                  </endpoint>
               </target>
            </clone>
            <respond></respond>
         </on-fail>
      </validate>

Exception:

未捕获的异常 java.lang.ClassCastException:org.apache.axiom.om.impl.llom.OMElementImpl无法强制转换为org.apache.axiom.soap.SOAPFault at org.apache.axiom.soap.impl.llom.SOAPBodyImpl.getFault(SOAPBodyImpl.java:120)位于org.apache.synapse.util的org.apache.synapse.util.MessageHelper.cloneSOAPEnvelope(MessageHelper.java:383) . 位于org.apache.synapse.mediators.eip.splitter.CloneMediator.getClonedMessageContext(CloneMediator.java)的org.apache.synapse.util.MessageHelper.cloneMessageContext(MessageHelper.java:86)中的MessageHelper.cloneAxis2MessageContext(MessageHelper.java:233): 159)org.apache.synapse.mediators.eip.splitter.CloneMediator.mediate(CloneMediator.java:99)atg.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77)at org.apache.synapse .mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)at org.apache.synapse.mediators.builtin.ValidateMediator.mediate(ValidateMediator . java:212)org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77)org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)org.apache.synapse.mediators .template.TemplateMediator.mediate(TemplateMediator.java:77)org.apache.synapse.mediators.template.InvokeMediator.mediate(InvokeMediator.java:129)org.apache.synapse.mediators.template.InvokeMediator.mediate(InvokeMediator) .java:78)org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77)org.apache.synapse.AbstractListMediator.mediate(AbstractListMediator.java:47)at org.apache.synapse . mediators.base.SequenceMediator.mediate(SequenceMediator.java:131)org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:196)at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator . java:77)at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:4 7)org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:131)org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:166)atg.apache.axis2 .engine.AxisEngine.receive(AxisEngine.java:180)org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:411)org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker) .java:183)在java.util的java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)的org.apache.axis2.transport.base.threads.NativeWorkerPool $ 1.run(NativeWorkerPool.java:172) .concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)

Note: 我也没有在"Clone" mediator的"SOAP Action"字段中定义任何内容 .

1 回答

  • 1

    这是ESB 4.8.1中的一个错误 . 请检查一下[1]

    1. https://wso2.org/jira/browse/ESBJAVA-3087

    尝试使用call mediator并丰富mediator . 我没有测试过这个 .

    <validate>
             <schema xmlns:ns2="http://org.apache.synapse/xsd" xmlns:ns="http://org.apache.synapse/xsd" key="gov:/xsd/testschema.xsd"></schema>
             <on-fail>
                <makefault version="soap11">
                   <detail xmlns:ns2="http://org.apache.synapse/xsd" xmlns:ns="http://org.apache.synapse/xsd" expression="get-property('ERROR_DETAIL')"></detail>
                </makefault>
                <payloadFactory media-type="xml">
                   <format>
                      <ErrorMessage xmlns="">
                         <ErrorCode>007</ErrorCode>
                         <ErrorMessage>Not Correct Request</ErrorMessage>
                      </ErrorMessage>
                   </format>
                </payloadFactory>
    
            **<property name="BODY_ELEMENTS" expression="$body">**
                **<call>**
    
                      <endpoint>
                         <address uri="jms:/ErrorQueue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&amp;java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&amp;java.naming.provider.url=tcp://localhost:61616&amp;transport.jms.DestinationType=queue"></address>
                      </endpoint>
    
                **</call>**
        **<enrich>
                <source xpath="$ctx:BODY_ELEMENTS/> 
                <target type="body"/>
        </enrich>**   
                <respond></respond>
             </on-fail>
          </validate>
    

相关问题