掌握使用 JAX-WS 2.0(JSR 224)代碼優先方式設計、開發、發布、調用 Web 服務。環境:Java SE 6.0(內置輕量級 HTTP 服務器與 wsgen/wsimport 工具)。
@WebService、@WebMethod、@SOAPBinding。OrderBeanpackage com.ibm.jaxws.tutorial.service.bean;
public class OrderBean {
private Customer customer;
private Address shippingAddress;
private OrderItem[] orderItems;
private String orderId;
// Getter/Setter 省略
}
OrderProcessServicepackage com.ibm.jaxws.tutorial.service;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import com.ibm.jaxws.tutorial.service.bean.OrderBean;
@WebService(serviceName = "OrderProcess",
portName = "OrderProcessPort",
targetNamespace = "https://jawxs.ibm.tutorial/jaxws/orderprocess")
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT,
use = SOAPBinding.Use.LITERAL,
parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
public class OrderProcessService {
@WebMethod
public OrderBean processOrder(OrderBean orderBean) {
System.out.println("processOrder called for customer " + orderBean.getCustomer().getCustomerId());
if (orderBean.getOrderItems() != null) {
System.out.println("Number of items is " + orderBean.getOrderItems().length);
}
orderBean.setOrderId("A1234");
return orderBean;
}
}
javac com/ibm/jaxws/tutorial/service/*.java com/ibm/jaxws/tutorial/service/bean/*.javawsgen -cp . com.ibm.jaxws.tutorial.service.OrderProcessService -wsdlOrderProcess.wsdl、OrderProcess_schema1.xsd 及 jaxws 包裝類。java com.ibm.jaxws.tutorial.service.publish.OrderWebServicePublisherThe Web service is published at https://localhost:8080/OrderProcessWeb/orderprocesshttps://localhost:8080/OrderProcessWeb/orderprocess?wsdlpackage com.ibm.jaxws.tutorial.service.publish;
import javax.xml.ws.Endpoint;
import com.ibm.jaxws.tutorial.service.OrderProcessService;
public class OrderWebServicePublisher {
public static void main(String[] args) {
Endpoint.publish("https://localhost:8080/OrderProcessWeb/orderprocess",
new OrderProcessService());
}
}
<types> 導入 OrderProcess_schema1.xsd,目標命名空間與 @WebService.targetNamespace 一致。processOrder/processOrderResponse 對應包裝類 ProcessOrder/ProcessOrderResponse。orderBean 複雜類型映射 OrderBean,包含 customer、orderId、orderItems(maxOccurs=unbounded)、shippingAddress。portType、binding(document/literal)、service 端點地址均自動生成,符合 @SOAPBinding 規範。wsimport -keep -p com.ibm.jaxws.tutorial.service.client https://localhost:8080/OrderProcessWeb/orderprocess?wsdlOrderProcess 服務類、OrderProcessService SEI。package com.ibm.jaxws.tutorial.service.client;
import java.net.URL;
import javax.xml.namespace.QName;
public class OrderClient {
private static final QName QNAME = new QName(
"https://jawxs.ibm.tutorial/jaxws/orderprocess", "OrderProcess");
public static void main(String[] args) {
if (args.length != 1) {
System.out.println("Specify the URL of the OrderProcess Web Service");
System.exit(-1);
}
try {
URL wsdlUrl = new URL(args[0]);
OrderProcess service = new OrderProcess(wsdlUrl, QNAME);
OrderProcessService port = service.getOrderProcessPort();
OrderBean order = new OrderBean();
Customer customer = new Customer();
customer.setCustomerId("A123");
customer.setFirstName("John");
customer.setLastName("Smith");
order.setCustomer(customer);
OrderItem item = new OrderItem();
item.setItemId("11");
item.setQty(11);
order.getOrderItems().add(item);
OrderBean response = port.processOrder(order);
System.out.println("Order id is " + response.getOrderId());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
javac com/ibm/jaxws/tutorial/service/client/OrderClient.javajava com.ibm.jaxws.tutorial.service.client.OrderClient https://localhost:8080/OrderProcessWeb/orderprocess?wsdlprocessOrder called for customer A123Number of items is 1Order id is A1234JAX-WS 2.0 代碼優先模式讓開發者專注於 Java 類設計,通過 Annotation 生成標準 WSDL/XSD,wsgen/wsimport 自動處理構件生成,Endpoint.publish 快速測試。Document/Literal 風格適合企業級服務契約。客戶端完全屏蔽 SOAP/XML 細節,操作 JAXB 對象即可。