加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

使用JAX-WS开发WebService

发布时间:2020-12-16 21:49:13 所属栏目:安全 来源:网络整理
导读:Axis2和CXF是目前流行的Webservice框架,这两个框架都属于重量级框架。 相对而言,JAX-WS RI是一个轻量级的框架。 开发WebService只需要很简单的几个步骤:写接口和实现-发布-生成客户端(测试或使用)。 服务端写接口和实现 1、新建一个Maven Web项目,在项目
Axis2和CXF是目前流行的Webservice框架,这两个框架都属于重量级框架。
相对而言,JAX-WS RI是一个轻量级的框架。
开发WebService只需要很简单的几个步骤:写接口和实现->发布->生成客户端(测试或使用)。

服务端写接口和实现

1、新建一个Maven Web项目,在项目中添加JAX-WS RI引用,pom.xml配置文件如下
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.test</groupId>
  <artifactId>jwsDemo</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>jwsDemo</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    	<!-- JAXWS-RI -->  
        <dependency>  
            <groupId>com.sun.xml.ws</groupId>  
            <artifactId>jaxws-rt</artifactId>  
            <version>2.2.10</version>  
        </dependency>  
        <dependency>  
            <groupId>junit</groupId>  
            <artifactId>junit</artifactId>  
            <version>4.11</version>            
        </dependency>  
  </dependencies>  
  <build>
    <finalName>jwsDemo</finalName>
    <defaultGoal>compile</defaultGoal>
  </build>
</project>
2、创建服务接口
接口中把类注明为@WebService,把方法注明为@WebMethod,其余如@WebResult、@WebParam等都不是必要的,
而客户端和服务端的通信用RPC 和Message-Oriented两种。
package service;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;

@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC)
public interface HelloService {
	
	@WebMethod
	void say1();
	
	@WebMethod
	void say2(@WebParam(name = "name") String name);
}
3、创建接口的实现类
package service.imp;

import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;

import service.HelloService;

@WebService(endpointInterface = "service.HelloService")
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class HelloServiceImp implements HelloService{

	@Override
	public void say1() {
		 System.out.println("Hi,abc!");		
	}

	@Override
	public void say2(String name) {
		System.out.println("Hi," + name + "!");		
	}

}
4、基于web服务器Servlet方式发布服务
(1)在WEB-INF中创建WebService配置文件sun-jaxws.xml,配置文件中一个WebService对应一个Endpoint。
<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0">
    <!-- 服务路径http://站点路径/service/hello?wsdl--> 
    <endpoint name="HelloService" implementation="service.imp.HelloServiceImp" url-pattern="/service/hello" />
</endpoints>
(2)在web.xml中添加WSServlet,如果Web项目使用Servlet 3.0或以上则不需要。
<?xml version="1.0" encoding="UTF-8"?>  
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns="http://java.sun.com/xml/ns/javaee"  
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  
    version="3.0">  
    
   <display-name>jwsDemo</display-name>
   <!-- Servlet 3.0或者以上不需要配置 -->  
    <!-- <listener>  
        <listener-class>
            com.sun.xml.ws.transport.http.servlet.WSServletContextListener  
        </listener-class>
    </listener>
   <servlet>  
	    <servlet-name>HelloService</servlet-name>  
	    <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>  
	    <load-on-startup>1</load-on-startup>  
	</servlet>  
	<servlet-mapping>  
	    <servlet-name>HelloService</servlet-name>  
	    <url-pattern>/service/hello</url-pattern>  
	</servlet-mapping> -->
	
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
  
</web-app> 
(3)生成
? 选择项目 -> Run as -> Maven Install,在“workspace名称项目名称target”会生成“项目名称.war”,即jwsDemo.war
(4)选择项目 -> Run as ?-> Run on Server,在Eclipse中的浏览器中输入地址
? http://localhost:8090/jwsDemo/service/hello?wsdl (备注:本机把默认端口8080改了8090)
? 能看到东西就说明正常
(5)部署
? 把jwsDemo.war复制到tomcat的webapps目录下,执行bin里面的startup.bat启动,tomcat自动把“项目名称.war”解压出来并启动。
?

?客户端调用

1、使用jdk自带工具wsimport生成客户端的Java类:?

"%java_home%binwsimport" -keep -Xnocompile -d d:java -p webservice.client http://localhost:8090/jwsDemo/service/hello?wsdl
几个参数说明:
-keep ? ? ? ? ? ? ? ? ? ? 保留生成的文件?
-d <directory> ? ? ? ? ? ?指定放置生成的输出文件的位置?
-p <pkg> ? ? ? ? ? ? ? ? ?指定目标程序包?
-Xnocompile ? ? ? ? ? ? ?不编译生成的 Java 文件
??
在d:javawebserviceclient生成了2个文件HelloService.java、HelloServiceImp.java
?
2、把生成的Java类添加到客户端相应的Package下
客户端调用
package test;

import webservice.client.HelloService;
import webservice.client.HelloServiceImpService;

public class Hello{	
	public void say() {		
	     HelloService service = new HelloServiceImpService().getHelloServiceImpPort(); 
	     service.say1();
	     service.say2("cdfefcg");
	}
}

附,项目截图:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读