服务端:
package cn.itcast.jdk16ws.service; import javax.jws.WebMethod; import javax.jws.WebService; import javax.jws.soap.soAPBinding; import javax.xml.ws.Endpoint; @WebService(serviceName="HelloWorldWS",targetNamespace="http://www.itcast.cn") @SOAPBinding(style=SOAPBinding.Style.RPC) public class HelloWorldService { @WebMethod public String sayHello(String name){ System.out.println(name); return "hello " + name; } @WebMethod public String sayWelcome(String name){ System.out.println(name); return "welcome " + name; } public static void main(String... args){ Endpoint.publish("http://localhost:7070/mywebservice",new HelloWorldService()); } }
客户端:
package cn.itcast.jdk16ws.client; import java.net.URL; import javax.xml.namespace.QName; import javax.xml.ws.dispatch; import javax.xml.ws.Service; import javax.xml.soap.MessageFactory; import javax.xml.soap.soAPBody; import javax.xml.soap.soAPEnvelope; import javax.xml.soap.soAPMessage; import javax.xml.soap.soAPPart; public class HelloWorldServiceClient { public static void main(String[] args){ try{ //wsdl URL wsdl = new URL("http://localhost:7070/mywebservice?wsdl"); //service String ns = "http://www.itcast.cn"; String svcName = "HelloWorldWS"; QName svcQName = new QName(ns,svcName); Service service = Service.create(wsdl,svcQName); //对应 /deFinitions/service/port/@name String portName = "HelloWorldServicePort"; QName portQName = new QName(ns,portName); dispatch<SOAPMessage> dispatch = service.createdispatch(portQName,SOAPMessage.class,Service.Mode.MESSAGE); SOAPMessage soapMsg = MessageFactory.newInstance().createMessage(); SOAPPart soapPart = soapMsg.getSOAPPart(); SOAPEnvelope env = soapPart.getEnvelope(); // env.addNamespaceDeclaration("ns0",ns); SOAPBody body = env.getBody(); String elementName = "sayHello"; QName sayHello = new QName(ns,elementName,"ns0"); body.addBodyElement(sayHello).addChildElement("arg0").setValue("tom"); soapMsg.writeto(System.out); System.out.println("--------invoke--------"); SOAPMessage response = dispatch.invoke(soapMsg); response.writeto(System.out); }catch(Exception e){ e.printstacktrace(); } } }
WSDL文档:
<?xml version="1.0" encoding="UTF-8"?><!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. --><!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. --><deFinitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.itcast.cn" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://www.itcast.cn" name="HelloWorldWS"> <types></types> <message name="sayHello"> <part name="arg0" type="xsd:string"></part> </message> <message name="sayHelloResponse"> <part name="return" type="xsd:string"></part> </message> <message name="sayWelcome"> <part name="arg0" type="xsd:string"></part> </message> <message name="sayWelcomeResponse"> <part name="return" type="xsd:string"></part> </message> <portType name="HelloWorldService"> <operation name="sayHello"> <input message="tns:sayHello"></input> <output message="tns:sayHelloResponse"></output> </operation> <operation name="sayWelcome"> <input message="tns:sayWelcome"></input> <output message="tns:sayWelcomeResponse"></output> </operation> </portType> <binding name="HelloWorldServicePortBinding" type="tns:HelloWorldService"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"></soap:binding> <operation name="sayHello"> <soap:operation soapAction=""></soap:operation> <input> <soap:body use="literal" namespace="http://www.itcast.cn"></soap:body> </input> <output> <soap:body use="literal" namespace="http://www.itcast.cn"></soap:body> </output> </operation> <operation name="sayWelcome"> <soap:operation soapAction=""></soap:operation> <input> <soap:body use="literal" namespace="http://www.itcast.cn"></soap:body> </input> <output> <soap:body use="literal" namespace="http://www.itcast.cn"></soap:body> </output> </operation> </binding> <service name="HelloWorldWS"> <port name="HelloWorldServicePort" binding="tns:HelloWorldServicePortBinding"> <soap:address location="http://localhost:7070/mywebservice"></soap:address> </port> </service> </deFinitions>
请求文档:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Header/> <SOAP-ENV:Body> <ns:sayHello xmlns:ns="http://www.itcast.cn"> <arg0>tom</arg0> </ns:sayHello> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
应答文档:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Header/> <S:Body> <ns2:sayHelloResponse xmlns:ns2="http://www.itcast.cn"> <return>hello tom</return> </ns2:sayHelloResponse> </S:Body> </S:Envelope>
基于消息协议负载的客户端访问:
package cn.itcast.jdk16ws.client; import java.io.StringReader; import java.net.URL; import javax.xml.namespace.QName; import javax.xml.transform.source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.Domresult; import javax.xml.transform.stream.StreamSource; import javax.xml.ws.dispatch; import javax.xml.ws.Service; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathFactory; import org.w3c.dom.NodeList; public class HelloWorldServiceClientUsingRawXml { public static void main(String[] args) throws Exception{ //wsdl URL wsdl = new URL("http://localhost:7000/mywebservice?wsdl"); //service String ns = "http://www.itcast.cn"; String svcName = "HelloWorldWS"; QName svcQName = new QName(ns,svcName); Service service = Service.create(wsdl,svcQName); //对应 /deFinitions/service/port/@name String portName = "HelloWorldServicePort"; QName portQName = new QName(ns,portName); //PAYLOAD 只提供对消息协议负载的访问 //MESSAGE 提供对整个消息协议的访问 dispatch<Source> dispatch = service.createdispatch(portQName,Source.class,Service.Mode.PAYLOAD); String payload = "<ns:sayHello xmlns:ns=\"http://www.itcast.cn\">" + "<arg0>tom</arg0>" + "</ns:sayHello>"; StreamSource request = new StreamSource(new StringReader(payload)); System.out.println("\nInvoking..."); Source bookResponse = dispatch.invoke(request); Domresult dom = new Domresult(); Transformer trans = TransformerFactory.newInstance().newTransformer(); trans.transform(bookResponse,dom); XPathFactory xpf = XPathFactory.newInstance(); XPath xp = xpf.newXPath(); NodeList resultNodes = (NodeList) xp.evaluate("//return",dom.getNode(),XPathConstants.NODESET); String returnRtn = resultNodes.item(0).getTextContent(); System.out.println(returnRtn); } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。