跟随《web services 教程》的章节,本来该研究JAX-RPC了,也基本看懂了JAX-RPC的代码,可还是在想要动手实验的时候碰壁了:我下载的WSDP2.0和教程的内容不配套,如果直接把提供的war文件塞Tomcat里部署报错,而手工编还缺少了一些工具。我也懒得再去找了,主要是看到了IBM上一篇比较JAX-RPC和JAX-WS的文章,还是换手JAX-WS吧,而且我下的jwstutorial2.0正好有JAX-WS的入门教程。
初次看JAX-WS的代码有种似曾相识的感觉,一想原来和之前看过的CXF(隐约感觉是基于JAX-WS或是有某种联系的)和JUnit4的代码类似,都是基于annotations的。开发
JAX-WS的流程和RPC的差不多:
1、编写服务的执行类代码
2、编译执行类的代码
3、使用wsgen工具生成部署服务所必须的artifacts
4、把所有相关文件打包成一个war文件
5、部署这个war文件。类文件tie(用来和客户端通信)会由Application Server在部署服务时自动生成
6、编写客户端代码
7、使用wsimport生成并编译stub文件
8、编译客户端代码
9、运行客户端
我没有先急着研究代码,而是决定先用example提供的代码部署一下试试。果然问题暴露了:使用ant编译时报错了!
执行ant:
D:\jwstutorial20\examples\jaxws\helloservice>asant build
Buildfile: build.xml
javaee-home-test:
init:
prepare:
[echo] Creating the required directories....
compile-service:
[echo] Compiling the server-side source code....
[javac] Compiling 1 source file to D:\jwstutorial20\examples\jaxws\helloservice\build
BUILD FAILED
D:\jwstutorial20\examples\jaxws\common\targets.xml:99: You are running on JDK6 w
hich comes with JAX-WS 2.0 API, but this tool requires JAX-WS 2.1 API. Use the e
ndorsed standards override mechanism (http://java.sun.com/javase/6/docs/technote
s/guides/standards/), or set xendorsed="true" on <wsgen>.
Total time: 3 seconds
郁闷怎末1.6的JDK竟然没包括2.1的JAX-WS,于是只能根据提示,找到common文件夹(jaxws文件夹里的)里的targets.xml文件,在里面的<wsgen>元素里加入属性:xendorsed="true"。再ant,终于sucessful了。将ant create-war生成的war文件部署到jee5的服务器里,正常!由于没有编译客户端,就直接用服务器调试服务,返回值正常!
P.S.:其实我最初尝试的是提示的第一个方案:用新的jar包替代jdk里的旧版本。可是Google上找了半天,各大英文的java社区都逛了,也没找到个真正能解决问题的方案。各大社区的基本思路是,在jre的lib文件夹下新建一个endorsed文件夹,把JAX-WS2.1的lib里的新版jar包放进去(我怕麻烦,都塞进去了也没用)即可。
P.S.2:后来上网查了资料发现JDK6的update4以后的版本都包含JAX-WS2.1了,可为什么我使用:wsgen -version查询到的版本还是2.0的呢?折腾了大白天才发现:没更新环境变量!重新指向以后发现果然已经是2.1版的了。可这时候使用:asant build还是提示版本为2.0,不知为什么了~但直接用wsgen -d build -s build -classpath helloservice.endpoint.Hello却是成功的,之后的asant create-war也可以成功。
P.S.3:找到为什么asant指认的版本有误了,因为它的属性文件是关联到JEE的SDK的,而JEE的SDK在安装时已经固定指向了旧版的JDK,所以改了环境变量asant出来的版本还是旧的。可改了SDK的指向后,更麻烦的问题冒出来了,asant本来能成功的命令都出错了:
执行asant build:
Buildfile: build.xml
BUILD FAILED
F:\jwstutorial20\examples\jaxws\simpleclient\build.xml:5: The following error oc
curred while executing this line:
F:\jwstutorial20\examples\jaxws\common\targets.xml:26: taskdef A class needed by
class com.sun.tools.ws.ant.WsImport cannot be found: org/apache/tools/ant/Dynam
icConfigurator
Total time: 1 second
P.S.4:找到了最终的解决办法!重新把JAVA_HOME指向我的jdk6U3,修改我的P.S.1里提到的endorsed文件夹,里面只能塞两个包:jaxb-api.jar和jaxws-api.jar。一切正常了,真爽!于是想起最近经常看到的一句话:
web 服务的原理不难, 难就难在这个配置上了。
分享到:
相关推荐
基于jax-ws 实现的web service client和server端的demo程序。 注:如果使用的是 myeclipse 时 server 部署到tomcat 启动的时候会报错 解决办法:找到myeclipse安装目录下的 plugins 目录里 查找 webservices-rt.jar,...
JAX-WS自学笔记 本人自学JAX-WS笔记和简单例子,文档标题结构如下: JAX-WS使用教程 1、JAX-WS概述 2、创建Web Service 2.1 从java开始 2.1.1 运行wsgen 2.1.2 生成的WSDL和XSD 2.1.3 目录结构 2.2 从WSDL...
亲测可用,Jax-ws所需要的JAR包,拷贝到tomcat安装路径的lib里,实现了webservice发布到tomcat,赞!
MyEclipse8_0中使用 JAX-WS 部署 WebService 实例 - 外衣 - 博客频道 - CSDN_NET.mht
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...
The Java API for XML Web Services (JAX-WS) is a Java programming language API for creating web services, particularly SOAP services. JAX-WS is one of the Java XML programming APIs. It's a part of the ...
webService部署tomcat需要的jax-ws 的完整jar包
JAX-WS方式开发和部署webservice应用,JAX-WS方式开发和部署webservice应用,JAX-WS方式开发和部署webservice应用,JAX-WS方式开发和部署webservice应用,JAX-WS方式开发和部署webservice应用
JAX-WS2.0 API
Jax-WS的简单实例 Jax-WS的简单实例
javax.xml.ws.Service 报错需要的包,亲测可以用,直接下载在ide里buildpath一下就可以,四个jar包 ,整合了其他的jar所以配置简单
jax-ws webservice完整demo,包含所有jax-ws 2.2jar包。
如果基于一个JAX-WS进行WebService开发,有很多教程,但是具体怎么更自动地生成一些文件,实现客户端与服务端的交互,都讲得不大清楚,为了让大家更方便地部署,我将服务端、客户端文件的生成与部署全过程以及测试...
使用JAX-WS(JWS)发布WebService 使用myeclipse开发java的webservice的两种方式 方式一: (此方式只能作为调试,有以下bug:jdk1.6u17?以下编译器不支持以Endpoint.publish方式发布document方式的soap,必须在...
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...
rar中包含整个项目的源码和数据库生成脚本,采用jax-ws发布Web Service服务,支持java客户端和.Net客户端调用,数据库采用oracle10g,里面有创建数据库脚本文件createTable_Oracle10g.sql,由于Hibernate映射表中会...
NULL 博文链接:https://iamliming.iteye.com/blog/1399257