跟随《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-rs jax-ws所需包,亲测可用"表明这个压缩包包含了用于开发Java RESTful Web服务(JAX-RS)和Java SOAP Web服务(JAX-WS)所需的库文件。这些库是Java应用程序进行Web服务交互的核心组件,确保了对HTTP协议...
JAX-WS允许开发者将服务接口直接映射到SOAP消息,提供了强类型化的客户端调用API。 在Java应用服务器,如Tomcat中使用JAX-WS时,通常需要一些特定的JAR文件来支持其功能。这些JAR文件包含了JAX-WS的运行时库和相关...
在WebLogic服务器上部署JAX-WS服务时,可能会遇到一些配置问题。JAX-WS(Java API for XML Web Services)是Java平台上的一个标准,用于创建和部署Web服务。WebLogic作为一款强大的Java EE应用服务器,支持JAX-WS...
**正文** JAX-WS(Java API for XML Web Services)是Java平台上的一个标准,用于构建和部署Web服务。...在实际开发中,开发者通常会将这些库加入到项目的类路径中,以确保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. **服务端...
6. **异常处理:**JAX-WS支持将Java异常转换为SOAP故障,反之亦然,这样客户端和服务器之间可以交换错误信息。 7. **MTOM(Message Transmission Optimization Mechanism)和XOP(XML-binary Optimized Packaging)...
使用JAX-WS,可以通过简单的注解在Java类上声明服务端点接口,并将其部署到支持JAX-WS的服务器上,如Tomcat或JBoss。服务可以使用HTTP、HTTPS等传输协议,并且可以与JMS、JCA等其他Java技术集成。 4. **SOAP消息...
基于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-WS API** Java API for XML Web Services (JAX-WS) 是Java平台上的一个标准接口,用于创建和消费Web服务。它是Sun Microsystems在2004年推出的一个重要框架,旨在简化Web服务的开发,使得Java开发者能够更...
JAX-WS允许开发者将Java方法直接映射到SOAP操作,极大地简化了Web服务的开发。 2. **JAX-WS的核心组件** - **SEI(Service Endpoint Interface)**:这是服务端接口,定义了服务的公共API,包含了Web服务的方法。 ...
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开发一个WebService实例。 首先,让我们了解JAX-WS的基本概念。JAX-WS提供了一种简单的方式来创建SOAP(Simple Object Access Protocol)Web服务,它集成了Java SE和Java EE平台,使得...
本篇文章将深入探讨JAX-WS规范的核心概念、工作原理以及实际应用。 ### 1. JAX-WS概述 JAX-WS是Sun Microsystems在J2EE 5.0中引入的,目的是简化Web服务的开发过程,取代了之前的JAX-RPC(Java API for XML-based ...
【标题】"metro-jax-ws-jaxws221x.zip" 提供的是一个关于JAX-WS(Java API for XML Web Services)的开发示例,其中包含了JAX-WS 2.2.1版本的相关组件和库文件。这个压缩包是针对Java开发者设计的,用于帮助他们理解...
**标题:“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 ...
在这个场景中,我们将深入探讨如何使用JDK 1.6及以上版本内置的JAX-WS来发布Web服务。 一、JAX-WS基础 1. **定义服务接口**:在JAX-WS中,我们首先定义一个Java接口,该接口声明了Web服务提供的操作。这些接口方法...