我正在使用wso2esb 4.8.1, 所以我的客户端正在发送未完成的xml,如下所示。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:open="http://www.openuri.org/">
<soapenv:Header>
<r:valid xmlns:r="http://webmail.w3school.com/use">
<r:user xsi:type="xsd:string">admin</r:user>
<r:password xsi:type="xsd:string">admin</r:password>
</r:valid>
</soapenv:Header>
<soapenv:Body>
<s:Payload xmlns:s="http://www.w3school.com">
<s:request>
<s:name>henry</s:name>
<s:value>2345</s:value>
</s:request>
</s:Payload>
</soapenv:Body>
</soapenv:Envelope>
在上面的请求中 xsi 未声明前缀命名空间所以它在wso2esb服务器中给出了如下所示的错误。
TID: [0] [ESB] [2015-01-25 20:42:50,774] ERROR {org.apache.synapse.transport.nhttp.ServerWorker} - Error processing POST request {org.apache.synapse.transport.nhttp.ServerWorker}
org.apache.axis2.AxisFault: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[4,41]
Message: http://www.w3.org/TR/1999/REC-xml-names-19990114#AttributePrefixUnbound?r:user&xsi:type&xsi
at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:180)
at org.apache.synapse.transport.nhttp.ServerWorker.processEntityEnclosingMethod(ServerWorker.java:459)
at org.apache.synapse.transport.nhttp.ServerWorker.run(ServerWorker.java:279)
at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
t java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Caused by: org.apache.axiom.om.OMException: javax.xml.stream.XMLStreamException:ParseError at [row,col]:[4,41]
Message: http://www.w3.org/TR/1999/REC-xml-names-19990114#AttributePrefixUnbound?r:user&xsi:type&xsi
at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:296)
at org.apache.axiom.om.impl.llom.OMElementImpl.getNextOMSibling(OMElementImpl.java:336)
它是一个属性,因此它们不会为此声明任何命名空间。 在java.lang.Thread.run(Thread.java:744) 引起:org.apache.axiom.om.OMException:javax.xml.stream.XMLStreamException:[row,col]处的ParseError:[4,41] 消息:http://www.w3.org/TR/1999/REC-xml-names-19990114#AttributePrefixUnbound?r:user&xsi:type&xsi
如何在wso2esb中对xml验证进行diable或如何处理这种消息,如果我声明命名空间它工作正常,但是我的遗留系统不会发送它在其他ESB相同请求正常工作的地方。
我尝试过使用Http,NHttp传输更改axis2文件中的不同消息构建器。
提前感谢。
答案 0 :(得分:1)
您可以使用自定义axis2邮件构建器
来实现此目的自定义消息构建器应实现以下方法
public OMElement processDocument(InputStream inputStream,String contentType,MessageContext messageContext)抛出AxisFault
在这种方法中实现您的自定义逻辑,在您的情况下,您可以 安全地替换xsi:type(希望你的soap请求不是rpc 编码样式的请求,否则你必须声明一个xml namesapce)
为自定义消息构建器创建一个jar文件并将其放入 的%wso2esb家庭%\库\部件\ lib中强>
修改axis2.xml配置文件 %wso2esb-home%\ repository \ conf \ axis2 以接受您的自定义构建器 通过wso2突触引擎
<messageBuilder contentType="text/xml" class="builder.CustomSoapBuilder" />
最后重新启动wso2 esb服务器以反映您的更改。