來個簡單點的:
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服務了。