WEBSERVICE之JDK開發webservice


WEBSERVICE之JDK開發webservice

一、開發工具與環境

1、 jdk1.6版本以上(jdk1.6.0_21及以上版本)

2 、eclipse4.5版本

3、與Web服務相關的類,都位於Javax.jws.*包中

        @WebService——此注解用在類上指定將此類發布成一個WebService

        @WebMethod——此注解用在類中所定義的方法上,將方法發布成一個WebService服務;可省略,但要將發布服務的方法設置為public;

        EndPoint——此類為端點服務類,其中publish()方法用於將一個已經添加了@WebService注解對象綁定到一個地址的端口上,用於發布。

4使用jdk的EndPoint發布web服務要點

4.1.在要發布服務的類上添加@WebService注解。將要發布服務的方法設置為public。

4.2.調用EndPoint.publish(,)發布服務

其他注意事項:

1.給類添加上@WebService注解后,類中所有的非靜態方法都將會對外公布。
2.不支持靜態方法,final方法。
3.如果希望某個方法(非static,非final)不對外公開,可以在方法上添加@WebMethod(exclude=true),阻止對外公開。
4.被添加了@WebService注解的類至少要有一個可以公開的方法,否則將會啟動失敗。

二、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上不再需要對servlet進行配置,如下(因為servlet3.0中的@WebServlet注解已經將該類注解為了servlet類,所以不需要另外在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>   
</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的相關內容。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM