使用JDK開發WebService

使用該方法須要具有JAVA 的JDK6及以上版本。java

一 新建服務和發佈服務web

1.新建接口spring

 1 package com.example;
 2 
 3 import javax.jws.WebMethod;
 4 import javax.jws.WebService;
 5 
 6 @WebService
 7 public interface HelloService {
 8     String sayHello(String name);
 9 
10     @WebMethod(exclude = true)
11     /*此方法不發佈
12     * */
13     void test(String str);
14 }

2.實現類apache

package com.example.impl;

import com.example.HelloService;

import javax.jws.WebService;

@WebService(serviceName = "HelloService",portName = "HelloServicePort",
        endpointInterface = "com.example.HelloService")
public class HelloServiceImpl implements HelloService {
    public String sayHello(String name) {
        return "hello,"+name;
    }

    public void test(String str) {
        System.out.println("test");
    }
}

3.運行main方法,發佈服務瀏覽器

 1 package com.example;
 2 
 3 import com.example.impl.HelloServiceImpl;
 4 
 5 import javax.xml.ws.Endpoint;
 6 
 7 public class Server {
 8     public static void main(String[] args) {
 9         String address="http://localhost:8082/ws/hello";
10         HelloService service=new HelloServiceImpl();
11 
12         Endpoint.publish(address,service);
13         System.out.println("ws is publish");
14     }
15 }

4.在瀏覽器中查看wsdl文檔框架

訪問http://localhost:8082/ws/hello?wsdlmaven

 

  5.wsdl文檔說明工具

其中,definitions 是 WSDL 的根節點,它包括兩個重要的屬性:spa

  1. name:WS 名稱,默認爲「WS 實現類 + Service」,例如:HelloServiceImplService.net

  2. targetNamespace:WS 目標命名空間,默認爲「WS 實現類對應包名倒排後構成的地址」,例如:http://soap_spring_cxf.ws.demo/

 提示:能夠在 javax.jws.WebService 註解中配置以上兩個屬性值,但這個配置必定要在 WS 實現類上進行,WS 接口類只需標註一個 WebService 註解便可。

 在 definitions 這個根節點下,有五種類型的子節點,它們分別是:

  1. types:描述了 WS 中所涉及的數據類型

  2. portType:定義了 WS 接口名稱(endpointInterface)及其操做名稱,以及每一個操做的輸入與輸出消息

  3. message:對相關消息進行了定義(供 types 與 portType 使用)

  4. binding:提供了對 WS 的數據綁定方式

  5. service:WS 名稱及其端口名稱(portName),以及對應的 WSDL 地址

 其中包括了兩個重要信息:

  1. portName:WS 的端口名稱,默認爲「WS 實現類 + Port」,例如:HelloServiceImplPort

  2. endpointInterface:WS 的接口名稱,默認爲「WS 實現類所實現的接口」,例如:HelloService

 提示:可在 javax.jws.WebService 註解中配置 portName 與 endpointInterface,一樣必須在 WS 實現類上配置。

 

二 客戶端調用

1.使用 JDK 提供的命令行工具生成 WS 客戶端 jar 包。

  • wsimport http://localhost:8082/ws/hello?wsdl
  • jar -cf client.jar com
  • rmdir /s/q com
  • 第一行:經過 WSDL 地址生成 class 文件

  • 第二行:經過 jar 命令將若干 class 文件壓縮爲一個 jar 包

  • 第三行:刪除生成的 class 文件(刪除根目錄便可)

 

 2.把生成的jar包添加到項目依賴中

若是是maven項目,先把jar包安裝到本地倉庫

mvn install:install-file -Dfile=client.jar -DgroupId=com.example -DartifactId=webclient -Dversion=2.0 -Dpackaging=jar

而後添加項目依賴

        <dependency>
            <groupId>com.example</groupId>
            <artifactId>webclient</artifactId>
            <version>2.0</version>
        </dependency>    

3.寫一個 Client 類,用於調用 WS,須要使用上一步生成的 WS 客戶端 jar 包

package com.example;

import com.example.impl.HelloService;
import com.example.impl.HelloService_Service;

public class Client {
    public static void main(String[] args) {

        HelloService_Service service = new HelloService_Service();
        HelloService helloService = service.getHelloServicePort();

        String result = helloService.sayHello("lili");
        System.out.println(result);
    }
}

運行程序,控制檯輸出"hellolili"字樣,說明調用成功。

 

三 發佈與調用WS的其它方法

WS 實際上是一種 Java 規範,名爲 JAX-WS(JSR-224),全稱 Java API for XML-Based Web Services,能夠將規範理解爲官方定義的一系列接口

JAX-WS 有一個官方實現,就是上面提到的 JAX-WS RI,它是 Oracle 公司提供的實現,而 Apache 旗下的 Axis 與 CXF 也一樣實現了該規範。Axis 相對而言更加老牌一些,而 CXF 的前世就是 XFire,它是一款著名的 WS 框架,擅長與 Spring 集成。

從本質上講,JAX-WS 是基於 SOAP 的,而 SOAP 的全稱是 Simple Object Access Protocol(簡單對象訪問協議)

 

參考文章:my.oschina.net/huangyong/blog/286155

相關文章
相關標籤/搜索