2015-09-10 27 views
0

我有一个调用的CxF SOAP的WebService(部署在Tomcat)的一个wso2esb代理的无效字节2,并且也是REST API调用同一的CxF WS(有效负载转换请求:JSON-> XML和响应:XML-> JSON)。 服务使用@MTOM注释。 一切工作正常,但是当响应从服务来包含特殊字符的数据(例如:A E I O U)则WSO2记录此错误:WSO2 ESB MTOM - 错误中提取消息属性 - 3字节UTF-8序列

[2015-09-10 17:32:55,123] ERROR {org.apache.synapse.core.axis2.Axis2Sender} - Content-Type:multipart/related; type="application/xop+xml"; boundary="uuid:5262f134-0ff6-4c39-bcd7-682360f77566"; start="<[email protected]>"; start-info="application/soap+xml",Date:Thu, 10 Sep 2015 15:32:55 GMT,Server:Apache-Coyote/1.1,Transfer-Encoding:chunked, Unexpected error sending message back {org.apache.synapse.core.axis2.Axis2Sender} 
org.apache.axis2.AxisFault: Error in extracting message properties 
     at org.apache.rampart.handler.RampartSender.invoke(RampartSender.java:76) 
     at org.apache.axis2.engine.Phase.invokeHandler(Phase.java:340) 
     at org.apache.axis2.engine.Phase.invoke(Phase.java:313) 
     at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:261) 
     at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:426) 
     at org.apache.synapse.core.axis2.Axis2Sender.sendBack(Axis2Sender.java:163) 
     at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:321) 
     at org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:94) 
     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.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:268) 
     at org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:488) 
     at org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:170) 
     at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) 
     at org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:225) 
     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) 
     at java.lang.Thread.run(Thread.java:745) 
Caused by: org.apache.rampart.RampartException: Error in extracting message properties 
     at org.apache.rampart.RampartMessageData.<init>(RampartMessageData.java:414) 
     at org.apache.rampart.MessageBuilder.build(MessageBuilder.java:61) 
     at org.apache.rampart.handler.RampartSender.invoke(RampartSender.java:65) 
     ... 19 more 
Caused by: org.apache.ws.security.WSSecurityException: Error in converting SOAP Envelope to Document; nested exception is: 
     org.apache.axiom.om.OMException: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,278] 
Message: Invalid byte 2 of 3-byte UTF-8 sequence. 
     at org.apache.rampart.util.Axis2Util.getDocumentFromSOAPEnvelope(Axis2Util.java:149) 
     at org.apache.rampart.RampartMessageData.<init>(RampartMessageData.java:268) 
     ... 21 more 
Caused by: org.apache.axiom.om.OMException: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,278] 
Message: Invalid byte 2 of 3-byte UTF-8 sequence. 
     at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:296) 
     at org.apache.axiom.om.impl.llom.OMSerializableImpl.build(OMSerializableImpl.java:78) 
     at org.apache.axiom.om.impl.llom.OMElementImpl.build(OMElementImpl.java:722) 
     at org.apache.rampart.util.Axis2Util.getDocumentFromSOAPEnvelope(Axis2Util.java:84) 
     ... 22 more 
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,278] 
Message: Invalid byte 2 of 3-byte UTF-8 sequence. 
     at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:596) 
     at org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper.next(XMLStreamReaderWrapper.java:225) 
     at org.apache.axiom.util.stax.dialect.DisallowDoctypeDeclStreamReaderWrapper.next(DisallowDoctypeDeclStreamReaderWrapper.java:34) 
     at org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper.next(XMLStreamReaderWrapper.java:225) 
     at org.apache.axiom.util.stax.dialect.SJSXPStreamReaderWrapper.next(SJSXPStreamReaderWrapper.java:138) 
     at org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper.next(XMLStreamReaderWrapper.java:225) 
     at org.apache.axiom.util.stax.xop.XOPDecodingStreamReader.next(XOPDecodingStreamReader.java:181) 
     at org.apache.axiom.om.impl.builder.StAXOMBuilder.parserNext(StAXOMBuilder.java:681) 
     at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:214) 
     ... 25 more 
