1.创建Webservice服务类HelloService,代码如下:
package com.cugxw.ws;
import javax.jws.WebMethod;
import javax.jws.WebService;
/* 使用@WebService注解标明该类作为WebService类,不能是final,static */
@WebService
public class Hello {
/* 对外开发的方法,不能是final,static */
@WebMethod
public String sayHello(String name) {
System.out.println("Hello " + name);
return "Hello " + name;
}
}
2.创建Endpoint,发布WebService
执行以下代码即可:
Hello hello = new Hello();
/* 注意: 端口号不能被其他已经启动的程序占用 */
Endpoint.publish("http://localhost:8086/hello",hello);
但是一般情况下,我们会将WebService服务集成到web服务器下,所以一般会在web服务器启动时发布WebService服务,以Tomcat为例,想在tomcat启动时候发布WebService
只需要想办法让它启动时执行上面的代码即可,由此我们想到可以使用HttpServlet做load-on-startup配置。
步骤如下:
(1)建立一个servlet类,只覆盖init方法。
package com.cugxw.start;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.xml.ws.Endpoint;
import com.cugxw.ws.Hello;
@SuppressWarnings("serial")
public class StartupWebService extends HttpServlet {
@Override
public void init() throws ServletException {
// create and publish an endpoint
Hello hello = new Hello();
Endpoint.publish("http://localhost:8086/hello", hello);
System.out.println("Web service startup...");
}
}
(2)配置web.xml,只需增加以下代码:
<servlet>
<servlet-name>startupWebService</servlet-name>
<servlet-class>com.cugxw.start.StartupWebService</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
3.启动tomcat,在浏览器中测试url: http://localhost:8086/hello?wsdl。
4.生成client端WebService支持代码,有两种方式:
(1)启动控制台,执行JVM命令: wsimport -p com.cugxw.ref -keep http://localhost:8086/hello?wsdl
参数
-p: 指定生成java文件,class文件的目录
-keep: 表示保留java文件,否则删除所有生成的java文件
本例中生成的java文件和class文件在控制台所在目录下的com/cugxw/ws里面,我们可以直接将java文件copy到client端代码中区引用,也可以在此时候jar命令打包class文件,
在client端工程的classpath中引入使用,本例直接将java代码copy到client工程里面,保留包结构com.cugxw.ws,文件列表如下:
Hello.java
HelloService.java
ObjectFactory.java
package-info.java
SayHello.java
SayHelloResponse.java
(2)使用ant脚本生成,但是要增加一个ant命令,那就是wsimport,需要依赖的jar包可从http://www.jarfinder.com下载,ant脚本如下:
<project name="WsClient" default="run" basedir=".">
<!-- 定义ant任务所有引用变量 -->
<property name="build.wsdl.uri" value="http://localhost:8086/hello?wsdl" description="WebService的WSDL" />
<property name="build.lib.dir" value="C:/Xw bin/lib" description="引用的jar目录" />
<property name="build.src.dir" value="${basedir}" description="生成源代码的目录" />
<property name="build.bin.dir" value="../lib" description="打包生成jar文件的目录" />
<property name="build.jar.file" value="WsHello.jar" description="打包后的jar文件名称" />
<!-- 将wsimport命令加入ant所引用的所有jar包(来自本地目录),可从http://www.jarfinder.com下载 -->
<taskdef name="wsimport" classname="com.sun.tools.ws.ant.WsImport2">
<classpath>
<filelist>
<file name="${build.lib.dir}/ws/jaxws-tools-2.1.4.jar" />
<file name="${build.lib.dir}/ws/jaxws-api-2.1.jar" />
<file name="${build.lib.dir}/ws/jaxws-rt-2.1.4.jar" />
<file name="${build.lib.dir}/ws/jaxb-xjc-2.1.7.jar" />
<file name="${build.lib.dir}/ws/jaxb-impl-2.1.7.jar" />
<file name="${build.lib.dir}/ws/streambuffer-0.8.jar" />
<file name="${build.lib.dir}/ws/stax-ex-1.2.jar" />
</filelist>
</classpath>
</taskdef>
<!-- 所有ant任务 -->
<target name="run" depends="clean" />
<!-- 删除生成的class文件 -->
<target name="clean" depends="jar">
<delete>
<fileset dir="${build.src.dir}" defaultexcludes="true">
<include name="**/*.class"/>
</fileset>
</delete>
</target>
<!-- 打包 -->
<target name="jar" depends="wsimport">
<mkdir dir="${build.bin.dir}"/>
<jar jarfile="${build.bin.dir}${file.separator}${build.jar.file}" defaultexcludes="true">
<fileset dir="${build.src.dir}" defaultexcludes="true">
<include name="**/*.class"/>
</fileset>
</jar>
</target>
<!-- 根据wsdl生成client端辅助类class文件 -->
<target name="wsimport">
<wsimport
destdir="${build.src.dir}"
debug="true"
wsdl="${build.wsdl.uri}"/>
</target>
</project>
5.引用步骤4中生成的jar或者直接使用生成的java代码,编写client端程序调用WebService。
package com.cugxw.client;
import javax.xml.ws.WebServiceRef;
import com.cugxw.ws.Hello;
import com.cugxw.ws.HelloService;
public class HelloClient {
/* 注入WebService支持类的对象,指定WSDL */
@WebServiceRef(wsdlLocation="http://localhost:8086/hello?wsdl")
static HelloService service;
public static void main(String[] args) {
HelloService service = new HelloService();
Hello helloProxy = service.getHelloPort();
String hello = helloProxy.sayHello("Brooke");
System.out.println(hello);
}
}
执行,查看client端输出结果: Hello Brooke
查看server端输入结果: Hello Brooke
分享到:
相关推荐
2. **JAX-WS**(Java API for XML Web Services)是Java平台上的SOAP(Simple Object Access Protocol)Web服务标准,主要用于创建面向服务的架构(SOA)。JAX-WS提供了处理XML消息、WSDL(Web服务描述语言)和UDDI...
在Java应用服务器,如Tomcat中使用JAX-WS时,通常需要一些特定的JAR文件来支持其功能。这些JAR文件包含了JAX-WS的运行时库和相关的服务实现。描述中提到的"Jax-ws所需要的JAR包"很可能包括了以下几个关键组件: 1. ...
JAX-WS(Java API for XML Web Services)是Java平台标准版(Java SE)和企业版(Java EE)的一部分,它为创建、部署和消费基于SOAP(Simple Object Access Protocol)的Web服务提供了全面的支持。JAX-WS允许开发者...
在WebLogic服务器上部署JAX-WS服务时,可能会遇到一些配置问题。JAX-WS(Java API for XML Web Services)是Java平台上的一个标准,用于创建和部署Web服务。WebLogic作为一款强大的Java EE应用服务器,支持JAX-WS...
JAX-WS为JAVA6开发者提供了一种简单、标准的方法来开发和使用Web服务。通过定义服务接口,实现服务逻辑,发布服务,以及生成和使用客户端代理,开发者可以轻松地集成不同系统,实现跨平台的交互。了解和熟练掌握JAX-...
在IT行业中,Web服务是一种广泛使用的通信协议,它允许不同应用程序之间进行数据交换。JAX-WS(Java API for XML Web Services)是Java平台上的一个标准,用于创建和消费Web服务。本篇将深入讲解如何基于JAX-WS开发...
5. **数据绑定:**JAX-WS使用JAXB(Java Architecture for XML Binding)进行数据绑定,将XML数据自动转换为Java对象和反之亦然。这使得处理XML消息变得更简单,减少了手动解析XML的必要。 6. **异常处理:**JAX-WS...
基于jax-ws 实现的web service client和server端的demo程序。 注:如果使用的是 myeclipse 时 server 部署到tomcat 启动的时候会报错 解决办法:找到myeclipse安装目录下的 plugins 目录里 查找 webservices-rt.jar,...
JAX-WS是基于SOAP(Simple Object Access Protocol)和WSDL(Web Services Description Language)的,旨在简化Web服务的开发和消费。通过提供强大的类型安全模型和与Java SE及Java EE平台的紧密集成,JAX-WS使得...
开发者可以使用诸如Apache CXF、Metro等开源框架来支持JAX-WS的开发,这些框架提供了更多的功能,如WS-Security、WS-Policy等扩展,同时简化了开发过程。 8. **示例** 在提供的链接...
标题中的“一个包含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开发者能够更...
它涵盖了从基本的SOAP(Simple Object Access Protocol)通信到更复杂的XML数据绑定和WS-Security安全配置等各种功能。 JAX-WS是Java平台上的一个标准API,用于构建和部署面向服务架构(SOA)中的Web服务。它简化了...
- 在JAX-WS中,开发者可以使用注解(如`@WebService`、`@SOAPBinding`、`@WebMethod`等)来标记服务接口和方法,这些注解提供了元数据,帮助生成WSDL和客户端代码。 5. **协议和绑定**: - JAX-WS支持多种传输...
JAX-WS通过使用WSDL(Web服务描述语言)来定义服务接口,使得服务提供者和服务消费者之间的交互更加清晰和标准化。 ### 2. JAX-WS的工作原理 JAX-WS的核心组件包括: - **SOAP消息模型**:JAX-WS基于SOAP 1.1或...
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平台标准版(Java SE)和企业版(Java EE)的一部分,用于构建基于SOAP(Simple Object Access Protocol)的Web服务和客户端。这个压缩包可能包含了JAX-WS实现的核心库和其他相关组件。 **描述中的文件...
JAX-WS RI(Reference Implementation)是这个规范的官方参考实现,它提供了开发、测试和运行基于SOAP(Simple Object Access Protocol)的Web服务所需的所有组件。在本案例中,"Jax-ws RI.zip"是一个包含这些组件的...
Java 基于第三方插件实现WebService实在麻烦,尤其是要添加几十M的Jar包...还好,自从JDK 1.6开始,Java自身已经支持WebSeervice的开发即JAX-WS,附件是一个简单的示例,供入门参考。注意,JDK环境要求1.6及以上版本。
通过定义服务接口,实现服务逻辑,以及使用`Endpoint.publish()`发布服务,我们可以轻松地创建一个基于JAX-WS的Web服务。同时,利用`wsimport`工具生成客户端代码,可以方便地进行服务调用。在"jax-ws-server"和"jax...