通过WSO2 ESB中的Axis2 Web服务将数据/响应从HTTP传输到UDP协议时出错

时间:2013-11-26 10:29:21

标签: udp wso2 axis2 wso2esb

我是WSO2 ESB的新手,遇到了一个传输级别信息与SOAP Message名称空间URI 不匹配的问题。

实际上我想通过UDP传输传输请求/消息,因为我创建了一个代理服务,通过UDP传输将请求传输到实际的Web服务。
看起来像是:

 <proxy xmlns="http://ws.apache.org/ns/synapse" name="example1"
       transports="https http udp"
       startOnLoad="true"
       trace="disable">
   <target>
      <inSequence>
         <log level="full"/>
         <send>
            <endpoint>
               <address uri="udp://192.168.6.200:3333/services/xyzService?contentType=application/soap+xml">
                  <enableAddressing separateListener="true"/>
               </address>
            </endpoint>
         </send>
      </inSequence>
      <outSequence>
         <log level="full" />
         <send/>
      </outSequence>
   </target>
   <publishWSDL uri="file:repository/WSO2-ws/ABC.wsdl"/>
  </proxy>

其他服务通过UDP获取消息/请求并转移到实际的WebService。 好像是:

<proxy xmlns="http://ws.apache.org/ns/synapse" name="example2" transports="udp"
       startOnLoad="true"
       trace="disable">
   <target>
      <endpoint>
         <address uri="http://192.168.6.200:8280/services/abc-demo"/>
      </endpoint>
      <outSequence>
         <log level="full"/>
         <send />
      </outSequence>
   </target>
</proxy>

将响应从实际的WebService转发回UDP时抛出的错误如下:

[2013-11-26 15:06:47,375] ERROR - ProcessPacketTask Error during processing of datagram:
org.apache.axiom.soap.SOAPProcessingException: Transport level information does not match with SOAP Message namespace URI
        at org.apache.axis2.builder.BuilderUtil.validateSOAPVersion(BuilderUtil.java:745)
        at org.apache.axis2.builder.SOAPBuilder.processDocument(SOAPBuilder.java:58)
        at org.apache.axis2.transport.TransportUtils.createDocumentElement(TransportUtils.java:180)
        at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:146)
        at org.apache.axis2.transport.base.datagram.ProcessPacketTask.run(ProcessPacketTask.java:63)
        at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)

我不知道为什么会这样? 如果我做错了或某些配置没有正确完成,请建议我。 非常感谢任何帮助 我期待很快收到你的回复。

1 个答案:

答案 0 :(得分:0)

关注显示UDP和HTTP之间切换的this sample

如前所述,您需要将UDP侦听器和发件人配置添加到<ESB_HOME>/repository/conf/axis2/axis2.xml文件。

<transportReceiver name="udp" class="org.apache.axis2.transport.udp.UDPListener"/>
<transportSender name="udp" class="org.apache.axis2.transport.udp.UDPSender"/>

并在代理服务中指定UDP侦听端口和内容类型。

<parameter name="transport.udp.port">9999</parameter>
<parameter name="transport.udp.contentType">text/xml</parameter>