標籤:介面實現 keep ons result mini ima image src lang
WEBSERVICE之JDK開發webservice
一、開發工具與環境
1、 jdk1.6版本以上
2 、eclipse4.5版本
二、JDK開發webservice
1、定義一個interface,使用@WebService註解標註介面,使用@WebMethod註解標註介面中定義的所有方法,如下所示:
package com.me.ws;
import javax.jws.WebMethod;
import javax.jws.WebService;
/**
*
* @author Administrator
* 使用@WebService註解將介面註解為一個webservice服務
*/
@WebService
public interface WebServiceInterface {
/*
* 使用@WebMethod註解標註WebServiceInterface介面中的方法
*/
@WebMethod
public String sayHello(String name);
@WebMethod
public String save( String name);
}
2、定義一個實作類別實現介面中所有方法,並用@WebService註解將實作類別也註解成一個webservice服務,如下所示:
package com.me.ws;
import javax.jws.WebService;
/**
*
* @author Administrator
* 使用@WebService註解標註實作類別,將實作類別註解成為一個webservice服務
*/
//
@WebService
public class WebServiceImpl implements WebServiceInterface {
@Override
public String sayHello(String name) {
System.out.println("hello world "+name);
return "hello world "+name;
}
@Override
public String save(String name) {
System.out.println("save "+name);
return "save "+name;
}
}
3、發布服務
3.1 、使用Endpoint(終端)類發布webservice,如下所示:
package com.me.ws;
import javax.xml.ws.Endpoint;
/**
*
* @author Administrator
* 發布webservice服務(JDK是使用Endpoint(終端)類發布webservice服務的)
*/
public class WebServicePublish {
public static void main(String[] args) {
/**
*1、先提供一個給別人訪問的url地址
*/
String address = "http://192.168.1.72:8089/ws_service/hello";
// 2、使用Endpoint的publish方法來發布這個服務
//Endpoint.publish(address, 介面實作類別)
Endpoint.publish(address, new WebServiceImpl());
System.out.println("發布webservice成功!");
}
}
運行WebServicePublish 類 後,就可以將編寫好的WebService發布好了,它的WSDL訪問地址是http://192.168.1.72:8089/ws_service/hello?wsdl。
以上是java工程的webservice發布,如果是web項目,則我們可以使用監聽器或者Servlet來發布WebService(在這裡就需要注意一點,項目中引用的servlet包必須是3.0及以上版本才行),
3.2 、使用監聽器發布webservice,代碼如下:
package com.me.ws; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; import javax.xml.ws.Endpoint; import me.gacl.ws.WebServiceImpl; /** * @author gacl * 用於發布WebService的監聽器 */ //使用Servlet3.0提供的@WebListener註解將實現了ServletContextListener介面的WebServicePublishListener類標註為一個Listener @WebListener public class WebServicePublishListener implements ServletContextListener { @Override public void contextDestroyed(ServletContextEvent sce) { } @Override public void contextInitialized(ServletContextEvent sce) { //WebService的發布地址 String address = "http://192.168.1.72:8089/ws_service/hello"; //發布WebService,WebServiceImpl類是WebServie介面的具體實作類別 Endpoint.publish(address , new WebServiceImpl()); System.out.println("使用WebServicePublishListener發布webservice成功!"); } }
在web.xml上進行配置:
<?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>ws_service</display-name>
<!-- 載入自訂監聽器 -->
<listener>
<listener-class> com.me.ws.webServicePublishLinster</listener-class>
</listener>
</web-app>
將Web應用部署到伺服器運行時,在初始化Web應用上下文時,就會發布WebService了。
接著我們可以使用發布的URL地址訪問WebService
3.3、使用servlet發布webservice,代碼如下:
package com.me.ws; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.xml.ws.Endpoint; import me.gacl.ws.WebServiceImpl; /** * @author gacl * 用於發布WebService的Servlet */ //使用Servlet3.0提供的@WebServlet註解將繼承HttpServlet類的普通Java類標註為一個Servlet //將value屬性設定為空白字串,這樣WebServicePublishServlet就不提供對外訪問的路徑 //loadOnStartup屬性設定WebServicePublishServlet的初始化時機 @WebServlet(value="",loadOnStartup=0) public class WebServicePublishServlet extends HttpServlet { /* (non-Javadoc) * @see javax.servlet.GenericServlet#init() * 在WebServicePublishServlet初始化時發布WebService */ public void init() throws ServletException { //WebService的發布地址 String address = "http://192.168.1.72:8089/ws_service/hello"; //發布WebService,WebServiceImpl類是WebServie介面的具體實作類別 Endpoint.publish(address , new WebServiceImpl()); System.out.println("使用WebServicePublishServlet發布webservice成功!"); } }
在web.xml上進行配置:
<?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>ws_service</display-name>
<servlet>
<servlet-name>WSServlet</servlet-name>
<servlet-class>com.me.ws.WebServicePublishServlet</servlet-class>
<load-on-startup>1</load-on-startup> <!-- 必須有 -->
</servlet>
<servlet-mapping>
<servlet-name>WSServlet</servlet-name>
<url-pattern>/ws_service</url-pattern>
</servlet-mapping>
</web-app>
將Web應用部署到伺服器運行時,在初始化WebServicePublishServlet時,就會發布WebService了。如所示:
接著我們可以使用發布的URL地址訪問WebService
以上是webservice服務開發,下面講它的用戶端的開發
三、開發WebService用戶端
1、藉助jdk的wsimport.exe工具產生用戶端代碼,wsimport.exe工具位於Jdk的bin目錄下,如所示:
執行命令:wsimport -keep url(url為wsdl檔案的路徑)產生用戶端代碼。
建立一個WebService用戶端測試專案,如所示:
開啟命令列視窗,切換到src目錄,執行"wsimport -keep http://192.168.1.72:8089/ws_service/hello?wsdl"產生用戶端代碼,如所示:
執行命令的過程中沒有出現任何錯誤,那麼代碼就產生成功了,重新整理一下src目錄,就可以看到產生的程式碼了,如所示:
2、 藉助產生的程式碼編寫調用WebService對外提供的方法
wsimport工具幫我們產生了好幾個java類,但我們只需要關心WebServiceImplService類和WebServiceImpl介面的使用即可,如下所示:
1 package me.gacl.ws.client; 2 3 import me.gacl.ws.WebServiceImpl; 4 import me.gacl.ws.WebServiceImplService; 5 6 /** 7 * @author gacl 8 * 調用WebService的用戶端 9 */10 public class WSClient {11 12 public static void main(String[] args) {13 //建立一個用於產生WebServiceImpl執行個體的工廠,WebServiceImplService類是wsimport工具產生的14 WebServiceImplService factory = new WebServiceImplService();15 //通過工廠產生一個WebServiceImpl執行個體,WebServiceImpl是wsimport工具產生的16 WebServiceImpl wsImpl = factory.getWebServiceImplPort();17 //調用WebService的sayHello方法18 String resResult = wsImpl.sayHello("孤傲蒼狼");19 System.out.println("調用WebService的sayHello方法返回的結果是:"+resResult);20 System.out.println("---------------------------------------------------");21 //調用WebService的save方法22 resResult = wsImpl.save("孤傲蒼狼","123");23 System.out.println("調用WebService的save方法返回的結果是:"+resResult);24 }25 }
用戶端調用伺服器端的WebService方法運行結果如下:
從調用返回的結果顯示,藉助wsimport工具產生的用戶端代碼已經成功調用到了WebService中的方法。以上就是使用JDK開發WebService的相關內容。
WEBSERVICE之JDK開發webservice