标签:webservice ws jax-ws
java中WebService框架有很多,像Axis,XFire,CXF等,除了上述框架外,JDK中自带JAX-WS框架。相比而言,JWS是轻量级的,使用非常简便,可与Spring集成使用。
下面就详述如何通过mvn构建WebService服务端及客户端。
在mvn项目的pom文件中加入依赖包
<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-rt</artifactId>
    <version>2.2.8</version>
</dependency>引完包后记得重新构建项目,命令方式如下
mvn eclipse:eclipse -Dwtpversion=2.0 -DdownloadSources=true@WebService
public class Hello {
    @WebMethod
    public String sayHello(@WebParam(name = "name") String name) {// @WebParam来指定wsdl文件schema的参数名称,而不是显示为arg0,arg1等,以增加可读性
        return String.format("Hello, %s", name);
    }
}上面通过注解@WebService表明这是一个WebService类,其中注解@WebMethod、@WebParam非必需。
有两种方式发布自己的WebService
public static void main(String[] args) {
    Endpoint.publish("http://localhost/HelloService", new Hello());
}直接通过Endpoint.publish方式进行WebService发布,一般用作调试。运行该类后在浏览器访问http://localhost/HelloService如下图 
发布到web容器中。下面以tomcat为例说明发布配置过程 
在WEB-INF目录下新建sun-jaxws.xml文件(该xml文件名固定死的,不能随意修改),内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"
    version="2.0">
    <endpoint name="HelloService" implementation="com.gvtv.learn.ws.server.Hello"
        url-pattern="/HelloService" />
<!-- url-pattern需要与web.xml中对应的servlet的url-pattern一致 -->
</endpoints>然后修改web.xml,增加Listener和Servlet如下:
<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
    <display-name>Archetype Created Web Application</display-name>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:conf/spring-*.xml</param-value>
    </context-param>
    <listener>
        <listener-class>
            com.sun.xml.ws.transport.http.servlet.WSServletContextListener
        </listener-class>
    </listener>
    <servlet>
        <servlet-name>SayHiService</servlet-name>
        <servlet-class>
            com.sun.xml.ws.transport.http.servlet.WSServlet
        </servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>SayHiService</servlet-name>
        <url-pattern>/HelloService</url-pattern>
    </servlet-mapping>
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>
    <servlet>
        <servlet-name>springMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:conf/springMVC-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>注解sun-jaxws.xml中的url-pattern需要与web.xml中的servlet的url-pattern一致,如上例都为/HelloService(可任意取值)。 
启动tomcat后浏览器中输入网址:http://localhost/jquery_ui/HelloService?wsdl(jquery_ui是本人的项目名),如看到wsdl文件则表明服务发布成功
可利用JDK自带的wsimport工具生成基础代码
xxx\src\main\java>wsimport -encoding utf-8 -keep -d .\ -p com.gvtv.learn.ws.client http://localhost/jquery_ui/HelloService?wsdlwsimport用法如下:
用法: wsimport [options] <WSDL_URI>
其中 [options] 包括:
  -d <directory>            指定放置生成的输出文件的位置
  -encoding <encoding>      指定源文件所使用的字符编码
  -help                     显示帮助
  -keep                     保留生成的文件(指保留java源文件)
  -p <pkg>                  指定目标程序包名此时,在包com.gvtv.learn.ws.client下可看见生成的源文件如下 
public class Main {
    public static void main(String[] args) {
        Hello service = new HelloService().getHelloPort();
        String result = service.sayHello("屌丝!");
        System.out.println(result);
    }
}可看到打印出信息
Hello, 屌丝!至此,java版的WebService服务端和客户端就完成了,过程非常简单。下次补充下其它知识点
标签:webservice ws jax-ws
原文地址:http://blog.csdn.net/tang9140/article/details/45537077