`

基于SOA的同步通信——JAX-WS的基本用法

阅读更多

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

分享到:
评论

相关推荐

    jax-rs jax-ws所需包,亲测可用

    2. **JAX-WS**(Java API for XML Web Services)是Java平台上的SOAP(Simple Object Access Protocol)Web服务标准,主要用于创建面向服务的架构(SOA)。JAX-WS提供了处理XML消息、WSDL(Web服务描述语言)和UDDI...

    Jax-ws所需要的JAR包

    在Java应用服务器,如Tomcat中使用JAX-WS时,通常需要一些特定的JAR文件来支持其功能。这些JAR文件包含了JAX-WS的运行时库和相关的服务实现。描述中提到的"Jax-ws所需要的JAR包"很可能包括了以下几个关键组件: 1. ...

    jax-ws api jar包

    JAX-WS(Java API for XML Web Services)是Java平台标准版(Java SE)和企业版(Java EE)的一部分,它为创建、部署和消费基于SOAP(Simple Object Access Protocol)的Web服务提供了全面的支持。JAX-WS允许开发者...

    解决weblogic部署JAX-WS需要的配置文件

    在WebLogic服务器上部署JAX-WS服务时,可能会遇到一些配置问题。JAX-WS(Java API for XML Web Services)是Java平台上的一个标准,用于创建和部署Web服务。WebLogic作为一款强大的Java EE应用服务器,支持JAX-WS...

    JAVA6开发WebService (二)——JAX-WS例子

    JAX-WS为JAVA6开发者提供了一种简单、标准的方法来开发和使用Web服务。通过定义服务接口,实现服务逻辑,发布服务,以及生成和使用客户端代理,开发者可以轻松地集成不同系统,实现跨平台的交互。了解和熟练掌握JAX-...

    如何基于JAX-WS开发一个WebService实例

    在IT行业中,Web服务是一种广泛使用的通信协议,它允许不同应用程序之间进行数据交换。JAX-WS(Java API for XML Web Services)是Java平台上的一个标准,用于创建和消费Web服务。本篇将深入讲解如何基于JAX-WS开发...

    JAX-WS2.0 API

    5. **数据绑定:**JAX-WS使用JAXB(Java Architecture for XML Binding)进行数据绑定,将XML数据自动转换为Java对象和反之亦然。这使得处理XML消息变得更简单,减少了手动解析XML的必要。 6. **异常处理:**JAX-WS...

    jax-ws webservice demo

    基于jax-ws 实现的web service client和server端的demo程序。 注:如果使用的是 myeclipse 时 server 部署到tomcat 启动的时候会报错 解决办法:找到myeclipse安装目录下的 plugins 目录里 查找 webservices-rt.jar,...

    JAX-WS2.1用户指南

    JAX-WS是基于SOAP(Simple Object Access Protocol)和WSDL(Web Services Description Language)的,旨在简化Web服务的开发和消费。通过提供强大的类型安全模型和与Java SE及Java EE平台的紧密集成,JAX-WS使得...

    webservice之jax-ws

    开发者可以使用诸如Apache CXF、Metro等开源框架来支持JAX-WS的开发,这些框架提供了更多的功能,如WS-Security、WS-Policy等扩展,同时简化了开发过程。 8. **示例** 在提供的链接...

    一个包含jax-ws和jax-rs的例子(含服务端和客户端)

    标题中的“一个包含jax-ws和jax-rs的例子(含服务端和客户端)”是指这是一个示例项目,它演示了如何使用Java API for XML Web Services (JAX-WS)和Java API for RESTful Web Services (JAX-RS)来创建和消费Web服务。...

    JAX-WS API, JAX-RS API

    **JAX-WS API** Java API for XML Web Services (JAX-WS) 是Java平台上的一个标准接口,用于创建和消费Web服务。它是Sun Microsystems在2004年推出的一个重要框架,旨在简化Web服务的开发,使得Java开发者能够更...

    metro-jax-ws-jaxws221x.zip

    它涵盖了从基本的SOAP(Simple Object Access Protocol)通信到更复杂的XML数据绑定和WS-Security安全配置等各种功能。 JAX-WS是Java平台上的一个标准API,用于构建和部署面向服务架构(SOA)中的Web服务。它简化了...

    Web Service学习小结——基于JDK自带JAX-WS实现的web service

    - 在JAX-WS中,开发者可以使用注解(如`@WebService`、`@SOAPBinding`、`@WebMethod`等)来标记服务接口和方法,这些注解提供了元数据,帮助生成WSDL和客户端代码。 5. **协议和绑定**: - JAX-WS支持多种传输...

    JAX-WS规范

    JAX-WS通过使用WSDL(Web服务描述语言)来定义服务接口,使得服务提供者和服务消费者之间的交互更加清晰和标准化。 ### 2. JAX-WS的工作原理 JAX-WS的核心组件包括: - **SOAP消息模型**:JAX-WS基于SOAP 1.1或...

    JAX-WS 2.2 RI所有相关jar包

    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-ws2.1.zip

    JAX-WS是Java平台标准版(Java SE)和企业版(Java EE)的一部分,用于构建基于SOAP(Simple Object Access Protocol)的Web服务和客户端。这个压缩包可能包含了JAX-WS实现的核心库和其他相关组件。 **描述中的文件...

    Jax-ws RI.zip

    JAX-WS RI(Reference Implementation)是这个规范的官方参考实现,它提供了开发、测试和运行基于SOAP(Simple Object Access Protocol)的Web服务所需的所有组件。在本案例中,"Jax-ws RI.zip"是一个包含这些组件的...

    基于JDK自带的Web服务JAX-WS实现WebService的简单示例

    Java 基于第三方插件实现WebService实在麻烦,尤其是要添加几十M的Jar包...还好,自从JDK 1.6开始,Java自身已经支持WebSeervice的开发即JAX-WS,附件是一个简单的示例,供入门参考。注意,JDK环境要求1.6及以上版本。

    jax-ws发布webservice

    通过定义服务接口,实现服务逻辑,以及使用`Endpoint.publish()`发布服务,我们可以轻松地创建一个基于JAX-WS的Web服务。同时,利用`wsimport`工具生成客户端代码,可以方便地进行服务调用。在"jax-ws-server"和"jax...

Global site tag (gtag.js) - Google Analytics