このアプリケーションは、3 つの主要エンティティーで構成されています。
<types>
<schema
targetNamespace="urn:SchemaDefinedPurchaseOrderService"
xmlns:soap11-enc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://www.w3.org/2001/XMLSchema">
<xsd:import
namespace="http://java.sun.com/blueprints/ns/po"
schemaLocation="PurchaseOrder.xsd"/>
<element name="submitPO">
<complexType>
<sequence>
<element name="inputDoc" type="pons:PurchaseOrder"
nillable="true"/>
</sequence>
</complexType>
</element>
<element name="submitPOResponse">
<complexType>
<sequence>
<element name="result" type="string"
nillable="true"/>
</sequence>
</complexType>
</element>
<element name="InvalidPOException">
<complexType>
<sequence>
<element name="message"
type="string" nillable="true"/>
</sequence>
</complexType>
</element>
</schema>
</types>
<message
name="SchemaDefinedPurchaseOrderServiceSEI_submitPO">
<part name="parameters"
element="tns:submitPO"/>
</message>
<message
name="SchemaDefinedPurchaseOrderServiceSEI_submitPOResponse">
<part name="result"
element="tns:submitPOResponse"/>
</message>
<message name="InvalidPOException">
<part name="InvalidPOException"
element="tns:InvalidPOException"/>
</message>
<portType name="SchemaDefinedPurchaseOrderServiceSEI">
<operation name="submitPO">
<input
message="tns:SchemaDefinedPurchaseOrderServiceSEI_submitPO"/>
<output
message="tns:SchemaDefinedPurchaseOrderServiceSEI_submitPOResponse"/>
<fault name="InvalidPOException"
message="tns:InvalidPOException"/>
</operation>
</portType>
コード例 1: サービスの WSDL からの抜粋<xsd:import namespace="http://java.sun.com/blueprints/ns/po" schemaLocation="PurchaseOrder.xsd"/>
文を使用して、コード例 1 の WSDL ファイルにインポートされます。<?xml version="1.0"
encoding="UTF-8"?>
<xsd:schema targetNamespace="http://java.sun.com/blueprints/ns/po"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://java.sun.com/blueprints/ns/po"
elementFormDefault="qualified">
<xsd:element name="PurchaseOrder" type="PurchaseOrder"/>
<xsd:complexType name="Address">
<xsd:sequence>
<xsd:element name="street" type="xsd:string" nillable="false"/>
<xsd:element name="city" type="xsd:string" nillable="false"/>
<xsd:element name="state" type="xsd:string" nillable="false"/>
<xsd:element name="postalCode" type="xsd:string"
nillable="false"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="LineItem">
<xsd:sequence>
<xsd:element name="itemId" type="xsd:string" nillable="false"/>
<xsd:element name="price" type="xsd:float" nillable="false"/>
<xsd:element name="quantity" type="xsd:int" nillable="false"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="PurchaseOrder">
<xsd:sequence>
<xsd:element name="poId" type="xsd:string" nillable="false"/>
<xsd:element name="createDate" type="xsd:date" nillable="false"/>
<xsd:element name="shipTo" type="Address" nillable="false"/>
<xsd:element name="billTo" type="Address" nillable="false"/>
<xsd:element name="items" type="LineItem" nillable="false"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
コード例 2: 注文書スキーマ
PurchaseOrder
オブジェクトを受け付ける submitPO()
メソッドがあります。PurchaseOrder
クラスが生成され、これは、WSDL ファイルにインポートされる注文書スキーマに対応します。また、アプリケーション定義の例外 InvalidPOException
も WSDL から生成されます。
public interface SchemaDefinedPurchaseOrderServiceSEI extends
Remote {
public String submitPO(PurchaseOrder inputDoc)
throws
InvalidPOException,
RemoteException;
}
getPoId()
メソッドは、単にクライアントに注文書 ID を返すだけであることに注意してください。実際には、クライアントに結果を返す前に何らかの仕事を行う必要があるでしょう。また、アプリケーションに固有の例外のスローを理解するため、このエンドポイントは注文書 ID が固有の番号かどうかをチェックし、この条件が満たされない場合は、例外をスローします。エンドポイント実装クラスは、次のようになります。public class SchemaDefinedPurchaseOrderServiceBean implements
SessionBean {
private SessionContext sc;
public
SchemaDefinedPurchaseOrderServiceBean(){}
public String submitPO(PurchaseOrder po) throws
InvalidPOException, RemoteException
{
// アプリケーションに固有の例外のスローを紹介することのみを目的としたコード
if(po.getPoId().equals("100"))
throw new InvalidPOException("Invalid ID for the purchase order!!! " +
"For demo purposes, we throw " +
"an application defined exception for the ID value of
100.");
// PO ID を抽出して、クライアントに返す
return po.getPoId();
}
// ライフサイクルメソッド
public void ejbCreate() throws CreateException
{}
public void setSessionContext(SessionContext sc) {
this.sc = sc;
}
public void ejbRemove(){}
public void ejbActivate() {}
public void ejbPassivate() {}
}
コード例 4: エンドポイント実装
<enterprise-beans>
<session>
<ejb-name>SchemaDefinedPurchaseOrderServiceBean</ejb-name>
<service-endpoint>com.sun.j2ee.blueprints.objectposervice.SchemaDefinedPurchaseOrderServiceSEI</service-endpoint>
<ejb-class>com.sun.j2ee.blueprints.objectposervice.SchemaDefinedPurchaseOrderServiceBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
コード例 5: ejb-jar.xml 配備記述子からの抜粋<service-endpoint>
として定義されていることに注意してください。<webservice-description>
<webservice-description-name>SchemaDefinedPurchaseOrderService</webservice-description-name>
<wsdl-file>META-INF/wsdl/SchemaDefinedPurchaseOrderService.wsdl</wsdl-file>
<jaxrpc-mapping-file>META-INF/schemadefinedpurchaseorderservice-mapping.xml</jaxrpc-mapping-file>
<port-component>
<description>port component
description</description>
<port-component-name>SchemaDefinedPurchaseOrderService</port-component-name>
<wsdl-port
xmlns:PurchaseOrderns="urn:SchemaDefinedPurchaseOrderService">
PurchaseOrderns:SchemaDefinedPurchaseOrderServiceSEIPort
</wsdl-port>
<service-endpoint-interface>
com.sun.j2ee.blueprints.objectposervice.SchemaDefinedPurchaseOrderServiceSEI
</service-endpoint-interface>
<service-impl-bean>
<ejb-link>SchemaDefinedPurchaseOrderServiceBean</ejb-link>
</service-impl-bean>
</port-component>
</webservice-description>
コード例 6: webservice.xml 配備記述子からの抜粋