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