第7章 SOAP 1.2 メッセージの使用

概要

Apache CXF は、SOAP ヘッダーを使用しない SOAP 1.2 バインディングを生成するためのツールを提供します。任意のテキストまたは XML エディターを使用して、バインディングに SOAP ヘッダーを追加できます。

7.1. WSDL ドキュメントへの SOAP 1.2 バインディングの追加

wsdl2soap の使用

注記

wsdl2soap を使用するには、Apache CXF ディストリビューションをダウンロードする必要があります。

wsdl2soap を使用して SOAP 1.2 バインディングを生成するには、コマンド wsdl2soap-iport-type-name-bbinding-name-soap12-doutput-directory-ooutput-file-nsoap-body-namespace-style (document/rpc)-use (literal/encoded)-v-verbose-quietwsdlurl を使用します。ツールには以下の引数が必要です。

オプション解釈

-i port-type-name

バインディングが生成される portType 要素を指定します。

-soap12

生成されたバインディングが SOAP 1.2 を使用することを指定します。

wsdlurl

portType 要素定義が含まれる WSDL ファイルのパスと名前。

このツールには、次の任意の引数があります。

オプション解釈

-b バインディング名

生成される SOAP バインディングの名前を指定します。

-soap12

生成されたバインディングが SOAP 1.2 を使用することを指定します。

-d 出力ディレクトリー

生成される WSDL ファイルを配置するディレクトリーを指定します。

-o 出力ファイル

生成される WSDL ファイルの名前を指定します。

-n SOAP ボディー namespace

スタイルが RPC の場合は、SOAP ボディーの名前空間を指定します。

-style (document/rpc)

SOAP バインディングで使用するエンコードスタイル (ドキュメントまたは RPC) を指定します。デフォルトはドキュメントです。

-use (literal/encoded)

SOAP バインディングで使用するバインディングの使用 (エンコードまたはリテラル) を指定します。デフォルトはリテラルです。

-v

ツールのバージョン番号を表示します。

-verbose

コード生成プロセス中にコメントを表示します。

-quiet

コード生成プロセス中のコメントを非表示にします。

-i port-type-name および wsdlurl 引数が必要です。-style rpc 引数を指定すると、-n soap-body-namspace 引数も必要になります。他のすべての引数は任意であり、任意の順序でリストできます。

重要

wsdl2soap は、document/encoded SOAP 1.2 バインディングの生成をサポートしません。

システムに、注文を受け取り、注文を処理するための単一の操作を提供するインターフェイスがある場合、例7.1「注文システムインターフェイス」 に示されているものと同様の WSDL フラグメントで定義されます。

例7.1 注文システムインターフェイス

<?xml version="1.0" encoding="UTF-8"?>
<definitions name="widgetOrderForm.wsdl"
    targetNamespace="http://widgetVendor.com/widgetOrderForm"
    xmlns="http://schemas.xmlsoap.org/wsdl/"
    xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
    xmlns:tns="http://widgetVendor.com/widgetOrderForm"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsd1="http://widgetVendor.com/types/widgetTypes"
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">

<message name="widgetOrder">
  <part name="numOrdered" type="xsd:int"/>
</message>
<message name="widgetOrderBill">
  <part name="price" type="xsd:float"/>
</message>
<message name="badSize">
  <part name="numInventory" type="xsd:int"/>
</message>

<portType name="orderWidgets">
  <operation name="placeWidgetOrder">
    <input message="tns:widgetOrder" name="order"/>
    <output message="tns:widgetOrderBill" name="bill"/>
    <fault message="tns:badSize" name="sizeFault"/>
  </operation>
</portType>
...
</definitions>

orderWidgets 用に生成された SOAP バインディングは 例7.2「orderWidgets の SOAP 1.2 バインディング」 に記載されています。

例7.2 orderWidgets の SOAP 1.2 バインディング

<binding name="orderWidgetsBinding" type="tns:orderWidgets">
  <soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="placeWidgetOrder">
      <soap12:operation soapAction="" style="document"/>
      <input name="order">
        <soap12:body use="literal"/>
      </input>
      <output name="bill">
        <wsoap12:body use="literal"/>
      </output>
      <fault name="sizeFault">
        <soap12:body use="literal"/>
      </fault>
  </operation>
</binding>

このバインディングは、メッセージが document/literal メッセージスタイルを使用して送信されることを指定します。