用JAX-WS實現java調用webServic

來個簡單點的:

1.建個具體的服務實現:

package com.webservice;

@WebService
public class Warehouse {
 private Map<String, Double> prices;
 public Warehouse() {
  prices = new HashMap<String, Double>();
  prices.put("Blackwell Toaster", 24.95);
  prices.put("ZapXpress Microwave Oven", 49.95);
 }

 public double getPrice(@WebParam(name = "description")
 String description) {
  Double price = prices.get(description);
  return price == null ? 0 : price;
 }

}

2。生成存根(stub) 的classes,在RMI中這會自動生成。WebService中可用JAX-WS工具生成:
 進到工程的classes目錄下:
 wsgen -classpath . com.webservice.Warehouse
 在com.webservice.jaxws中會生成一些class類,在這裏的是GetPrice.class和GetPriceResponse.class
 其實也就是把參數和返回值包裝的類。


3。是時候部署了,在這裏,我們用jdk提供的簡單機制:

package com.webservice;

public class WarehouseServer {
 public static void main(String[] args) {
  Endpoint.publish("http://localhost:8080/WebService/warehouse", new Warehouse());
 }
}

運行後,在瀏覽器裏敲上上面的地址 http://localhost:8080/WebService/warehouse?wsdl 就可以看到WebService提供的信息:
  <?xml version="1.0" encoding="UTF-8" ?>
- <!--  Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.1 in JDK 6.
  -->
- <!--  Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.1 in JDK 6.
  -->
- <definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://webservice.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://webservice.com/" name="WarehouseService">
- <types>
-  <xsd:schema>
    <xsd:import namespace="http://webservice.com/" schemaLocation="http://localhost:8080/WebService/warehouse?xsd=1" />
   </xsd:schema>
  </types>
- <message name="getPrice">
   <part name="parameters" element="tns:getPrice" />
  </message>
- <message name="getPriceResponse">
   <part name="parameters" element="tns:getPriceResponse" />
  </message>
- <portType name="Warehouse">
- <operation name="getPrice">
   <input message="tns:getPrice" />
   <output message="tns:getPriceResponse" />
  </operation>
  </portType>
- <binding name="WarehousePortBinding" type="tns:Warehouse">
   <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
-  <operation name="getPrice">
    <soap:operation soapAction="" />
-  <input>
    <soap:body use="literal" />
   </input>
-  <output>
    <soap:body use="literal" />
   </output>
   </operation>
  </binding>
- <service name="WarehouseService">
-  <port name="WarehousePort" binding="tns:WarehousePortBinding">
    <soap:address location="http://localhost:8080/WebService/warehouse" />
   </port>
  </service>
  </definitions>

4。生成所需的類。
 同樣,利用JAX-WS工具,生成我們要用的類:
 進到工程的src目錄下:
 wsimport -keep -p com.webservice.server http://localhost:8080/WebServices/warehouse?wsdl
 注意:包的名字和用wsgen時的不一樣。
 在com.webservice.server下會生成我們需要的類:
  GetPrice
  GetPriceResponse
  Warehouse (接口)
  package-info
  WarehouseService
  ObjectFactory

5。遠程調用服務
 寫個客戶端:

package com.webservice;

public class Client {
 public static void main(String[] args) {
  WarehouseService service = new WarehouseService();
  Warehouse port = service.getPort(Warehouse.class);

  String descr = "Blackwell Toaster";
  double price = port.getPrice(descr);
  System.out.println(descr + ": " + price);

 }
}

6。總結:
 主要用到了JAX-WS這個工具,wsgen,wsimport的用法。瞭解wsdl文件所提供的服務器信息,就可以遠程相擁WebService服務了。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章