1.使用Provider发布服务代码
package demo.order.provider; import javax.xml.namespace.QName; import javax.xml.soap.MessageFactory; import javax.xml.soap.SOAPElement; import javax.xml.soap.SOAPMessage; import javax.xml.transform.dom.DOMSource; import javax.xml.ws.Provider; import javax.xml.ws.Service; import javax.xml.ws.ServiceMode; import javax.xml.ws.WebServiceProvider; import org.w3c.dom.Node; import org.w3c.dom.NodeList; @WebServiceProvider() @ServiceMode(value = Service.Mode.MESSAGE) public class OrderProcessDOMProvider implements Provider<DOMSource> { public OrderProcessDOMProvider() { } public DOMSource invoke(DOMSource request) { DOMSource response = new DOMSource(); try { MessageFactory factory = MessageFactory.newInstance(); SOAPMessage soapReq = factory.createMessage(); soapReq.getSOAPPart().setContent(request); System.out.println("Incoming Client Request as a DOMSource data in MESSAGE Mode"); soapReq.writeTo(System.out); System.out.println("\n"); Node processOrderNode = soapReq.getSOAPBody().getFirstChild(); Node order = processOrderNode.getChildNodes().item(0); NodeList list = order.getChildNodes(); for(int i = 0 ; i<list.getLength() ; i++){ System.out.println(list.item(i).getNodeName() + "=" + list.item(i).getFirstChild().getNodeValue()); } SOAPMessage orderResponse = factory.createMessage(); QName processOrderQName = new QName("http://order.demo/", "processOrder"); QName responseQName = new QName("http://order.demo/", "return"); SOAPElement processOrderResponse = orderResponse.getSOAPBody().addChildElement(processOrderQName); processOrderResponse.addChildElement(responseQName).addTextNode("ORD1234"); response.setNode(orderResponse.getSOAPPart()); } catch (Exception ex) { ex.printStackTrace(); } return response; } }
这里的 Provider泛型中可传入javax.xml.transform.Source类型,javax.activation.DataSource类型 和javax.xml.soap.SOAPMessage类型
javax.xml.transform.Source类型又有如下子类
1.DOMSource
2.SAXSource
3.StreamSource
ServiceMode注解来以来指定接收请求报文的模式(Service.Mode.MESSAGE 或 Service.Mode.PAYLOAD)
发布服务代码:
package demo.order.provider; import javax.xml.ws.Endpoint; public class Server { protected Server() throws Exception { System.out.println("Starting Server"); Object implementor = new OrderProcessDOMProvider(); String address = "http://localhost:8080/OrderProcessDOMProvider"; Endpoint.publish(address, implementor); } public static void main(String args[]) throws Exception { new Server(); System.out.println("Server ready..."); Thread.sleep(5 * 60 * 1000); System.out.println("Server exiting"); System.exit(0); } }
生成的WSDL:
<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://provider.order.demo/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="OrderProcessDOMProviderService" targetNamespace="http://provider.order.demo/"> <wsdl:types> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://provider.order.demo/" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://provider.order.demo/"> <xsd:element name="invoke" nillable="true" type="xsd:anyType"/> <xsd:element name="invokeResponse" nillable="true" type="xsd:anyType"/> </xsd:schema> </wsdl:types> <wsdl:message name="invokeResponse"> <wsdl:part element="tns:invokeResponse" name="invokeResponse"> </wsdl:part> </wsdl:message> <wsdl:message name="invoke"> <wsdl:part element="tns:invoke" name="invoke"> </wsdl:part> </wsdl:message> <wsdl:portType name="OrderProcessDOMProvider"> <wsdl:operation name="invoke"> <wsdl:input message="tns:invoke" name="invoke"> </wsdl:input> <wsdl:output message="tns:invokeResponse" name="invokeResponse"> </wsdl:output> </wsdl:operation> </wsdl:portType> <wsdl:binding name="OrderProcessDOMProviderServiceSoapBinding" type="tns:OrderProcessDOMProvider"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="invoke"> <soap:operation soapAction="" style="document"/> <wsdl:input name="invoke"> <soap:body use="literal"/> </wsdl:input> <wsdl:output name="invokeResponse"> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="OrderProcessDOMProviderService"> <wsdl:port binding="tns:OrderProcessDOMProviderServiceSoapBinding" name="OrderProcessDOMProviderPort"> <soap:address location="http://localhost:8080/OrderProcessDOMProvider"/> </wsdl:port> </wsdl:service> </wsdl:definitions>
客户端代码如下:
package demo.order.dispatcher; import java.net.URL; import javax.xml.namespace.QName; import javax.xml.soap.MessageFactory; import javax.xml.soap.SOAPElement; import javax.xml.soap.SOAPMessage; import javax.xml.transform.dom.DOMSource; import javax.xml.ws.Dispatch; import javax.xml.ws.Service; import javax.xml.ws.Service.Mode; public final class DispatcherClient { public static final String WSDLFile = "http://localhost:8080/OrderProcessDOMProvider?wsdl"; public DispatcherClient() { } public static void main(String args[]) throws Exception { URL wsdlURL = new URL(WSDLFile); MessageFactory factory = MessageFactory.newInstance(); QName domProvider = new QName("http://provider.order.demo/", "OrderProcessDOMProviderService"); QName portName = new QName("http://provider.order.demo/", "OrderProcessDOMProviderPort"); Service service = Service.create(wsdlURL, domProvider); SOAPMessage soapRequest = factory.createMessage(); QName processOrderQName = new QName("http://order.demo/", "processOrder"); //create the element - <http://order.demo/:processOrder></http://order.demo/:processOrder> SOAPElement processOrderResponse = soapRequest.getSOAPBody().addChildElement(processOrderQName); SOAPElement order = processOrderResponse.addChildElement("arg0"); order.addChildElement("customerID").addTextNode("Naveen"); order.addChildElement("itemID").addTextNode("I001"); order.addChildElement("price").addTextNode("200.00"); order.addChildElement("qty").addTextNode("200"); DOMSource domRequestMsg = new DOMSource(soapRequest.getSOAPPart()); Dispatch<DOMSource> domMsg = service.createDispatch(portName, DOMSource.class, Mode.MESSAGE); DOMSource domResponseMsg = domMsg.invoke(domRequestMsg); SOAPMessage soapReq = factory.createMessage(); soapReq.getSOAPPart().setContent(domRequestMsg); System.out.println("Client Request as a DOMSource data in MESSAGE Mode"); soapReq.writeTo(System.out); System.out.println("\n"); System.out.println("Response from server: " + domResponseMsg.getNode().getLastChild().getTextContent()); } }
相关推荐
使用JAX-WS(JWS)发布WebService 使用myeclipse开发java的webservice的两种方式 方式一: (此方式只能作为调试,有以下bug:jdk1.6u17?以下编译器不支持以Endpoint.publish方式发布document方式的soap,必须在...
JAX-WS(Java API for XML Web Services)是Java平台上的一个标准,用于创建和消费Web服务。本篇将深入讲解如何基于JAX-WS开发一个WebService实例。 首先,让我们了解JAX-WS的基本概念。JAX-WS提供了一种简单的方式...
JAX-WS通常与JAXB(Java Architecture for XML Binding)一起使用,用于自动序列化和反序列化Java对象到XML和反之。JAXB负责将Java对象转换成XML消息,反之亦然,使得数据交换变得简单。 7. **工具支持** 开发者...
把这些JAR文件复制到Tomcat安装目录的`lib`子目录下,可以确保Tomcat在启动时加载这些依赖,从而支持JAX-WS服务的发布和执行。这一步骤对于那些没有内置JAX-WS支持的轻量级应用服务器,如Tomcat来说尤其重要。 在...
标题"jax-rs jax-ws所需包,亲测可用"表明这个压缩包包含了用于开发Java RESTful Web服务(JAX-RS)和Java SOAP Web服务(JAX-WS)所需的库文件。这些库是Java应用程序进行Web服务交互的核心组件,确保了对HTTP协议...
MyEclipse8_0中使用 JAX-WS 部署 WebService 实例 - 外衣 - 博客频道 - CSDN_NET.mht
JAX-WS方式开发和部署webservice应用,JAX-WS方式开发和部署webservice应用,JAX-WS方式开发和部署webservice应用,JAX-WS方式开发和部署webservice应用,JAX-WS方式开发和部署webservice应用
标题中的“一个包含jax-ws和jax-rs的例子(含服务端和客户端)”是指这是一个示例项目,它演示了如何使用Java API for XML Web Services (JAX-WS)和Java API for RESTful Web Services (JAX-RS)来创建和消费Web服务。...
这个"jax-ws WebService客户端与服务端工程.rar"压缩包文件包含了一个完整的示例,展示了如何使用JAX-WS创建和消费Web服务。让我们深入探讨一下JAX-WS的核心概念和技术。 1. **Web服务基础**: - **SOAP(Simple ...
基于jax-ws 实现的web service client和server端的demo程序。 注:如果使用的是 myeclipse 时 server 部署到tomcat 启动的时候会报错 解决办法:找到myeclipse安装目录下的 plugins 目录里 查找 webservices-rt.jar,...
- **简单性**:JAX-WS使用注解和Java语言特性,使得Web服务的开发更加直观和简洁。 - **互操作性**:遵循SOAP和WSDL标准,确保与不同平台和语言的服务进行交互。 - **可扩展性**:支持WS-Security、WS-...
Java 基于第三方插件实现WebService实在麻烦,尤其是要添加几十M的Jar包...还好,自从JDK 1.6开始,Java自身已经支持WebSeervice的开发即JAX-WS,附件是一个简单的示例,供入门参考。注意,JDK环境要求1.6及以上版本。
Java API for XML Web Services(JAX-WS)是Java平台上的一个标准,用于构建和部署Web服务。...在"jax-ws-server"和"jax-ws-client"这两个目录中,你可以找到完整的示例代码,帮助你理解和实践JAX-WS的使用。
在本教程中,我们将深入探讨如何使用JAX-WS来发布和调用Web服务。 ### 1. JAX-WS概述 JAX-WS提供了一种简化的方式,将Java方法映射到Web服务操作,反之亦然。它包括以下组件: - **Service Endpoint Interface ...
JAX-WS(Java API for XML Web Services)是Java平台上的一个标准,用于创建和部署Web服务。WebLogic作为一款强大的Java EE应用服务器,支持JAX-WS标准,但正确配置和部署这些服务需要一些额外的步骤。本指南将详细...
Java API for XML Web Services(JAX-WS)是Java平台上的一个标准,用于构建和部署Web服务。它简化了Web服务的开发,使得开发者能够使用Java编程语言来创建、调用和部署SOAP(Simple Object Access Protocol)服务。...
5. **数据绑定:**JAX-WS使用JAXB(Java Architecture for XML Binding)进行数据绑定,将XML数据自动转换为Java对象和反之亦然。这使得处理XML消息变得更简单,减少了手动解析XML的必要。 6. **异常处理:**JAX-WS...
JAX-WS 2.2 RI 所包含的JAR包集合,包含25个JAR包,列表如下: FastInoset.jar gmbal-api-only.jar ha-api.jar javax.annotation.jar javax.mail_1.4.jar jaxb-api.jar jaxb-impl.jar jaxb-xjc.jar jaxws-api...
JAX-WS使用Java Architecture for XML Binding (JAXB)进行数据绑定,将Java对象自动转换为XML和反向转换。这简化了数据交换,使得Web服务接口更加直观。 6. **异步通信** JAX-WS 2.1引入了对异步调用的支持,允许...
总的来说,“webservice Demo注解+jax-ws”是一个很好的学习资源,帮助初学者了解如何使用Java注解和JAX-WS来创建、部署和使用Web服务。通过阅读提供的文档和实践示例,你将能够深入理解Web服务的基本原理,并具备...