客户端传过来的SOAP消息 用代码解析出错
接收SOAP消息的方法public SOAPMessage onMessage(SOAPMessage msg) { System.out.println("开始接受soap消息");
try {
msg.writeTo(new FileOutputStream(new File("E:\\soapMessage.xml")));
SOAPMessage smsg = msg ;
msg.saveChanges();
System.out.println("test1");
SOAPMessage soapMessage = pm.parseMsg(smsg);
System.out.println("test2");
//soapMessage.saveChanges();
System.out.println("test3");
return null;
} catch (Exception e) {
System.out.println("接受消息报错异常###" + e);
e.printStackTrace();
return null;
}解析SOAP消息的方法
public SOAPMessage parseMsg(SOAPMessage msg){
try {
SOAPEnvelope envelope = msg.getSOAPPart().getEnvelope();
SOAPBody body = envelope.getBody();
SOAPElement orderResponse = (SOAPElement) body.getChildElements(
envelope.createName("orderResponse", "uvs",
"http://bme.huawei.com/uvsinterface")).next();
SOAPElement OrderResult = (SOAPElement) orderResponse
.getChildElements().next();
SOAPElement ResultMessage = (SOAPElement) OrderResult
.getChildElements().next();
SOAPElement MessageHeader = (SOAPElement) ResultMessage
.getChildElements().next(); NodeList nodelist = (NodeList) MessageHeader.getChildNodes();
while (nodelist.getLength() > 0)
{
for (int i = 0; i < nodelist.getLength(); i++)
{
Node node = (Node) nodelist.item(i);
short Type = node.getNodeType();
String name = node.getNodeName();
String value = node.getTextContent();
String namespace = node.getNamespaceURI(); System.out.println(Type);
System.out.println(name);
System.out.println(value);
System.out.println(namespace);
}
}
} catch (SOAPException e) {
e.printStackTrace();
}
return null;
}控制台打印的错误信息
开始接受soap消息
test1
错误:“Invalid byte 1 of 1-byte UTF-8 sequence.”
2012-5-13 13:51:41 com.sun.xml.internal.messaging.saaj.soap.EnvelopeFactory createEnvelope
严重: SAAJ0511: Unable to create envelope from given source
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Unable to create envelope from given source:
at com.sun.xml.internal.messaging.saaj.soap.EnvelopeFactory.createEnvelope(EnvelopeFactory.java:114)
at com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPPart1_1Impl.createEnvelopeFromSource(SOAPPart1_1Impl.java:71)
at com.sun.xml.internal.messaging.saaj.soap.SOAPPartImpl.getEnvelope(SOAPPartImpl.java:125)
at com.mapg.methods.ParseMessage.parseMsg(ParseMessage.java:15)
at org.tuge.mapg.cn.ResposeServelt.onMessage(ResposeServelt.java:43)
at javax.xml.messaging.JAXMServlet.doPost(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
Caused by: javax.xml.transform.TransformerException: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:720)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313)
at com.sun.xml.internal.messaging.saaj.util.transform.EfficientStreamingTransformer.transform(EfficientStreamingTransformer.java:392)
at com.sun.xml.internal.messaging.saaj.soap.EnvelopeFactory.createEnvelope(EnvelopeFactory.java:102)
... 20 more麻烦大家看看这是什么原因 感激不尽
接收SOAP消息的方法public SOAPMessage onMessage(SOAPMessage msg) { System.out.println("开始接受soap消息");
try {
msg.writeTo(new FileOutputStream(new File("E:\\soapMessage.xml")));
SOAPMessage smsg = msg ;
msg.saveChanges();
System.out.println("test1");
SOAPMessage soapMessage = pm.parseMsg(smsg);
System.out.println("test2");
//soapMessage.saveChanges();
System.out.println("test3");
return null;
} catch (Exception e) {
System.out.println("接受消息报错异常###" + e);
e.printStackTrace();
return null;
}解析SOAP消息的方法
public SOAPMessage parseMsg(SOAPMessage msg){
try {
SOAPEnvelope envelope = msg.getSOAPPart().getEnvelope();
SOAPBody body = envelope.getBody();
SOAPElement orderResponse = (SOAPElement) body.getChildElements(
envelope.createName("orderResponse", "uvs",
"http://bme.huawei.com/uvsinterface")).next();
SOAPElement OrderResult = (SOAPElement) orderResponse
.getChildElements().next();
SOAPElement ResultMessage = (SOAPElement) OrderResult
.getChildElements().next();
SOAPElement MessageHeader = (SOAPElement) ResultMessage
.getChildElements().next(); NodeList nodelist = (NodeList) MessageHeader.getChildNodes();
while (nodelist.getLength() > 0)
{
for (int i = 0; i < nodelist.getLength(); i++)
{
Node node = (Node) nodelist.item(i);
short Type = node.getNodeType();
String name = node.getNodeName();
String value = node.getTextContent();
String namespace = node.getNamespaceURI(); System.out.println(Type);
System.out.println(name);
System.out.println(value);
System.out.println(namespace);
}
}
} catch (SOAPException e) {
e.printStackTrace();
}
return null;
}控制台打印的错误信息
开始接受soap消息
test1
错误:“Invalid byte 1 of 1-byte UTF-8 sequence.”
2012-5-13 13:51:41 com.sun.xml.internal.messaging.saaj.soap.EnvelopeFactory createEnvelope
严重: SAAJ0511: Unable to create envelope from given source
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Unable to create envelope from given source:
at com.sun.xml.internal.messaging.saaj.soap.EnvelopeFactory.createEnvelope(EnvelopeFactory.java:114)
at com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPPart1_1Impl.createEnvelopeFromSource(SOAPPart1_1Impl.java:71)
at com.sun.xml.internal.messaging.saaj.soap.SOAPPartImpl.getEnvelope(SOAPPartImpl.java:125)
at com.mapg.methods.ParseMessage.parseMsg(ParseMessage.java:15)
at org.tuge.mapg.cn.ResposeServelt.onMessage(ResposeServelt.java:43)
at javax.xml.messaging.JAXMServlet.doPost(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
Caused by: javax.xml.transform.TransformerException: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:720)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313)
at com.sun.xml.internal.messaging.saaj.util.transform.EfficientStreamingTransformer.transform(EfficientStreamingTransformer.java:392)
at com.sun.xml.internal.messaging.saaj.soap.EnvelopeFactory.createEnvelope(EnvelopeFactory.java:102)
... 20 more麻烦大家看看这是什么原因 感激不尽
解决方案 »
- java.lang.IllegalStateException:异常
- 只有一台服务器,但要运行java项目和asp.net项目
- 如何使用RemoteServiceMixClient调用远程smx的服务?
- 谁能不能给我用通俗的语言讲解一下拦截器啊?
- 初学hibernate出错问题,请指教!
- 各位大哥,请教一个struts的问题。
- 谁能举一个比较好容易理解EJB和SERVELT的代码给我,不胜感激!!!(要求通俗易懂)
- 我想请问大家是如何看待EJB 和 JDO的?
- 用jbuild生成的测试文件测试ejb时为何出错
- 问个线程的问题
- 页面不能正常跳转到frameset下的子框架.
- Cannot Create PoolableConnectionFactory(TDS协议流无效。)
<?xml version="1.0" encoding="UTF-8"?>
LZ可以看看你的那个文件有没有加。
网上有很多解决方案的。可以百度下
http://blog.csdn.net/chenyanbo/article/details/6866941
One-byte codes are used only for the ASCII values 0 through 127. In this case the UTF-8 code has the same value as the ASCII code. The high-order bit of these codes is always 0.形式是0xxxxxxx也就是说它读到的字节最高位是1,因此被认定为是非法。
前提是它认定该字节是UTF-8编码,为什么会认定是UTF-8,可能是默认,也可能是哪里指定,比如xml文件中。
至于凭什么它能认定是1-byte UTF-8 sequence,不是很清楚,可能存在什么预认定机制,或者这个byte对于任意字节的UTF-8的首字节来说都是非法的,它只是表达成这样(但造成歧义了)结论:xml的编码实际上不是utf-8,可能是gb2312/gbk等,如果以这些编码去读取,也许就不会有这问题,或者传过来时将xml编码固定在utf-8
要认定是1-byte UTF-8 sequence还是比较容易认的,只要该字节后就出现了UTF-8 sequence的任意字节首字节,就可以辨识这是一个n-byte UTF-8 sequence.first byte pattern of 1-byte UTF-8 sequence: 0xxxxxxx
first byte pattern of 2-byte UTF-8 sequence: 110xxxxx
first byte pattern of 3-byte UTF-8 sequence: 1110xxxx
first byte pattern of 4-byte UTF-8 sequence: 11110xxx
对于以下这些异常提示也是同理:
Invalid byte 2 of 2-byte UTF-8 sequence.
Invalid byte 2 of 3-byte UTF-8 sequence.
Invalid byte 2 of 4-byte UTF-8 sequence.