3.2.2. 开发和部署 JAX-WS Web 服务端点
JAX-WS 服务端点是一个服务器端组件,响应来自 JAX-WS 客户端的请求,并为自身发布 WSDL 定义。
有关如何开发 JAX-WS 端点应用的工作示例,请参见 JBoss EAP 附带的以下快速入门:
- jaxws-addressing
- jaxws-ejb
- jaxws-pojo
- jaxws-retail
- wsat-simple
- wsba-coordinator-completion-simple
- wsba-participant-completion-simple
开发要求
Web 服务必须满足 JAX-WS API 和 JSR 181: Web 服务元数据用于 Java 平台规格的要求。有效的实施满足以下要求: Web 服务元数据的 Jakarta EE 遵循 Jakarta Web Services Metadata 规范 2.1 规范。
-
它包含
javax.jws.WebService
注释。 - 所有方法参数和返回类型都兼容 JSR 222:用于 XML 绑定(JAXB)2.0 规范的 JavaTM 架构。XML Binding 的 Jakarta EE 等效于 Jakarta XML Binding 规范 2.3。
以下是满足这些要求的 Web 服务实施示例。
示例:Web 服务实施
package org.jboss.quickstarts.ws.jaxws.samples.retail.profile; import javax.ejb.Stateless; import javax.jws.WebService; import javax.jws.WebMethod; import javax.jws.soap.SOAPBinding; @Stateless @WebService( name = "ProfileMgmt", targetNamespace = "http://org.jboss.ws/samples/retail/profile", serviceName = "ProfileMgmtService") @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE) public class ProfileMgmtBean { @WebMethod public DiscountResponse getCustomerDiscount(DiscountRequest request) { DiscountResponse dResponse = new DiscountResponse(); dResponse.setCustomer(request.getCustomer()); dResponse.setDiscount(10.00); return dResponse; } }
以下是上例中 ProfileMgmtBean
bean 使用的 DiscountRequest
类示例。注解包含在内。通常,JAXB 的默认值是正确的,不需要指定。
示例:DiscountRequest 类
package org.jboss.test.ws.jaxws.samples.retail.profile; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlType; import org.jboss.test.ws.jaxws.samples.retail.Customer; @XmlAccessorType(XmlAccessType.FIELD) @XmlType( name = "discountRequest", namespace="http://org.jboss.ws/samples/retail/profile", propOrder = { "customer" } ) public class DiscountRequest { protected Customer customer; public DiscountRequest() { } public DiscountRequest(Customer customer) { this.customer = customer; } public Customer getCustomer() { return customer; } public void setCustomer(Customer value) { this.customer = value; } }
打包部署
实施类封装在 JAR 部署中。部署所需的任何元数据都从实施类和服务端点接口的注解中获取。您可以使用管理 CLI 或管理控制台部署 JAR,并且 HTTP 端点会自动创建。
下表显示了 EJB Web 服务 JAR 部署的结构示例:
$ jar -tf jaxws-samples-retail.jar org/jboss/test/ws/jaxws/samples/retail/profile/DiscountRequest.class org/jboss/test/ws/jaxws/samples/retail/profile/DiscountResponse.class org/jboss/test/ws/jaxws/samples/retail/profile/ObjectFactory.class org/jboss/test/ws/jaxws/samples/retail/profile/ProfileMgmt.class org/jboss/test/ws/jaxws/samples/retail/profile/ProfileMgmtBean.class org/jboss/test/ws/jaxws/samples/retail/profile/ProfileMgmtService.class org/jboss/test/ws/jaxws/samples/retail/profile/package-info.class