关于SOAPMessage 的问题

guicaizhou 2013-06-14 09:47:13
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<soapenv:Body>
<m:LotteryBalanceQuery xmlns:m="http://LotteryBalanceQuery.tydic.com">
<m:in0>
<m:entry>
<m:key>nStaffId</m:key>
<m:value>100097</m:value>
</m:entry>
<m:entry>
<m:key>nLantId</m:key>
<m:value>551</m:value>
</m:entry>
<m:entry>
<m:key>sServiceNbr</m:key>
<m:value>15305510283</m:value>
</m:entry>
</m:in0>
</m:LotteryBalanceQuery>
</soapenv:Body>
</soapenv:Envelope>

这是一个SOAPMessage类型
哪个大牛知道如何把里面的soapenv都改成SOAP-ENC
...全文
2567 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
皓月_惊鸿 2014-08-06
  • 打赏
  • 举报
回复
有没有办法在解析返回数据的时候,定义命名空间 m 呀
oh_Maxy 版主 2013-06-15
  • 打赏
  • 举报
回复
引用 楼主 guicaizhou 的回复:
<?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"> <soapenv:Body> <m:LotteryBalanceQuery xmlns:m="http://LotteryBalanceQuery.tydic.com"> <m:in0> <m:entry> <m:key>nStaffId</m:key> <m:value>100097</m:value> </m:entry> <m:entry> <m:key>nLantId</m:key> <m:value>551</m:value> </m:entry> <m:entry> <m:key>sServiceNbr</m:key> <m:value>15305510283</m:value> </m:entry> </m:in0> </m:LotteryBalanceQuery> </soapenv:Body> </soapenv:Envelope> 这是一个SOAPMessage类型 哪个大牛知道如何把里面的soapenv都改成SOAP-ENC
问题不是换结点名,而是你的命名空间m没有定义。 仔细看,soapenv在上面有定义,那就可以用;而m都没有定义的。。 LZ可以把m:都去掉试试
guicaizhou 2013-06-14
  • 打赏
  • 举报
回复
try { // 创建连接 // ================================================== SOAPConnectionFactory soapConnFactory = SOAPConnectionFactory.newInstance(); SOAPConnection connection = soapConnFactory.createConnection(); // 创建消息对象 // =========================================== MessageFactory messageFactory = MessageFactory.newInstance(); SOAPMessage message = messageFactory.createMessage(); message.getSOAPPart().getEnvelope().addNamespaceDeclaration("SOAP-ENC","http://schemas.xmlsoap.org/soap/encoding/"); // 创建soap消息主体========================================== SOAPPart soapPart = message.getSOAPPart();// 创建soap部分 SOAPEnvelope envelope = soapPart.getEnvelope(); SOAPBody body = envelope.getBody(); // 根据要传给mule的参数,创建消息body内容。具体参数的配置可以参照应用集成接口技术规范1.1版本 SOAPBodyElement bodyElement = body.addBodyElement(envelope.createName("LotteryBalanceQuery", "m", "http://LotteryBalanceQuery.tydic.com")); SOAPElement bodyElement1 = bodyElement.addChildElement("in0"); SOAPElement bodyElement2 = bodyElement1.addChildElement("entry"); SOAPElement bodyElement3 = bodyElement1.addChildElement("entry"); SOAPElement bodyElement4 = bodyElement1.addChildElement("entry"); bodyElement2.addChildElement("key").addTextNode("nStaffId"); bodyElement2.addChildElement("value").addTextNode("100097"); bodyElement3.addChildElement("key").addTextNode("nLantId"); bodyElement3.addChildElement("value").addTextNode("551"); bodyElement4.addChildElement("key").addTextNode("sServiceNbr"); bodyElement4.addChildElement("value").addTextNode("15305510283"); // Save the message message.saveChanges(); // 打印客户端发出的soap报文,做验证测试 System.out.println("----------------"); message.writeTo(System.out); System.out.println("\n----------------"); /* * 实际的消息是使用 call()方法发送的,该方法接收消息本身和目的地作为参数,并返回第二个 SOAPMessage 作为响应。 * call方法的message对象为发送的soap报文,url为mule配置的inbound端口地址。 */ URL url = new URL("http://*****:7002/BillWeb/services/LotteryBalanceQuery"); // 响应消息 // =========================================================================== SOAPMessage reply = connection.call(message, url); //reply.setProperty(SOAPMessage.CHARACTER_SET_ENCODING, "gb2312"); // 打印服务端返回的soap报文供测试 System.out.println("RESPONSE:"); // ==================创建soap消息转换对象 TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); // Extract the content of the reply======================提取消息内容 Source sourceContent = reply.getSOAPPart().getContent(); // Set the output for the transformation StreamResult result = new StreamResult(System.out); transformer.transform(sourceContent, result); // Close the connection 关闭连接 ============== System.out.println(""); connection.close(); } catch (Exception e) { e.printStackTrace(); System.out.println(e.getMessage()); } 这是代码,报错指向这个 SOAPMessage reply = connection.call(message, url);
guicaizhou 2013-06-14
  • 打赏
  • 举报
回复
javax.xml.soap.SOAPException: java.net.SocketException: Connection reset at org.apache.axis.soap.SOAPConnectionImpl.call(SOAPConnectionImpl.java: 110) at com.tydic.LotteryBalanceQuery.test2.main(test2.java:98) Caused by: java.net.SocketException: Connection reset at org.apache.axis.AxisFault.makeFault(AxisFault.java:129) at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:543) at org.apache.axis.Message.getSOAPEnvelope(Message.java:375) at org.apache.axis.client.Call.invokeEngine(Call.java:2545) at org.apache.axis.client.Call.invoke(Call.java:2515) at org.apache.axis.client.Call.invoke(Call.java:1715) at org.apache.axis.soap.SOAPConnectionImpl.call(SOAPConnectionImpl.java: 105) ... 1 more Caused by: java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:168) at java.io.BufferedInputStream.fill(BufferedInputStream.java:183) at java.io.BufferedInputStream.read(BufferedInputStream.java:201) at java.io.FilterInputStream.read(FilterInputStream.java:66) at org.apache.xerces.impl.XMLEntityManager$RewindableInputStream.read(XM LEntityManager.java:3287) at org.apache.xerces.impl.XMLEntityManager.startEntity(XMLEntityManager. java:751) at org.apache.xerces.impl.XMLEntityManager.startDocumentEntity(XMLEntity Manager.java:685) at org.apache.xerces.impl.XMLDocumentScannerImpl.setInputSource(XMLDocum entScannerImpl.java:252) at org.apache.xerces.parsers.StandardParserConfiguration.parse(StandardP arserConfiguration.java:503) at org.apache.xerces.parsers.StandardParserConfiguration.parse(StandardP arserConfiguration.java:585) at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:147) at org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.j ava:1148) at javax.xml.parsers.SAXParser.parse(SAXParser.java:345) at org.apache.axis.encoding.DeserializationContextImpl.parse(Deserializa tionContextImpl.java:242) at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:538) ... 6 more java.net.SocketException: Connection reset F:\ahvnet\webservice\ProvinceFor97\Socket\SocketApp>pause 请按任意键继续. . .
guicaizhou 2013-06-14
  • 打赏
  • 举报
