- 浏览: 545885 次
- 性别:
- 来自: 西安
文章分类
- 全部博客 (251)
- UML/RUP/软件工程 (0)
- DDD:领域驱动设计 (1)
- IaaS/Paas/SaaS (1)
- Hadoop/YARN (10)
- PBDP项目 (2)
- OSGi-基础 (7)
- OSGi-Aries (2)
- OSGi-SpringDM (32)
- Oracle/MySQL/SS (8)
- Felix/Equinox/Bnd (14)
- Virgo Server/Gemini (7)
- Weblogic/JBoss/Tomcat (10)
- ActiveMQ (14)
- Camel (1)
- Spring Roo/Eclipse (7)
- Java/JSP/JSF (10)
- Maven (19)
- ESB-Mule (1)
- ESB-ServiceMix (18)
- SOA/SCA/SDO (12)
- WebService/RESTful (17)
- JS/jQuery/ExtJS (4)
- Spring/JPA/MVC (15)
- SpringSecurity (5)
- BPM/jBPM (3)
- Hudson/SVN/CI (0)
- LinuxOS/虚拟化 (25)
- Office/OpenOffice (1)
- 项目管理 (5)
- POI/jFreeChart (1)
最新评论
-
panamera:
请问JMS Transport 发布的webservice 是 ...
CXF 提供的Service Transport-JMS Transpor -
jianyi296:
where is attachment.
CXF WebService Dynamic Client -
hj01kkk:
您好,我用jdbc-user-service为什么每次验证时都 ...
SpringSecurity笔记3-Authenticating Users:Authenticaton Strategy -
wufenglin1231:
你好,我在实现Mapping exceptions to re ...
RESTful 异常处理 -
xchd:
[echo] Project: common
[echo ...
Hive安装配置学习笔记
Provider and Dispatch services用用开发WebService进行处理Raw XML Message, 并且不通过方法调用。而
基于SEI的实现,消息是被使用JAXB进行转换成的XML。当Web Service Client与 Web Service Provider之间
需要传输大量的XML Message时比较适合。
JAX-WS提供了javax.xml.ws.Provider接口,该接口提供了功能用于创建处理XML Message的Service Provider;
他从Dispatcher Client中获取XML格式的消息请求,处理,生成响应。Provider实现将在Server上Publish一个
ServiceEndpoint.
JAX-WS提供了javax.xml.ws.Dispatch接口用于处理XML消息并且发送XML格式的响应给Service Provider.
完整代码参考http://springsfeng.iteye.com/blog/1634753附件。
1. Privider Service实现
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(); // Get arg0 - order element Node order = processOrderNode.getChildNodes().item(0); // Get list of child nodes associated with order and print it NodeList list = order.getChildNodes(); for (int i = 0; i < list.getLength(); i++) { // Get the child nodes and value as per the order xml request. System.out.println(list.item(i).getNodeName() + "=" + list.item(i).getFirstChild().getNodeValue()); } SOAPMessage orderResponse = factory.createMessage(); QName processOrderQName = new QName("http://server.webservice.sample.pcdp.org/","processOrder"); QName responseQName = new QName("http://server.webservice.sample.pcdp.org/", "return"); // create the element - // <http://order.demo/:processOrder></http://order.demo/:processOrder> SOAPElement processOrderResponse = orderResponse.getSOAPBody().addChildElement(processOrderQName); // create the element inside processOrder - // <http://order.demo/:return>ORD1234</http://order.demo/:return> processOrderResponse.addChildElement(responseQName).addTextNode("ORD1234"); response.setNode(orderResponse.getSOAPPart()); } catch (Exception ex) { ex.printStackTrace(); } return response; } }
发布服务:
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(50 * 60 * 1000); System.out.println("Server exiting"); System.exit(0); } }
2. Dispatcher Service实现
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.sample.pcdp.org/","OrderProcessDOMProviderService"); QName portName = new QName("http://provider.sample.pcdp.org/","OrderProcessDOMProviderPort"); Service service = Service.create(wsdlURL, domProvider); SOAPMessage soapRequest = factory.createMessage(); QName processOrderQName = new QName("http://provider.sample.pcdp.org/","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()); } }
Client端输出:
Client Request as a DOMSource data in MESSAGE Mode <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header/><SOAP-ENV:Body><processOrder xmlns="http://provider.sample.pcdp.org/"><arg0><customerID>Naveen</customerID><itemID>I001</itemID><price>200.00</price><qty>200</qty></arg0></processOrder></SOAP-ENV:Body></SOAP-ENV:Envelope> Response from server: ORD1234
Server端输出:
Incoming Client Request as a DOMSource data in MESSAGE Mode <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header/><SOAP-ENV:Body><processOrder xmlns="http://provider.sample.pcdp.org/"><arg0><customerID>Naveen</customerID><itemID>I001</itemID><price>200.00</price><qty>200</qty></arg0></processOrder></SOAP-ENV:Body></SOAP-ENV:Envelope> customerID=Naveen itemID=I001 price=200.00 qty=200
3. Provider and Dispatch概念理解
(1) Message Mode
Provider and Dispatche有两种消息类型:Provider and Dispatche,Payload. 区别在于两者之间的内容上。
Message mode由真实的数据和控制信息(Header)组成,而Payload Mode只仅仅有真实的数据组成。
例如:
@WebServiceProvider() @ServiceMode(value = Service.Mode.MESSAGE) public class OrderProcessDOMProvider implements Provider<DOMSource> { . . .
@WebServiceProvider() @ServiceMode(value = Service.Mode.PAYLOAD) public class OrderProcessDOMProvider implements Provider<DOMSource> { . . .
(2) The type of Mesage Object
Provider and Dispatch实现操作时的输入输出有以下几种类型:
javax.xml.transform.Source, javax.xml.soap.SOAPMessage, javax.activation.DataSource.
其中javax.activation.DataSource分为:
DOMSource, SAXSource, StreamSource.
发表评论
-
测试RESTful WebService的客户端工具-Poster
2012-08-24 10:54 1443Poster是一款用于与WebService副去其端进行交互并 ... -
CXF开发End-to-End RESTful WebService
2012-08-23 11:12 1168下面已具体的例子演示开发End-to-End RESTful ... -
CXF 提供的Service Transport-JMS Transpor
2012-08-22 09:33 1423下面以一个例子来展示JMS Transport的功能: 1. ... -
CXF 提供的Service Transport-HTTPS Transpor
2012-08-20 11:22 1102HTTPS是HTTP和安全协议的联合,用于访问敏感的信息。HT ... -
CXF 提供的Service Transport-HTTP Transport
2012-08-20 09:32 1412完整代码参考http://springsfeng.ite ... -
基于Simple Fronted的WebService开发
2012-08-20 08:54 986采用Simple frontend方式开发WebService ... -
Web Service Context示例
2012-08-17 11:28 1354Web service context指Endpoint之间传 ... -
CXF WebService Dynamic Client
2012-08-17 09:48 5493即在在运行期间在内存中动态的生成Client(SEI和Data ... -
Contract-First方式开发WebService及WSDL2Java工具
2012-08-16 10:26 1850WSDL文件:参考附件OrderP ... -
CXF 架构
2012-08-15 10:36 1597CXF Architecture 建立在下 ... -
WebService定义及SOAP通信方式
2012-08-14 09:47 1611W3C对WebService的定义: A Web ... -
RESTful 异常处理
2012-07-27 11:42 20271. Using WebApplicaitonExceptio ... -
返回信息给Consumer
2012-07-27 10:17 1660return four types of Java const ... -
传输信息至Resource Classes and Methods
2012-07-27 08:52 1505运行期间,Parameters, fields, and be ... -
RESTful 中创建"资源"
2012-07-26 09:19 1584RESTful 中所有的请求都是由资源来处理的。JAX-RS ... -
RESTful Web Services理论简介
2012-07-26 08:48 1200Representational State Transfer ...
相关推荐
Spring集成Cxf暴露WebServices示例
Apache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和 XFire 两大开源项目的精华...Apache CXF 是一个开源的 Services 框架
WebService环境配置 CXF环境搭建
Spring集成Cxf调用WebServices
oracle融合中间键调用接口,需要的部分jar包。希望有用。。。。
TipTec.Developing.Web.Services.with.Apache.CXF.and.Axis2.Jan.2010.rar
用CXF+Eclipse开发Web Services程序,包括环境搭建,插件安装以及简单的Web Services入门程序。
Apache CXF部署WebServices实例代码
CXF实现WebService_1 的视频,WebService的工作原理以及SOAP的简介
CXF实现WebService_1 的视频,JAX-WS的介绍
CXF helps you build and develop services using frontend programming APIs, like JAX-WS and JAX-RS. These services can speak a variety of protocols such as SOAP, XML/HTTP, RESTful HTTP, or CORBA and ...
Developing Web Services with Apache CXF and Axis2, 3rd Edition
Developing Web Services with Apache CXF and Axis2_3rd Edition
常用WebServices返回数据的4种方法比较方法。内有详细介绍。
Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ,像 JAX-WS 。这些 Services 可以支持多种协议,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,并且可以在...
CXF WebServices整合SSH2和Uploadify上传控件的代码,本人已做测试能够跑通. 请把服务端和客户端部署在不同的Web应用服务器上.
完整代码,包括jar包,下载即可运行!有什么不妥的,欢迎大家评论批评!
使用CXF结合Spring开发WebServices示例工程,包括服务端与客户端的详细代码。
支持 Web Services 标准:CXF 支持多种 Web Services 标准,包含 SOAP、Basic Profile、WS-Addressing、WS-Policy、WS-ReliableMessaging 和 WS-Security。Frontends:CXF 支持多种“Frontend”编程模型,CXF 实现了...
我的blog有很详细的说明, 我的blog有很详细的说明, 我的blog有很详细的说明, 我的blog有很详细的说明,