使用該方法須要具有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
name:WS 名稱,默認爲「WS 實現類 + Service」,例如:HelloServiceImplService.net
targetNamespace:WS 目標命名空間,默認爲「WS 實現類對應包名倒排後構成的地址」,例如:http://soap_spring_cxf.ws.demo/
提示:能夠在 javax.jws.WebService 註解中配置以上兩個屬性值,但這個配置必定要在 WS 實現類上進行,WS 接口類只需標註一個 WebService 註解便可。
在 definitions 這個根節點下,有五種類型的子節點,它們分別是:
types:描述了 WS 中所涉及的數據類型
portType:定義了 WS 接口名稱(endpointInterface)及其操做名稱,以及每一個操做的輸入與輸出消息
message:對相關消息進行了定義(供 types 與 portType 使用)
binding:提供了對 WS 的數據綁定方式
service:WS 名稱及其端口名稱(portName),以及對應的 WSDL 地址
其中包括了兩個重要信息:
portName:WS 的端口名稱,默認爲「WS 實現類 + Port」,例如:HelloServiceImplPort
endpointInterface:WS 的接口名稱,默認爲「WS 實現類所實現的接口」,例如:HelloService
提示:可在 javax.jws.WebService 註解中配置 portName 與 endpointInterface,一樣必須在 WS 實現類上配置。
二 客戶端調用
1.使用 JDK 提供的命令行工具生成 WS 客戶端 jar 包。
第一行:經過 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的其它方法
CXF:
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