Soap消息的处理 首先,复习下,创建一个webservice服务。新建一个java工程 Soap。接口、接口、服务类分别如下: packagecom.zhutulang.soap; importjavax.jws.WebParam;importjavax.jws.WebResult;importjavax.jws.W
Soap消息的处理
首先,复习下,创建一个webservice服务。新建一个java工程 Soap。接口、接口、服务类分别如下:
packagecom.zhutulang.soap; importjavax.jws.WebParam; importjavax.jws.WebResult; importjavax.jws.WebService; @WebService public interface MyServiceInter { @WebResult(name="addResult") public int add(@WebParam(name="a")int a, @WebParam(name="b")int b); }
packagecom.zhutulang.soap; importjavax.jws.WebService; @WebService(endpointInterface="com.zhutulang.soap.MyServiceInter") public class MyServiceInterImpl implements MyServiceInter { @Override public int add(int a, int b) { System.out.println("a+b"+(a+b)); return a+b; } }
packagecom.zhutulang.soap; importjavax.xml.ws.Endpoint; public class MyServer { public static void main(String[] args) { Endpoint.publish("http://localhost:9999/webservice", new MyServiceInterImpl()); System.out.println("publish success"); } }
然后,我们新建一个SoapTest类,首先来看看怎样封装soap消息:
packagecom.zhutulang.soap; importjava.io.IOException; importjavax.xml.namespace.QName; importjavax.xml.soap.MessageFactory; importjavax.xml.soap.SOAPBody; importjavax.xml.soap.SOAPBodyElement; importjavax.xml.soap.SOAPEnvelope; importjavax.xml.soap.SOAPException; importjavax.xml.soap.SOAPMessage; importjavax.xml.soap.SOAPPart; importorg.junit.Test; public class SoapTest { @Test public void test1() throws SOAPException, IOException{ MessageFactory factory = MessageFactory.newInstance(); SOAPMessage message = factory.createMessage(); SOAPPart part = message.getSOAPPart(); SOAPEnvelope envelope = part.getEnvelope(); SOAPBody body = envelope.getBody(); QName qName = new QName("http://soap.zhutulang.com/", "add", "ns"); SOAPBodyElement element = body.addBodyElement(qName); element.addChildElement("a").setValue("120"); element.addChildElement("b").setValue("220"); message.writeTo(System.out); } }
其中,QName(String namespaceURI,String localPart,String prefix)各参数含义是 命名空间 URI、本地部分和前缀的 QName。
下面是一个发送soap消息并接受返回消息的方法示例:
/** * <p>Title: test2</p> * <p>Description:发送接收soap消息 </p> * @author zhutulang * @version 1.0 * @throws SOAPException * @throws IOException */ @Test public void test2() throws SOAPException, IOException{ //1.创建服务 URL url = new URL(wsdlUrl); QName qName = new QName(namespaceUrl, "MyServiceInterImplService"); Service service = Service.create(url, qName); //2.创建Dispatch Dispatch<SOAPMessage> dispatch = service.createDispatch(new QName(namespaceUrl, "MyServiceInterImplPort"), SOAPMessage.class, Service.Mode.MESSAGE); //3.创建SOAPMessage SOAPMessage msg = MessageFactory.newInstance().createMessage(); SOAPEnvelope envelope = msg.getSOAPPart().getEnvelope(); SOAPBody body = envelope.getBody(); //4.创建QName来指定消息中传递的数据 QName ename = new QName(namespaceUrl, "add", "ns"); SOAPBodyElement element = body.addBodyElement(ename); element.addChildElement("a").setValue("22"); element.addChildElement("b").setValue("33"); msg.writeTo(System.out); System.out.println(); //5.通过Distpatch传递信息 SOAPMessage responseMsg = dispatch.invoke(msg); responseMsg.writeTo(System.out); System.out.println(); //6.将响应的消息转换为dom对象 Document doc = responseMsg.getSOAPPart().getEnvelope().getBody().extractContentAsDocument(); String addResult = doc.getElementsByTagName("addResult").item(0).getTextContent(); System.out.println("addResult="+addResult); }
相关的代码下载:http://download.csdn.net/detail/zhutulang/9487929