soap消息分析和soap消息的传递和处理(一)
来源:互联网 发布:mac移动硬盘无法写入 编辑:程序博客网 时间:2024/04/27 17:54
WebService传递的时候实际上是传递一个SOAPMessage,我们来探究一下SOAPMessage的组成。
SOAPMessage由一个个的SOAP块组成,这些SOAPPart被封装到一个SOAPEnvelope(信封)中,信封中包括head和body。我们可以自己创建一个SOAPMessage发送到服务提供端,从而返回WebService调用结果。
WebService服务创建代码参考上篇,本篇探讨SOAPMessage的组成和发送。
TestClient.java
package com.smile.service;import java.io.IOException;import java.net.URL;import javax.xml.namespace.QName;import javax.xml.soap.MessageFactory;import javax.xml.soap.SOAPBody;import javax.xml.soap.SOAPBodyElement;import javax.xml.soap.SOAPEnvelope;import javax.xml.soap.SOAPException;import javax.xml.soap.SOAPMessage;import javax.xml.soap.SOAPPart;import javax.xml.ws.Dispatch;import javax.xml.ws.Service;import org.junit.Test;public class TestClient {private String wsdlUrl = "http://localhost:8889/ns?wsdl";private String ns = "http://service.smile.com/";@Testpublic void test(){try {//创建消息工厂MessageFactory factory = MessageFactory.newInstance();//根据消息工厂创建SOAPMessageSOAPMessage message = factory.createMessage();//创建SOAPPartSOAPPart part = message.getSOAPPart();//获取SOAPEnvelope soap信封SOAPEnvelope envelope = part.getEnvelope();//可以通过SOAPEnvelope获取head body等信息SOAPBody body = envelope.getBody();//根据QName 创建相应的节点QName qname = new QName("http://smile.web.com/webservice", "add", "ws");//<ws:add xmlns="http://smile.web.com/webservice"/>//使用以下方式设置< > 会被转义//body.addBodyElement(qname).setValue("<a>1</a><b>2</b>");SOAPBodyElement element = body.addBodyElement(qname);element.addChildElement("a").setValue("1");element.addChildElement("b").setValue("2");try {message.writeTo(System.out);} catch (IOException e) {e.printStackTrace();}} catch (SOAPException e) {e.printStackTrace();}}@Testpublic void test2(){try {//创建服务(Service)URL url = new URL(wsdlUrl);QName sname = new QName(ns,"MyServiceImplService"); Service service = Service.create(url, sname);//创建DispatchDispatch<SOAPMessage> dispatch = service.createDispatch(new QName(ns,"MyServiceImplPort"),SOAPMessage.class,Service.Mode.MESSAGE);//创建消息工厂MessageFactory factory = MessageFactory.newInstance();//根据消息工厂创建SOAPMessageSOAPMessage message = factory.createMessage();//创建SOAPPartSOAPPart part = message.getSOAPPart();//获取SOAPEnvelope soap信封SOAPEnvelope envelope = part.getEnvelope();//可以通过SOAPEnvelope获取head body等信息SOAPBody body = envelope.getBody();//根据QName 创建相应的节点QName ename = new QName(ns, "add", "ws");//<ws:add xmlns="http://smile.web.com/webservice"/>//使用以下方式设置< > 会被转义//body.addBodyElement(qname).setValue("<a>1</a><b>2</b>");SOAPBodyElement element = body.addBodyElement(ename);element.addChildElement("a").setValue("22");element.addChildElement("b").setValue("33");message.writeTo(System.out);System.out.println("\t");System.out.println("Invoking.....");SOAPMessage response = dispatch.invoke(message);response.writeTo(System.out);} catch (Exception e) {e.printStackTrace();}}}
0 0
- soap消息分析和soap消息的传递和处理(一)
- Webservice_12_传递SOAP的消息和处理
- SOAP消息的创建、传递和处理(MESSAGE方式)
- SOAP消息的传递和处理(PAYLOAD方式)
- Webservice_13_Payload的方式传递SOAP的消息和处理 和 用SOAPMessage传递SOAP的消息和处理(无参数)
- soap消息的传递和处理(三)——包含header和异常的处理
- Webservice05---SOAP消息的分析和创建
- SOAP消息的传递
- Webservice06---SOAP消息的传递和处理(基于Message方式)
- soap消息传递和处理(基于Message和Payload的方式)
- soap的传递和处理
- soap消息的分析与处理
- 灵活定义和处理SOAP头消息
- 灵活定义和处理SOAP头消息
- JMS 传输和 SOAP 消息处理程序
- JAX-WS创建和处理SOAP消息
- JAX-WS创建和处理SOAP消息
- JAX-WS创建和处理SOAP消息
- C++预定义宏 C++ Predefined Macros
- TextView实现跑马灯效果
- java多态性Overload和Override的区别
- 自考——科学学习 相信自己
- C语言复习
- soap消息分析和soap消息的传递和处理(一)
- 【笨木头Lua专栏】基础补充04:迭代器初探
- hdu1002
- 黑马程序员:OC学习日记之内存管理
- swt comboBoxCelleditor 的使用
- 推荐系统
- 【笨木头Lua专栏】基础补充04:for循环与迭代器的秘密
- 黑马程序员-block和protocol
- 高并发服务器端设计