Red Hat Training

A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform

16.4.2. JAX-WSWeb サービスエンドポイントの作成とデプロイ

はじめに

このトピックでは、サーバー側コンポーネントである単純な JAX-WS サービスエンドポイントの開発について説明します。これは、JAX-WS クライアントからの要求に応答し、それ自体の WSDL 定義を公開します。JAX-WS サービスエンドポイントの詳細については、以下を参照してください。「JAX-WS Common API Reference」JBoss EAP 6 とともに配布される Javadoc 形式の API ドキュメントバンドル。

開発要件

Web サービスは、JAXWS API と Web Services メタデータ仕様の要件に http://www.jcp.org/en/jsr/summary?id=181 対応します。有効な実装は、以下の要件を満たしている必要があります。

  • それは含まれていますjavax.jws.WebService注釈。
  • すべてのメソッドパラメーターとリターンタイプは、JAXB2.0 仕様の JSR-222 と互換性があります。詳細は、http://www.jcp.org/en/jsr/summary?id=222 を参照してください。

例16.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);
   }
}

例16.14 XML ペイロードの例

以下は、DiscountRequestによって使用されるクラスProfileMgmtBean前の例の Bean。アノテーションは詳細度のために含まれています。通常、これは 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(
  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;
   }
 
}
より複雑なマッピングが可能です。詳細は、の JAXB API 仕様 https://jaxb.java.net/ を参照してください。

デプロイメントをパッケージ化する

実装クラスは JAR デプロイメントでラップされます。デプロイメントに必要なメタデータは、実装クラスとサービスエンドポイントインターフェース上のアノテーションから取得されます。管理 CLI または管理インターフェイスを使用して JAR をデプロイすると、HTTP エンドポイントが自動的に作成されます。

次のリストは、EJBWeb サービスの JAR デプロイメントの正しい構造の例を示しています。

例16.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