13.3.2. JAX-WS Web サービスエンドポイントの書き込みとデプロイ
はじめに
本トピックでは、シンプルな JAX-WS サービスエンドポイントの開発について説明します。JAX-WS サービスエンドポイントは、JAX-WS クライアントからの要求に応答し、WSDL 定義を自らに大して公開するサーバー側のコンポーネントです。JAX-WS サービスエンドポイントに関する詳細については、「JAX-WS の共通 API リファレンス」および JBoss Enterprise Application Platform 6 に同梱されている Javadoc 形式の API ドキュメントバンドルを参照してください。
開発要件
Web サービスは、http://www.jcp.org/en/jsr/summary?id=181 に記載の JAX-WS API および Web サービスメタデータの仕様要件を満たしている必要があります。有効な実装は以下の要件を満たします:
javax.jws.WebService
アノテーションが含まれます。- メソッドのパラメーターおよび戻り値の型はすべて JAXB 2.0 の仕様 JSR-222 との互換性があります。詳しくは http://www.jcp.org/en/jsr/summary?id=222 を参照してください。
例13.13 サービス実装の例
package org.jboss.test.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) { return new DiscountResponse(request.getCustomer(), 10.00); } }
例13.14 XML ペイロードの例
上記の例に記載の
ProfileMgmtBean
Bean によって使用される DiscountRequest
クラスの例は以下のとおりです。アノテーションは詳細のために含まれています。通常、JAXB のデフォルト設定は妥当なので指定する必要はありません。
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( (1) 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; } }
より複雑なマッピングが可能です。詳しい情報は http://java.sun.com/webservices/jaxb/ に記載の JAXB API 仕様を参照してください。
デプロイメントのパッケージ
実装クラスは JAR
デプロイメントにラッピングされます。実装クラスおよびサービスエンドポイントインターフェースに対するアノテーションからデプロイメントに必要な任意のメタデータが取得されます。管理 CLI または管理インターフェースを使用して JAR をデプロイすると、HTTP エンドポイントが自動的に作成されます。
以下の一覧は、EJB Web サービスの JAR デプロイメントの適正な構造の例を示しています。
例13.15 Web サービスデプロイメントの JAR 構造の例
[user@host ~]$ 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