简体   繁体   English

克隆Mediaotor在WSO2 ESB 4.8.1中不起作用

[英]Clone Mediaotor Not working in WSO2 ESB 4.8.1

I have defined a "Validate" Mediator fault sequence. 我定义了一个“验证”介体故障序列。 I want that if my validation is failed. 如果我的验证失败,我想这样做。 Message should be sent back to the client as well as to a queue based on JMS. 消息应该发送回客户端以及基于JMS的队列。

Problem: 问题:

Clone mediator is not working. 克隆介体无法运作。 I am using clone mediator to send message to the queue and then "Respond" mediator to send message back to the client. 我正在使用克隆介体将消息发送到队列,然后使用“响应”介体将消息发送回客户端。

Note: If I remove the clone mediator, the message is perfectly send back to the client. 注意:如果删除克隆介体,则消息将完美发送回客户端。 But with clone mediator it is not working. 但是使用克隆调解器无法正常工作。

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: 例外:

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

Note: I also didn't define anything in "SOAP Action" field in "Clone" mediator. 注意:我也没有在“克隆”介体的“ SOAP操作”字段中定义任何内容。

It is a bug in ESB 4.8.1. 这是ESB 4.8.1中的错误。 Please check this [1] 请检查此[1]

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

Try this with call mediator and enrich mediator. 尝试使用“呼叫调解器”和“丰富调解器”。 I have not tested this. 我还没有测试。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM