zoukankan      html  css  js  c++  java
  • 使用JAX-WS开发WebService

    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> 
    </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"?>
    <?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名称项目名称 arget”会生成“项目名称.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%inwsimport" -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");
    	}
    }
    

     附,项目截图:

  • 相关阅读:
    关于guava实现线程池
    结构化方法与面向对象方法的比较
    敏捷开发与传统开发方式的比较
    C# 事件的使用方法
    C# 泛型反射的调用
    RPC 知识科普一下
    C#枚举(Enum)小结
    C#图片添加文字水印
    C#索引器
    C#隐式转换与显示转换
  • 原文地址:https://www.cnblogs.com/gdjlc/p/6962887.html
Copyright © 2011-2022 走看看