webservice入门笔记二soap消息的处理
发布时间:2020-12-16 22:18:39 所属栏目:安全 来源:网络整理
导读:Soap消息的处理 首先,复习下,创建一个webservice服务。新建一个java工程 Soap。接口、接口、服务类分别如下: packagecom.zhutulang.soap; importjavax.jws.WebParam;importjavax.jws.WebResult;importjavax.jws.WebService; @WebServicepublic interface
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,"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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |