客户端传过来的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麻烦大家看看这是什么原因 感激不尽
解决方案 »
- struts2版本的宠物店,要的来,顺便散分。。。
- java怎样能想js那样动态调用方法?["方法名称"]
- Struts 配置文件中的 message-resources 是否可以配置成 war 包外的目录?
- 在webwork中实现pdf报表传的参数的问题。
- ibatis中sqlMapConfig的settings设置问题 在线等
- 如何在java中使用activeX,或者使用ping或ipconfig功能
- 关于webwork源代码的问题,我将web-work2.2\src\java\com中的文件加到Eclipse工程中,提示很多lib找不到!请问在哪能找到源代码需要的lib
- 初学struts碰到的问题
- 急!!:Unable to deploy 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.