java中WebService框架有很多,像Axis,XFire,CXF等,除了上述框架外,JDK中自帶JAX-WS框架。相比而言,JWS是輕量級的,使用非常簡便,可與Spring集成使用。
下面就詳述如何通過mvn構建WebService服務端及客戶端。
1.引包。
在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
2.寫服務端代碼,舉Hello服務類如下
@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非必需。
3.服務發佈
有兩種方式發佈自己的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文件則表明服務發佈成功
4.java客戶端調用
可利用JDK自帶的wsimport工具生成基礎代碼
一、cmd界面下切換到項目的src\main\java目錄下
二、執行命令
xxx\src\main\java>wsimport -encoding utf-8 -keep -d .\ -p com.gvtv.learn.ws.client http://localhost/jquery_ui/HelloService?wsdl
wsimport用法如下:
用法: wsimport [options] <WSDL_URI>
其中 [options] 包括:
-d <directory> 指定放置生成的輸出文件的位置
-encoding <encoding> 指定源文件所使用的字符編碼
-help 顯示幫助
-keep 保留生成的文件(指保留java源文件)
-p <pkg> 指定目標程序包名
此時,在包com.gvtv.learn.ws.client下可看見生成的源文件如下
三、利用上面生成的java源文件調用web服務。示例如下:
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服務端和客戶端就完成了,過程非常簡單。下次補充下其它知識點