回复
引用 3 楼 dracularking 的回复:
找一下修改节点名的方法,改一下就可以了
关键现在 好像不是这个节点有问题
dracularking 2013-06-14
  • 打赏
  • 举报
回复
找一下修改节点名的方法,改一下就可以了
guicaizhou 2013-06-14
  • 打赏
  • 举报
回复
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" > <SOAP-ENV:Body> <m:LotteryBalanceQuery xmlns:m="http://LotteryBalanceQuery.tydic.com"> <m:in0> <m:entry> <m:key>nStaffId</m:key> <m:value>100097</m:value> </m:entry> <m:entry> <m:key>nLantId</m:key> <m:value>551</m:value> </m:entry> <m:entry> <m:key>sServiceNbr</m:key> <m:value>15305510283</m:value> </m:entry> </m:in0> </m:LotteryBalanceQuery> </SOAP-ENV:Body> </SOAP-ENV:Envelope> 这个是我想要的 <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"> <soapenv:Body> <m:LotteryBalanceQuery xmlns:m="http://LotteryBalanceQuery.tydic.com"> <m:in0> <m:entry> <m:key>nStaffId</m:key> <m:value>100097</m:value> </m:entry> <m:entry> <m:key>nLantId</m:key> <m:value>551</m:value> </m:entry> <m:entry> <m:key>sServiceNbr</m:key> <m:value>15305510283</m:value> </m:entry> </m:in0> </m:LotteryBalanceQuery> </soapenv:Body> </soapenv:Envelope> 这个是代码打印的 如何改动代码呢 高手出来
guicaizhou 2013-06-14
  • 打赏
  • 举报
回复
// 创建连接 // ================================================== SOAPConnectionFactory soapConnFactory = SOAPConnectionFactory.newInstance(); SOAPConnection connection = soapConnFactory.createConnection(); // 创建消息对象 // =========================================== MessageFactory messageFactory = MessageFactory.newInstance(); SOAPMessage message = messageFactory.createMessage(); message.getSOAPPart().getEnvelope().addNamespaceDeclaration("SOAP-ENC","http://schemas.xmlsoap.org/soap/encoding/"); Iterator iter = message.getSOAPPart().getEnvelope().getNamespacePrefixes(); while(iter.hasNext()){ System.out.println( (iter.next()) + "======"); } // 创建soap消息主体========================================== SOAPPart soapPart = message.getSOAPPart();// 创建soap部分 SOAPEnvelope envelope = soapPart.getEnvelope(); SOAPBody body = envelope.getBody(); // 根据要传给mule的参数,创建消息body内容。具体参数的配置可以参照应用集成接口技术规范1.1版本 SOAPBodyElement bodyElement = body.addBodyElement(envelope.createName("LotteryBalanceQuery", "m", "http://LotteryBalanceQuery.tydic.com")); SOAPElement bodyElement1 = bodyElement.addChildElement("in0"); SOAPElement bodyElement2 = bodyElement1.addChildElement("entry"); SOAPElement bodyElement3 = bodyElement1.addChildElement("entry"); SOAPElement bodyElement4 = bodyElement1.addChildElement("entry"); bodyElement2.addChildElement("key").addTextNode("nStaffId"); bodyElement2.addChildElement("value").addTextNode("100097"); bodyElement3.addChildElement("key").addTextNode("nLantId"); bodyElement3.addChildElement("value").addTextNode("551"); bodyElement4.addChildElement("key").addTextNode("sServiceNbr"); bodyElement4.addChildElement("value").addTextNode("15305510283"); // Save the message message.saveChanges(); // 打印客户端发出的soap报文,做验证测试 System.out.println("----------------"); message.writeTo(System.out); System.out.println("----------------"); 这个是代码
dracularking 2013-06-14
  • 打赏
  • 举报
回复
引用 4 楼 guicaizhou 的回复:
[quote=引用 3 楼 dracularking 的回复:] 找一下修改节点名的方法,改一下就可以了
关键现在 好像不是这个节点有问题[/quote] 你不是要修改节点名吗?

50,527

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