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。
/** * <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,"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); }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。