TID: [0] [ESB] [2015-09-10 17:32:55,125] ERROR {org.apache.axis2.transport.base.threads.NativeWorkerPool} - Uncaught exception {org.apache.axis2.transport.base.threads.NativeWorkerPool} 
org.apache.axiom.om.OMException: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,278] 
Message: Invalid byte 2 of 3-byte UTF-8 sequence. 
     at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:296) 
     at org.apache.axiom.om.impl.llom.OMElementImpl.buildNext(OMElementImpl.java:653) 
     at org.apache.axiom.om.impl.llom.OMElementImpl.getFirstOMChild(OMElementImpl.java:670) 
     at org.apache.axiom.om.impl.llom.OMElementImpl.getChildren(OMElementImpl.java:352) 
     at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:553) 
     at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:875) 
     at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:555) 
     at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:875) 
     at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:555) 
     at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:875) 
     at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:555) 
     at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:875) 
     at org.apache.axiom.soap.impl.llom.SOAPEnvelopeImpl.internalSerialize(SOAPEnvelopeImpl.java:230) 
     at org.apache.axiom.om.impl.llom.OMSerializableImpl.serialize(OMSerializableImpl.java:125) 
     at org.apache.axiom.om.impl.llom.OMSerializableImpl.serialize(OMSerializableImpl.java:113) 
     at org.apache.axiom.om.impl.llom.OMElementImpl.toString(OMElementImpl.java:988) 
     at java.lang.String.valueOf(String.java:2847) 
     at java.lang.StringBuffer.append(StringBuffer.java:232) 
     at org.apache.synapse.mediators.builtin.LogMediator.getFullLogMessage(LogMediator.java:184) 
     at org.apache.synapse.mediators.builtin.LogMediator.getLogMessage(LogMediator.java:123) 
     at org.apache.synapse.mediators.builtin.LogMediator.mediate(LogMediator.java:91) 
     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.MediatorFaultHandler.onFault(MediatorFaultHandler.java:85) 
     at org.apache.synapse.FaultHandler.handleFault(FaultHandler.java:102) 
     at org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:493) 
     at org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:170) 
     at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) 
     at org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:225) 
     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) 
     at java.lang.Thread.run(Thread.java:745) 
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,278] 
Message: Invalid byte 2 of 3-byte UTF-8 sequence. 
     at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:596) 
     at org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper.next(XMLStreamReaderWrapper.java:225) 
     at org.apache.axiom.util.stax.dialect.DisallowDoctypeDeclStreamReaderWrapper.next(DisallowDoctypeDeclStreamReaderWrapper.java:34) 
     at org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper.next(XMLStreamReaderWrapper.java:225) 
     at org.apache.axiom.util.stax.dialect.SJSXPStreamReaderWrapper.next(SJSXPStreamReaderWrapper.java:138) 
     at org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper.next(XMLStreamReaderWrapper.java:225) 
     at org.apache.axiom.util.stax.xop.XOPDecodingStreamReader.next(XOPDecodingStreamReader.java:181) 
     at org.apache.axiom.om.impl.builder.StAXOMBuilder.parserNext(StAXOMBuilder.java:681) 
     at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:214) 
     at org.apache.axiom.om.impl.llom.OMSerializableImpl.build(OMSerializableImpl.java:78) 
     at org.apache.axiom.om.impl.llom.OMElementImpl.build(OMElementImpl.java:722) 
     at org.apache.rampart.util.Axis2Util.getDocumentFromSOAPEnvelope(Axis2Util.java:84) 
     at org.apache.rampart.RampartMessageData.<init>(RampartMessageData.java:268) 
     at org.apache.rampart.MessageBuilder.build(MessageBuilder.java:61) 
     at org.apache.rampart.handler.RampartSender.invoke(RampartSender.java:65) 
     at org.apache.axis2.engine.Phase.invokeHandler(Phase.java:340) 
     at org.apache.axis2.engine.Phase.invoke(Phase.java:313) 
     at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:261) 
     at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:426) 
     at org.apache.synapse.core.axis2.Axis2Sender.sendBack(Axis2Sender.java:163) 
     at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:321) 
     at org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:94) 
     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.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:268) 
     at org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:488) 
     ... 7 more 

发生此错误既为代理和REST API。
如果我从WS中删除@MTOM,相同的请求可以正常工作。
Wso2esb和Tomcat与CentOS位于同一台计算机上。
wso2esb4.8.1
tomcat8.0.24

回答

0

最后,一个星期后,浪费了寻找一个答案,我有一个解决方案。 着名的错误“3字节UTF-8序列的无效字节2”。意味着一个xml具有enconding =“UTF-8”,在序言
<?xml version="1.0" encoding="UTF-8"?>
但所述内容具有不同的编码。当WSO2尝试解析响应时,由于声明的编码和有效负载的编码之间的差异,它会引发该错误。因此,在CXF web服务中,我强制这种编码传入和传出xml,其中
PhaseInterceptorChain.getCurrentMessage().put(Message.ENCODING, "UTF-8");
您可以在传入/传出拦截器中添加此行(如果有)或处理程序链中声明的处理程序中.XML。后者是我的情况。