- 浏览: 5028870 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (2844)
- java (1094)
- hadoop (37)
- jvm (39)
- hbase (11)
- sql (25)
- 异常 (83)
- div css (6)
- 数据库 (95)
- 有趣的code (15)
- struts2 (6)
- spring (124)
- js (44)
- 算法 (65)
- linux (36)
- hibernate (7)
- 中间件 (78)
- 设计模式 (2)
- 架构 (275)
- 操作系统 (91)
- maven (35)
- tapestry (1)
- mybatis (9)
- MQ (101)
- zookeeper (18)
- 搜索引擎,爬虫 (208)
- 分布式计算 (45)
- c# (7)
- 抓包 (28)
- 开源框架 (45)
- 虚拟化 (12)
- mongodb (15)
- 计算机网络 (2)
- 缓存 (97)
- memcached (6)
- 分布式存储 (13)
- scala (5)
- 分词器 (24)
- spark (104)
- 工具 (23)
- netty (5)
- Mahout (6)
- neo4j (6)
- dubbo (36)
- canal (3)
- Hive (10)
- Vert.x (3)
- docker (115)
- 分布式追踪 (2)
- spring boot (5)
- 微服务 (56)
- 淘客 (5)
- mesos (67)
- php (3)
- etcd (2)
- jenkins (4)
- nginx (7)
- 区块链 (1)
- Kubernetes (92)
- 驾照 (1)
- 深度学习 (15)
- JGroups (1)
- 安全 (5)
- 测试 (16)
- 股票 (1)
- Android (2)
- 房产 (1)
- 运维 (6)
- 网关 (3)
最新评论
-
明兜3号:
部署落地+业务迁移 玩转k8s进阶与企业级实践技能(又名:Ku ...
Kubernetes系统常见运维技巧 -
q328965539:
牛掰啊 资料收集的很全面
HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS) -
guichou:
fluent挂载了/var/lib/kubelet/pods目 ...
kubernetes上部署Fluentd+Elasticsearch+kibana日志收集系统 -
xu982604405:
System.setProperty("java.r ...
jmx rmi 穿越防火墙问题及jmxmp的替代方案 -
大漠小帆:
麻烦问下,“获取每个Item相似性最高的前N个Item”,这个 ...
协同过滤推荐算法在MapReduce与Spark上实现对比
1.package com.birds.ws;
2.
3.import javax.jws.WebMethod;
4.import javax.jws.WebService;
5.
6./**
7. * @author birds
8. * @since Nov 27, 2008 9:20:16 PM
9. */
10.@WebService
11.public class HelloQuick {
12. public HelloQuick() {
13. }
14. @WebMethod
15. public String show() {
16. return "SHOW YOU!";
17. }
18.
19.}
20.// 上面的代码,足够简单, 在HelloQuick类上面 ,有一个 Annotation修饰 @WebService
21.这个修饰必须是 javax.jws.WebService , javax.jws.WebServiceProvider 其中一个,
22.默认构造函数必须有一个。
23.业务方法 show() 函数上面有一个 @WebMethod修饰,,如果这个函数有参数,就需要增加参数的修饰
24.比方说: show(@WebParam(name = "msg") String msg){} 多了一个参数
25.知道更多的细节,参考 jax-ws的文档,
建立环境 : 这里使用 Tomcat 6.0
需要编写 配置 webapps/jaxws2/WEB-INF/Web.xml
27.<?xml version="1.0" encoding="UTF-8"?>
28.<web-app version="2.5"
29. xmlns="http://java.sun.com/xml/ns/javaee"
30. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
31. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
32. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
33.
34. <listener>
35. <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
36. </listener>
37.
38. <servlet>
39. <servlet-name>fish</servlet-name>
40. <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
41. </servlet>
42.
43. <servlet-mapping>
44. <servlet-name>fish</servlet-name>
45. <url-pattern>/quick</url-pattern>
46. </servlet-mapping>
47.
48. <welcome-file-list>
49. <welcome-file>index.jsp</welcome-file>
50. </welcome-file-list>
51.</web-app>
WSServletContextListener ,和 WSServlet 都是 系统运行需要的配置,
还需要建立一个 sun-jaxws.xml
54.<?xml version="1.0" encoding="UTF-8"?>
55.<endpoints xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime'
56. version='2.0'>
57. <endpoint name='fish' implementation='com.birds.ws.HelloQuick'
58. url-pattern='/quick' />
59.</endpoints>
60.
61.<!--
62. endpoint 一个端点,代表了一个服务,
63. name = fish
64. url-pattern="/quick"
65.
66. -->
下面是 com.sun.xml.ws.transport.http.servlet.WSServletContextListener 加载/WEB-INF/sun-jaxws.xml
是 jax-ws 的源代码。
70. try {
71. // Parse the descriptor file and build endpoint infos
72. DeploymentDescriptorParser<ServletAdapter> parser = new DeploymentDescriptorParser<ServletAdapter>(
73. classLoader,new ServletResourceLoader(context), createContainer(context), new ServletAdapterList());
74. URL sunJaxWsXml = context.getResource(JAXWS_RI_RUNTIME);
75. if(sunJaxWsXml==null)
76. throw new WebServiceException(WsservletMessages.NO_SUNJAXWS_XML(JAXWS_RI_RUNTIME));
77. List<ServletAdapter> adapters = parser.parse(sunJaxWsXml.toExternalForm(), sunJaxWsXml.openStream());
78.
79. delegate = createDelegate(adapters, context);
80.
81. context.setAttribute(WSServlet.JAXWS_RI_RUNTIME_INFO,delegate);
82.
83. } catch (Throwable e) {
84. logger.log(Level.SEVERE,
85. WsservletMessages.LISTENER_PARSING_FAILED(e),e);
86. context.removeAttribute(WSServlet.JAXWS_RI_RUNTIME_INFO);
87. throw new WSServletException("listener.parsingFailed", e);
88. }
89. // JAXWS_RI_RUNTIME 为 /WEB-INF/sun-jaxws.xml
90.这个监听器 主要是 解析 endpoints ,
91. delegate = createDelegate(adapters, context);
92. context.setAttribute(WSServlet.JAXWS_RI_RUNTIME_INFO,delegate);
93. 这两行代码 把解析的 endpoint 结果 放入 session中 ,给后面的 WSServlet使用,
94. 下面是
95.com.sun.xml.ws.transport.http.servlet.WSServlet 部分源代码.
96.
97.public void init(ServletConfig servletConfig) throws ServletException {
super.init(servletConfig);
delegate = getDelegate(servletConfig);
}
98.// 这个地方就是取出 上面监听器 解析sun-jaxws.xml 结果,
99.delegate 这个是 主要处理大部分逻辑的代码 ,是 WSServletDelegate类
100.看 WSServelt 的doPost方法,将会调用
101.protected void doPost( HttpServletRequest request, HttpServletResponse response) throws ServletException {
if (delegate != null) {
delegate.doPost(request,response,getServletContext());
}
}
102.这里便会访问到 WSServletDelegate 的doPost方法
103. ServletAdapter target = getTarget(request);
if (target != null) {
if (logger.isLoggable(Level.FINEST)) {
logger.finest(
WsservletMessages.SERVLET_TRACE_GOT_REQUEST_FOR_ENDPOINT(target.name));
}
target.handle(context, request, response);
} else {
Localizer localizer = getLocalizerFor(request);
writeNotFoundErrorPage(localizer, response, "Invalid Request");
}
104.这部分代码 开始处理请求 并且生成WSDL服务
105.当tomcat启动成功后 在浏览器中输入
106.http://localhost:8080/jaxws2/quick?wsdl
107.将会显示 WSDL xml服务结果.
108.
109.
109.<definitions targetNamespace="http://ws.birds.com/" name="HelloQuickService">
110.−
111. <types>
112.−
113. <xsd:schema>
114.<xsd:import namespace="http://ws.birds.com/" schemaLocation="http://localhost:8080/jaxws2/quick?xsd=1"/>
115.</xsd:schema>
116.</types>
117.−
118. <message name="show">
119.<part name="parameters" element="tns:show"/>
120.</message>
121.−
122. <message name="showResponse">
123.<part name="parameters" element="tns:showResponse"/>
124.</message>
125.−
126. <portType name="HelloQuick">
127.−
128. <operation name="show">
129.<input message="tns:show"/>
130.<output message="tns:showResponse"/>
131.</operation>
132.</portType>
133.−
134. <binding name="HelloQuickPortBinding" type="tns:HelloQuick">
135.<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
136.−
137. <operation name="show">
138.<soap:operation soapAction=""/>
139.−
140. <input>
141.<soap:body use="literal"/>
142.</input>
143.−
144. <output>
145.<soap:body use="literal"/>
146.</output>
147.</operation>
148.</binding>
149.
150. <service name="HelloQuickService">
151.
152. <port name="HelloQuickPort" binding="tns:HelloQuickPortBinding">
153.<soap:address location="http://localhost:8080/jaxws2/quick"/>
154.</port>
155.</service>
156.</definitions>
上面的tomcat 6.0可能启动有错误 ,,这个需要把jax-ws 需要的几个包复制到 tomcat6.0/endorsed 目录下,这个目录原本没有,需要自己创建,主要是覆盖java虚拟机默认的 加载jaxb-api.jar ,
可以看看 http://java.sun.com/j2se/1.5.0/docs/guide/standards/index.html ,
如果不是用tomcat做服务发布的话, 用普通的java命令的话 需要在java安装目录下 建立 这个endorsed目录,把jar包放到下面,
jdk1.5 把叫做 " Endorsed Standards Override Mechanism ".
// 下面是 客户端代码 ,用来调用创建好的服务
// 用 jdk提供的 wsimport 的命令 来生成 对应的客户端服务代码,,也可以自己编写,如果你很清楚 jax-ws的机制。
wsimport -p com.birds.ws.myclient.HelloServices http://localhost:8080/jaxws2/quick?wsdl-p 选项是 可以帮你生成包名. 生成了六个文件HelloQuick.class, HelloQuickService.class,ObjectFactory.class,package-info.classShow.class, ShowResponse.class如果想看到源代码 可以加上 -keep 选项,以上就可以方面的创建 客户端服务代码,不用自己手工编写 下面就很容易的调用。public static void main(String[] args) { HelloQuickService HelloQuickService = new HelloQuickService(); HelloQuick quick = HelloQuickService.getHelloQuickPort(); System.out.println(quick.show()); }这样就是一个简单的jax-ws 应用。
发表评论
-
Kryo 使用指南
2017-12-05 20:14 20071、Kryo 的简介 Kryo 是一个快速序列化/ ... -
spring session序列化问题排查
2017-12-01 19:07 6264严重: Servlet.service() for ser ... -
利用junit对springMVC的Controller进行测试
2017-11-30 16:26 1441平时对junit测试service/D ... -
Java内存模型之重排序
2017-11-29 09:44 858在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重 ... -
pmd spotbugs 文档
2017-11-28 10:02 0https://pmd.github.io/pmd/pmd ... -
PMD、FindBug、checkstyle、sonar这些代码检查工具的区别?各自的侧重点是什么?
2017-11-28 10:01 2142可以说都是代码静态分析工具,但侧重点不同。pmd:基于源代码 ... -
阿里巴巴Java代码规约插件p3c-pmd使用指南与实现解析
2017-11-23 17:09 1602阿里巴巴Java代码规约插件安装 阿里Java代码规 ... -
静态分析工具PMD使用说明 (文章来源: Java Eye)
2017-11-23 17:07 1140质量是衡量一个软件是否成功的关键要素。而对于商业软件系统,尤 ... -
MyBatis 使用 MyCat 实现多租户的一种简单思路
2017-11-20 18:27 2836本文的多租户是基于多数据库进行实现的,数据是通过不同数据库进 ... -
Spring+MyBatis实现数据库读写分离方案
2017-11-20 17:15 1075百度关键词:spring mybatis 多数据源 读写分离 ... -
数据库连接池druid wallfilter配置
2017-11-20 11:38 1335使用缺省配置的WallFilter <be ... -
java restful 实体封装
2017-11-16 09:47 1588package com.mogoroom.bs.commo ... -
dak
2017-11-15 11:21 0package zzm; import jodd.ht ... -
Java内存模型之从JMM角度分析DCL
2017-11-15 09:35 635DCL,即Double Check Lock,中卫双重检查锁 ... -
Java 打印堆栈的几种方法
2017-11-14 09:36 4741java 中可以通过 eclipse 等工具直接打印堆栈, ... -
Servlet Session学习
2017-11-10 09:25 548HTTP 是一种"无状 ... -
浅析Cookie中的Path与domain
2017-11-10 09:26 1057Path – 路径。指定与co ... -
入分析volatile的实现原理
2017-11-08 09:47 683通过前面一章我们了解了synchronized是一个重量级的 ... -
Spring MVC-ContextLoaderListener和DispatcherServlet
2017-11-15 09:35 681Tomcat或Jetty作为Servlet ... -
搭建spring框架的时候,web.xml中的spring相关配置,可以不用配置ContextLoaderListener(即只配DispatcherServl
2017-11-07 18:27 1432搭建spring框架的时候,web.xml中的sprin ...
相关推荐
标题"jax-rs jax-ws所需包,亲测可用"表明这个压缩包包含了用于开发Java RESTful Web服务(JAX-RS)和Java SOAP Web服务(JAX-WS)所需的库文件。这些库是Java应用程序进行Web服务交互的核心组件,确保了对HTTP协议...
Java API for XML Web Services(JAX-WS)是Java平台上用于构建和消费Web服务的标准API。它简化了创建和使用Web服务的过程,使得开发者能够通过SOAP消息与远程服务进行交互。JAX-WS允许开发者将服务接口直接映射到...
在给定的压缩包文件"jax-ws api jar包"中,包含的是JAX-WS 2.2.1版本的API库,即`jaxws-api-2.2.1.jar`。这个jar文件是开发基于JAX-WS的Web服务所必需的依赖之一。以下是关于JAX-WS的一些核心知识点: 1. **服务端...
在WebLogic服务器上部署JAX-WS服务时,可能会遇到一些配置问题。JAX-WS(Java API for XML Web Services)是Java平台上的一个标准,用于创建和部署Web服务。WebLogic作为一款强大的Java EE应用服务器,支持JAX-WS...
JAX-WS 2.0是JAX-WS的第二个主要版本,它在JAX-RPC(Java API for XML-based RPC)的基础上进行了改进,引入了许多新特性以提升开发者的体验和效率。 **JAX-WS 2.0 的核心概念:** 1. **服务端点接口(SEI, ...
基于jax-ws 实现的web service client和server端的demo程序。 注:如果使用的是 myeclipse 时 server 部署到tomcat 启动的时候会报错 解决办法:找到myeclipse安装目录下的 plugins 目录里 查找 webservices-rt.jar,...
标题中的“一个包含jax-ws和jax-rs的例子(含服务端和客户端)”是指这是一个示例项目,它演示了如何使用Java API for XML Web Services (JAX-WS)和Java API for RESTful Web Services (JAX-RS)来创建和消费Web服务。...
**JAX-WS2.1用户指南** JAX-WS(Java API for XML Web Services)是Java平台上用于创建Web服务的标准API,版本2.1是其一个重要里程碑。本指南将深入探讨JAX-WS 2.1的核心概念、功能以及如何在实际开发中应用它。...
【标题】:Web服务之Java API for XML Web Services (JAX-WS) 【内容详解】 JAX-WS,全称为Java API for XML Web Services,是Java平台上的一个标准,用于构建和部署基于SOAP(Simple Object Access Protocol)的...
**JAX-WS API** Java API for XML Web Services (JAX-WS) 是Java平台上的一个标准接口,用于创建和消费Web服务。它是Sun Microsystems在2004年推出的一个重要框架,旨在简化Web服务的开发,使得Java开发者能够更...
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 API for XML Web Services)是Java平台上的一个标准,用于创建和消费Web服务。本篇将深入讲解如何基于JAX-WS开发一个WebService实例。 首先,让我们了解JAX-WS的基本概念。JAX-WS提供了一种简单的方式...
【标题】"metro-jax-ws-jaxws221x.zip" 提供的是一个关于JAX-WS(Java API for XML Web Services)的开发示例,其中包含了JAX-WS 2.2.1版本的相关组件和库文件。这个压缩包是针对Java开发者设计的,用于帮助他们理解...
**JAX-WS规范详解** Java API for XML Web Services(JAX-WS)是Java平台上的一个标准,用于创建Web服务和客户端。它提供了一种简单、类型安全的方式来构建和消费基于SOAP的消息传递应用程序,是Java世界中实现Web...
**标题:“jax-ws2.1.zip”**指的是一个包含Java API for XML Web Services(JAX-WS)2.1版本的压缩包。JAX-WS是Java平台标准版(Java SE)和企业版(Java EE)的一部分,用于构建基于SOAP(Simple Object Access ...
通过分析这些代码,可以了解JAX-WS如何将Java类映射到SOAP消息,以及如何通过客户端代理进行调用。同时,源码中可能会展示如何配置和部署Web服务,以及如何生成和使用WSDL文件。 总的来说,JAX-WS 2.0为Java开发者...
标题提到的"JAX-WS所需Jar包"是指为了在Java环境中支持JAX-WS功能,开发者需要的一组核心库。这些库包含了运行和开发JAX-WS Web服务所必需的组件。下面将逐一解释这些库的作用: 1. **jaxb-xjc.jar**: 这是Java ...
Java API for XML Web Services(JAX-WS)是Java平台上的一个标准,用于构建和部署Web服务。它简化了Web服务的开发,使得Java开发者能够更方便地创建、调用和部署SOAP(Simple Object Access Protocol)服务。在这个...
Java API for XML Web Services (JAX-WS) 是Java平台上的一个标准,用于构建和部署Web服务。JAX-WS RI(Reference Implementation)是这个规范的官方参考实现,它提供了开发、测试和运行基于SOAP(Simple Object ...
在"jax-ws webservice完整demo"中,你可以通过查看源码了解每个组件的具体实现,并学习如何将它们组合在一起,形成一个完整的Web服务。此外,通过运行提供的测试代码,你可以验证Web服务是否正常工作。这个例子是一...