ヘッダーをスキップ
Oracle Application Server Web Servicesアドバンスト開発者ガイド
10g(10.1.3.1.0)
B31869-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

I トラブルシューティング

この付録では、Oracle Application Server Web Servicesの使用時に発生する可能性のある問題の解決策を提供します。この付録の項のタイトルは、『Oracle Application Server Web Services開発者ガイド』および『Oracle Application Server Web Servicesアドバンスト開発者ガイド』の章タイトルに対応しています。

OracleAS Web Servicesのメッセージ

配列値要素をコレクション型にシリアライズまたはデシリアライズできない

rpc-encodedのWebサービスでJavaコレクション型(java.util.Mapjava.util.Collectionまたはこれらのサブクラスなど)をパラメータ型または戻り型として使用する場合、ランタイムでは、これらのコレクション・パラメータに配列値要素を正しくシリアライズまたはデシリアライズできません。

rpc-encodedのメッセージ書式の使用時に、Java配列タイプ用にシリアライザおよびデシリアライザが登録されるようにするには、Java値タイプを作成して各Java配列を表現します。

  1. 使用するJava配列タイプごとにJava値タイプを作成します。


    注意:

    Java値タイプの名前の中には、「Array」という語を使用しないようにします。「Array」は予約済のパターンです。

    次の例は、demo/StringAry.javaファイルの内容を表現しています。ラッパー・クラスのStringAryは、JavaのString[]配列を表現しています。クラス名の接尾辞に「Ary」が使用されていることに注意してください。

    package demo;
    public class StringAry
    { public StringAry() { }
      public String[] getValue() { return m_value; }
      public void setValue(String[] value) { m_value=value; }
      private String[] m_value;
    }
    
  2. すべての値タイプ用に、適切なシリアライザおよびデシリアライザが登録されるようにします。

    それには、Webサービスのアセンブルの際にvalueType引数を使用します。次の例では、この引数に、ステップ1で作成されたdemo/StringAry.javaファイルを指定しています。

    java wsa.jar -assemble -valueType demo.StringAry ...
    
  3. コレクション型パラメータにおける配列値要素の設定および取得用に定義した値タイプを使用します。

    たとえば、次のクラス定義があるとします。

    package demo;
    public class Service extends java.rmi.Remote
    { java.util.Map getMap(String input)throws java.rmi.RemoteException
      { ... }
    }
    

    次のコードを記述して、配列値要素の1つとしてString[]値をマップに戻すことができます。

    HashMap map = new HashMap();
    String[] str_array = new String[]{"a","b","c"};
    StringAry sa = new StringAry();
    sa.setValue(str_array);
    map.put("myArray", sa);
    return map;
    

多次元配列を使用するWebサービスの公開時にエラーが発生した

多次元配列を使用するWebサービスを公開しようとするとエラーが発生します。たとえば、入力または戻り引数として多次元配列を取るメソッドがあるJavaクラスを公開しようとすると、エラーが戻されることがあります。

この問題の解決策としては次の2つが考えられます。

配列の次元ごとのJavaBeanの作成: 配列の各次元をJava値タイプにラップして制限を回避できます。


注意:

Java値タイプの名前の中には、「Array」という語を使用しないようにします。「Array」は予約済のパターンです。

次の例では、public static class StringAryにより、文字列の内部配列をラップしています。public StringAry[]により、内部配列の配列を表現しています。すなわち、String Java値タイプの配列を含んでいます。このコード・サンプル内で接尾辞「Ary」が使用されていることに注意してください。

package demo;
public interface SampleItf extends java.rmi.Remote

 // wrap the inner array as a Java value type
{ public static class StringAry
  { public StringAry() { }
    public String[] getValue() { return m_value; }
    public void setValue(String[] value) { m_value=value; }
    private String[] m_value;
  }

  // create an  array of the inner array elements
  public StringAry[] echoString2(StringAry[] input)
        throws java.rmi.RemoteException;
}

次のSampleクラスで示されているのは、String Java値タイプのStringAry[]配列を公開する方法です。

package demo;
public class Sample implements java.rmi.Remote, SampleItf
{ public SampleItf.StringAry[] echoString2(SampleItf.StringAry[] input)
         throws java.rmi.RemoteException
  { return input; }
}

rpc-encodedスタイルを使用してWebサービスを公開する方法: rpc-encodedスタイルを使用して、多次元配列を使用するWebサービスを公開できます。次に例を示します。

package demo;
public interface SampleItf extends java.rmi.Remote
{ public String[][] echoString2(String[][] input)
         throws java.rmi.RemoteException;
}

package demo;
public class Sample implements java.rmi.Remote, SampleItf
{ public String[][] echoString2(String[][] input)
         throws java.rmi.RemoteException
  { return input; }
}

レスポンスまたはリクエストの処理中にデシリアライズ・エラーが発生した

デシリアライズの手順実行中にOracleAS Webサービスでスキーマ検証を実行しようとすると、このエラーが発生します。wsdl:types要素に存在するスキーマ定義とワイヤ書式のSOAPペイロードの書式の間の不一致が、エラーの原因です。

クライアント・プロキシをgenProxyでアセンブルし、サーバーからのレスポンスをデシリアライズしようとすると、このエラーが発生します。サーバーでリクエストをデシリアライズしようとすると発生します。

次の例に、ワイヤ書式とWSDLの間の要素の順序の不一致を示します。デシリアライズ・コードがワイヤ書式でParentItemIdを処理する場合、スキーマでQuantityおよびPrePick要素をスキップします。ワイヤ書式のPrePickParentItemIdの後に予期されていない要素のため、処理に失敗します。

ワイヤ書式

...
<ListOfProduct>
 <Product>
   <ParentItemId></ParentItemId>
   <PrePick>Y</PrePick>
   <Quantity>1</Quantity>
...

WSDL定義

...
<xsd:complexType name="Product">
  <xsd:sequence>
    <xsd:element name="Quantity" maxOccurs="1" minOccurs="0"
                 type="xsd:string"></xsd:element>
    <xsd:element name="PrePick" maxOccurs="1" minOccurs="0"
                 type="xsdLocal11:string1"></xsd:element>
   <xsd:element name="ParentItemId" maxOccurs="1" minOccurs="0"
                type="xsdLocal11:string30"></xsd:element>
...

次に、この状況でスローされる可能性があるデシリアライズ・エラーの例を示します。

unexpected element name:
expected={http://myCompany.com/Catalog/Data/CategoryProduct}Description,
actual={http://myCompany.com/Catalog/Data/CategoryProduct}PrePick.
at oracle.j2ee.ws.common.util.exception.JAXRPCExceptionBase.<init>(JAXRPCExceptio nBase.java:93)
at oracle.j2ee.ws.common.util.exception.JAXRPCExceptionBase.<init>(JAXRPCExceptio nBase.java:111)
at oracle.j2ee.ws.common.encoding.DeserializationException.<init>(Deserialization Exception.java:54)
at com.myCompany.catalog.data.categoryproduct.runtime.Product_LiteralSerializer.doDeserialize(Product_Literal Serializer.java:471).

このエラーを回避するには、次の方法が考えられます。

rpc-encoded書式とデータ・バインディングに対する制限

OracleAS Web Servicesは、rpc-encodedメッセージ書式とdatabinding=falseの組合せはサポートしていません。この組合せは業界内ではベスト・プラクティスとみなされていないためです。

document-encodedメッセージ書式が、OracleAS Web Servicesによってサポートされない

style="document"use="encoded"の組合せは、SOAP仕様では有効でも、OracleAS Web Servicesなど、主要なWebサービスのプラットフォームではサポートされていません。

document-literal bareメッセージ書式が1つの入力部分に限定されている

OracleAS Web Servicesでは、bareの場合の入力として1つの部分のみがサポートされています。その他の入力パラメータはすべてSOAPヘッダー部分にマップする必要があります。

BigDecimal値のシリアライズにより端数処理エラーが発生することがある

java.Math.BigDecimalで利用できるいくつかのコンストラクタがあります。これらのコンストラクタは、次の値タイプを入力として取れます。

BigDecimal(double)コンストラクタを使用する際は十分注意してください。計算に端数処理エラーが入り込むことがあります。かわりに、intまたはStringベースのコンストラクタを使用してください。

たとえば、値123.45を取る次の文を考えてみます。

...
double d = 1234.45;
System.out.println(d);
System.out.println(new BigDecimal(d));
...

これらの文により次の出力が生成されます。第2の値は予期した値ではありません。

1234.45
1234.450000000000045474735088646411895751953125

getChildNodeではなくgetFirstChildとgetNextSiblingを使用して、NodeListsを取得する

node.getChildNodeを使用して取得したNodeListに対して反復処理を行うと、パフォーマンスが低下する場合があります。NodeListが非常に長い場合にのみ、著しく低下します。

node.getChildNodeで取得したNodeListを使用するかわりに、現行のOracle XDK実装では、node.getFirstChildを使用し、node.getNextSiblingでループすることにより、子ノードのリストのナビゲートに対する最適化を提供しています。次に、この方法のコードのサンプルを示します。

Node n = ...;
if (n.hasChildNodes()) {
   for(Node nd=n.getFirstChild(); nd!=null; nd=nd.getNextSibling()){
         nd.getValue(); // do something with nd
      }
}

WSDLからのWebサービスのアセンブル

document-literalメッセージ書式に関する制限

document-literalメッセージ書式を使用するWebサービスをトップダウン方式でアセンブルしようとすると、WebServicesAssemblerにより、同じ入力メッセージを使用する操作がWSDLで2つ以上検出された場合、警告が戻されます。OC4Jランタイムが、どのメソッドを起動するのかを識別できなくなるためです。

たとえば、次のWSDLフラグメントではWebServicesAssemblerにより警告が戻されます。このフラグメントでは、addRelationshipおよびaddRelationship3の操作が定義されています。これらの各操作でaddRelationshipRequest入力メッセージが使用されています。

...
<operation name="addRelationship">
     <input name="addRelationship1Request"
message="tns:addRelationship1Request"/>
            <output name="addRelationship1Response"
message="tns:addRelationship1Response"/>
        </operation>
         <operation name="addRelationship3">
            <input name="addRelationship1Request"
message="tns:addRelationship1Request"/>
            <output name="addRelationship1Response"
message="tns:addRelationship1Response"/>
        </operation>
...

クライアントからaddRelationship操作を起動する場合は、実装クラス内で操作が使用される順序に応じて、addRelationshipまたはaddRelationship3が起動されます。

スキーマ機能の制限事項

SOAPElementにマッピングされるスキーマ機能

次のいずれかのスキーマ機能をWSDLで処理すると、それらはSOAPElementにマッピングされます。

  • 複数のxsd:any要素のあるモデル・グループ

  • xsd:choice要素

  • 混合コンテンツ

  • 置換グループ

  • 複数のxsd:any属性のある型

トップダウン方式でWebサービスをアセンブル、またはWebサービス・プロキシをアセンブルする場合、WebServicesAssemblerはxsd:choiceまたはxsd:groupXML型を含むWSDLを使用できません。これらのXML型を含むWSDLを使用する場合は、WebServicesAssemblerのdataBinding引数をfalseに設定し、ペイロードがWSDLファイルのスキーマ定義に準拠するようにSOAPElementをコーディングします。

rpc-encodedで属性の複合型がサポートされない

スキーマにrpc-encodedメッセージ書式によるバインディングが含まれ、WebServicesAssemblerによって属性でcomplexTypeを検出すると、サポートされない型が検出されたというエラー・メッセージがスローされます。

JavaクラスからのWebサービスのアセンブル

ステートフルWebサービスに対する制限事項

OracleAS Web Servicesにより、ステートフルWebサービスは、Javaクラスをベースにしたサービスに対してのみサポートされます。これらのサービスは、Oracle独自の拡張機能を含んでおり、同じセマンティクスを持つスコープを用意したサービス・プロバイダとのみ相互運用可能ですので、注意してください。

OracleAS Web ServicesによるステートフルWebサービスのサポートは、HTTPをベースにしています。ステートフルWebサービスは、SOAP/HTTPエンドポイントに対してのみ機能し、SOAP/JMSエンドポイントに対しては機能しません。

JavaクラスからのWebサービスのアセンブル: リリース10.1.3.1と10.1.2の相違点

Oracle Webサービスのリリース10.1.2(およびそれ以前)とリリース10.1.3.1には次のような相違点があります。

EJBからのWebサービスのアセンブル

EJBに対するトランザクション境界(デマーケーション)の設定

Webサービスとして公開するEJBでは、そのトランザクション境界(デマーケーション)としてTX_REQUIREDまたはTX_MANDATORYを設定しないでください。

JMS宛先を使用したWebサービスのアセンブル

サポートされているメッセージ・ペイロード・タイプ

JMSエンドポイントWebサービスの場合、OracleAS Web Servicesでは、JMSメッセージのペイロードとして、java.lang.Stringまたはjavax.xml.soap.SOAPElementのインスタンスのみがサポートされています。

SOAPメッセージ・ヘッダーのJMSプロパティ

SOAPヘッダーによって送信できるJMSプロパティ数はごく限られています。genJmsPropertyHeader引数の値がtrueの場合(デフォルト)は、次のJMSプロパティをSOAPヘッダーによって送信できます。

データベース・リソースからのWebサービスの開発

データ型の制限

10.1.3.1とそれより前のリリースの間でのデータベースWebサービスの相違点

リリース9.0.4または10.1.2で生成されたデータベースWebサービス用に記述されたWebサービス・クライアントは、リリース10.1.3.1でボトムアップ方式で生成されたデータベースWebサービスで使用しようとすると、失敗します。PL/SQLの構造に変更がなくても同様です。

この理由の1つは、SQLコレクション型がリリース9.0.4および10.1.2では単一の配列プロパティを持つ複合型にマップされていたためです。リリース10.1.3.1では、かわりに配列に直接マップされます。

Webサービス・クライアントを再生成する場合は、クライアント・コードを記述しなおす必要があります。これは、再生成されるコードでは現在、BeanWrappingArrayではなくarray[]が使用されるためです。

注釈を使用したWebサービスのアセンブル

サポートされていないWebサービス・メタデータ機能

Web Services Metadata for the Java Platform仕様には、OracleAS Web Servicesでサポートされていない部分があります。たとえば、Java Architecture for XML Binding(JAXB)仕様の2.2.2および2.2.3項で定義されている「Start With WSDL」モードおよび「Start With WSDL and Java」モードは、OracleAS Web Servicesではサポートされていません。OracleAS Web Servicesでサポートされているのは「Start With Java」モードのみです。

WebServicesAssemblerコマンドのassembleまたはgenWsdlを使用して、J2SE 5.0 Webサービス注釈準拠の注釈を付けて使用するWSDLを生成する場合、これらのコマンドは、注釈を含まないファイルの処理での使用時とは別の方法で指定する必要があります。


関連資料:

これらのコマンドを使用してJ2SE 5.0 Webサービス注釈準拠の注釈を付けて使用するWSDLを生成する方法の詳細は、『Oracle Application Server Web Services開発者ガイド』の「WebServicesAssemblerの使用方法」の章の「assemble」および「genWsdl」を参照してください。


注釈付きクラスをWebServicesAssemblerアセンブル・コマンドのclasspath引数にリストする必要がある

WebServicesAssemblerのassembleコマンドを使用して注釈付きクラスをWebサービスにアセンブルする場合、クラスをinput引数およびclasspath引数の両方に指定する必要があります。input引数にリストされるファイルは注釈付ではないクラスのクラスパスの部分とされるため、classpathは必要ではありません。

REST Webサービスのアセンブル

REST Webサービスのサポートに関する制限事項

次のリストは、OracleAS Web ServicesによるREST Webサービスのサポートにおける制限事項です。

Webサービス・デプロイのテスト

Webサービス・テスト・ページには、次の制限事項があります。

J2EE Webサービス・クライアントのアセンブル

クライアント・アプリケーションとスレッド使用量

クライアント・アプリケーションが処理(たとえば、別個のスレッドを使用する非同期コールを有効にする場合)用に独自のスレッドを作成する場合、アプリケーション・サーバーを-userThreadsオプションで起動する必要があります。

java -jar oc4j.jar -userThreads

-userThreadsオプションを使用すると、ユーザー作成スレッドからのコンテキストのルックアップとクラスのロードができるようになります。

JAX-RPCハンドラの概要

WebServicesAssemblerでは、JAX-RPCメッセージ・ハンドラを構成するためのAntタスクが提供されます。ハンドラは、WebServicesAssemblerコマンドラインを使用して構成することはできません。

SOAPヘッダーの処理

強い型指定とServiceLifecycleインタフェース

ServiceLifecycleインタフェースを使用すると、WSDLファイルに宣言されていない可能性のあるSOAPヘッダー・ブロックにアクセスできますが、ブロックには強い型指定が行われません。SOAPヘッダーのXML構造を処理するには、その理解も必要です。SOAPヘッダー・ブロックに対して強い型指定を行うには、WebServicesAssemblerのmapHeadersToParameters引数をtrueに設定するようにしてください(trueがデフォルト値です)。これが可能なのは、SOAPヘッダーがWSDLファイルに宣言されており、SOAPヘッダーのタイプがJAX-RPCでサポートされているタイプの場合のみです。

Webサービスのパッケージ化およびデプロイ

J2EEクライアントのパッケージ化

現行のツール・セットではJ2EE Webサービス・クライアントをパッケージできません。クライアントは手動でパッケージ化する必要があります。


関連資料:

J2EE Webサービス・クライアントのパッケージ化方法の詳細は、『Oracle Application Server Web Services開発者ガイド』の「J2EEクライアントのパッケージ化」を参照してください。


WSDLに複数のHTTPポートがある場合の、正しいエンドポイント・アドレスの取得

oracle-webservices.xml<web-site>または<wsdl-publish-location>要素に値を入力する場合、戻されたWSDLに複数のHTTPポートがあるときは、そのWSDLには正しいエンドポイント・アドレスが含まれていない可能性があります。

WebServicesAssemblerツールでは、作成するoracle-webservices.xmlファイルには、<web-site>または<wsdl-publish-location>要素を挿入しません。これらの要素は手動で挿入する必要があります。

生成されたクライアントおよびサービス・クラスが同じEARファイルに表示されると、OWS-04005エラーが戻される

クライアントおよびWebサービス・クラスを同じディレクトリに生成すると、WebServicesAssemblerがクライアント・クラスをWebサービスEARファイルにパッケージする場合があります。EARファイルをサーバーにデプロイする場合、OracleAS Web ServicesのOWS-04005エラーでデプロイに失敗します。

OWS-04005 ポートでエラーが発生しました: ...

たとえば、Application Server Controlを使用して、生成されたクライアント・クラスを含むEARファイルをデプロイすると、次に示すエラーと同様のエラーを戻す可能性があります。

ERROR OWS-04005 An error occurred for port: {http://ws.myservice.org/}HttpSoap11: no serializer is registered 
for (class org.myservice.ws.MyWebService_sayHello_ResponseStruct, {http://ws.myservice.org/}sayHelloResponse)

このサービスをWebサービス・テスト・ページで起動する場合、ページは診断メッセージで応答します。たとえば、次に示すメッセージと同様の応答メッセージがテスト・ページに表示されます。

<env:Envelope  xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header/>
<env:Body>
 <env:Fault
   xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
  <faultcode>env:Server</faultcode>
  <faultstring>no serializer is registered for (class org.rajkovic.ws.MyWebService_sayHello_ResponseStruct, 
  {http://ws.myService.org/}sayHelloResponse)</faultstring>
  <faultactor/>
 </env:Fault>
</env:Body>
</env:Envelope>

この問題を回避するには、使用するクライアントおよびWebサービス・クラスを別々のディレクトリに生成します。

相互運用可能なWebサービスの実現

WebServicesAssemblerによって生成される名前の先行アンダースコア

WebServicesAssemblerツールのデフォルト動作は、Javaパッケージ名から名前空間を生成することです。Javaパッケージ名が先行アンダースコア(「_」)で始まる場合は、生成される名前空間のURIにはアンダースコアが含まれます。.NET WSDLツールの一部のバージョンでは、生成された名前空間が有効であっても、それらの名前空間を消費できないことがあります。

この.NETの問題を回避するには、WebServicesAssemblerの引数targetNamespaceまたはmappingFileName(あるいはその両方)を使用して、デフォルトでパッケージによって導出される名前空間を回避します。

AXISプラットフォームで「0」をURI応答の値にデシリアライズできない

JAX-RPC仕様によると、xsd:anyURI型は、J2SE 1.4以降での実行を前提とするアプリケーションでjava.net.URIクラスにマッピングする必要があります。1.4より前の環境との互換性のため、JAX-RPC実装では、この型をjava.lang.Stringにマッピングできます。

ただし、AXISプラットフォームでは、xsd:anyURIは独自クラスorg.apache.axis.types.URIにマッピングされます。このため、「0」を渡して新しいURIを初期化すると、問題が発生します。

たとえば、AXISプラットフォームで値「0」を次のコードのサンプルで使用する場合、URIパーサーはポートに「0」を割り当て、インスタンス化のためにコンストラクタをコールします。

    java.net.URIret = new java.net.URI("0"); // <wsdl:part
    name="inUri" type="xsd:anyURI"/>
    return ret;

この状況が、AXISプラットフォームのsetPortメソッドが次に示すようなエラーをスローする原因になります。

org.apache.axis.types.URI$MalformedURIException: Port cannot be set when host is null!

これを回避するには、AXISプラットフォームでxsd:anyURIではなくxsd:stringを使用します。

.NETクライアントで、OracleAS Web Servicesからのマルチディメンションsoapenc:arrayレスポンスをデシリアライズできない

.NETクライアントでは、マルチディメンションのSOAP-encoded配列(soapenc:array)は配列の配列として正しく表現されません。このクライアントは、soapenc:arrayを含むOracleAS Web Servicesからレスポンスを受け取ると、次のようなエラーを戻します。

Unhandled Exception: System.InvalidOperationException: There is an error in XML document (2, 713). 
---> System.ArgumentException: SOAP-ENC:arrayType with multdimensional array found at <ArrayOfArrayOf_xsd_anyType  xmlns='http://tips.cf'>.

.NETクライアントのこの制限を回避するには、.NETとの相互運用性が必要な場合、マルチディメンションのsoapenc:arrayを使用しないようにします。かわりに、配列を単次元のみで使用、または配列の配列を使用します。

メッセージ添付ファイルの処理

swaRef添付ファイルによるフォルトのWebサービスへの追加

OracleAS Web Servicesでは、SOAP障害メッセージに追加できるのはswaRef MIMEタイプ添付ファイルのみです。SWAタイプ添付ファイルの追加はサポートされていません。

添付ファイル付きの障害をWebサービスに追加できるのは、WebサービスをWSDLから(トップダウン方式で)アセンブルする場合にのみです。Webサービスをボトムアップ方式でアセンブルする場合は追加できません。

添付ファイル用にサポートされているメッセージ書式

rpc-literalおよびdocument-literalのWebサービスのみが、WS-I Attachments Profile 1.0によってサポートされています。したがって、これらのタイプのサービスのみがswaRef MIMEタイプを使用できます。

rpc-encodedメッセージ書式を指定すると、WebServicesAssemblerでは、swaRef MIME添付ファイルを渡せるWebサービスをアセンブルできなくなります。このようなサービスをアセンブルするには、別の書式を選択する必要があります。

Webサービスの管理

Application Server Controlに関する制限事項

Application Server Controlでは、wsmgmt.xmlファイルに指定可能な内容をすべて変更できるわけではありません。たとえば、信頼性の構成に関する部分は変更できません。

Webサービスの信頼性の確保

OracleAS Web Servicesの信頼性に関する制限事項

メッセージの監査およびロギング

xpath問合せに関する制限事項

xpath問合せではプリミティブ型を戻す必要があります。つまり、この問合せではテキスト・ノードまたはまたは属性値のコンテキストを戻す必要があります。

xpath問合せによって戻されるプリミティブ型には、少ない文字数を設定する必要があります。たとえば、120文字を超えないようにします。

Java値タイプのカスタム・シリアライズ

この項では、標準外のデータ型のカスタム・シリアライズに関する制限事項について説明します。

use="literal"

このリリースでは、メッセージ書式のuse部分としては、literalのみがサポートされています。literalには、rpc-literalとdocument-literalがあります。このリリースでは、rpc-encodedはサポートされていません。

オブジェクト・グラフ

このリリースではrpc-encodedがサポートされていないため、シリアライズおよびデシリアライズのこの初期サポートでは、hrefを使用したオブジェクト・グラフのマーシャリングはできません。Javaオブジェクトがリクエストのパラメータまたはレスポンスの戻り値の中に複数の参照を持つ場合は、シリアライズおよびデシリアライズを行うと、オブジェクト・グラフが保持されなくなる可能性があります。

WSDLレベルおよびサービス・レベルでの構成

SoapElementSerializerは、サービスまたはWSDLごとに構成します。たとえば、dateTimeoracle.sql.DATE間のマッピングを表すSoapElementSerializer実装は、dateTimejava.util.Calendar間のデフォルト・マッピングに取って代わるように構成できます。この構成では、マッピングのすべてのインスタンスが置換されます。各操作レベルまたは各メッセージ・レベルでの構成は、このリリースではサポートされていません。

サブツリーのシリアライズ

各カスタム・シリアライザではXMLサブツリー全体を取得し、XML要素オブジェクト・モデル全体のシリアライズおよびデシリアライズを実行します。たとえば、2つのトップレベルcomplexTypes用に開発および構成された2つのカスタム・シリアライザTypeAおよびTypeBがあるとします。TypeAには、TypeBサブ要素があります。カスタム・シリアライザがTypeB用に構成されているが、TypeBサブ要素がTypeAのカスタム・シリアライザ内でシリアライズされる場合は、OC4JランタイムはTypeBのカスタム・シリアライザを自動的には起動することができません。TypeAのカスタム・シリアライザが、TypeBサブ要素も処理する必要があります。TypeAのカスタム・シリアライザからTypeBのカスタム・シリアライザをコールすることは可能ですが、これは実装計画次第です。

document-literalラッパー

カスタム・シリアライザを使用してグローバルcomplexTypeを処理するとします。この型はグローバル要素によって参照され、document-literal操作の単一部分を定義します。unwrapParameters引数を使用して戻り型とレスポンス・タイプをアンラップする場合は、前述のグローバル型は、入力メッセージのボディ部分としてグローバル要素を使用する操作で無視されます。

Webサービス・トランスポートとしてのJMSの使用方法

トランスポート・メカニズムとしてJMSを使用する場合のメッセージの相互運用性

トランスポート・メカニズムとしてJMSを有効にするWSDL拡張機能は、Oracle独自のものです。このWebサービスによって生成されるメッセージは、他のベンダーによって提供されるアプリケーションまたはサービスと相互運用できないことがあります。

JMS Webサービス・トランスポートからのクライアント・レスポンスの取得

クライアント・プロセスがレスポンスや後続の戻り値を受け取ることなく無効になった場合に、クライアント・プロセスがその古いレスポンスをキューから取得する機能は用意されていません。

JMSプロパティの変更

Webサービスのデプロイ後に、使用するJMSバインディングのプロパティを変更する場合、WSDLドキュメントを手動で編集し、JMSアドレス(<jms:address>)およびJMSプロパティ要素(<jms:propertyValue>)に正しい値を入力する必要があります。WSDLドキュメントを編集した後に、サービスを再デプロイします。

問題を解決するために、JMS値をoracle-webservices.xmlファイルで編集しないでください。このファイルのJMSの部分は、サービスを再デプロイする際に再ロードされません。oracle-webservices.xmlファイルを使用して問題を解決する場合は、WebServicesAssemblerを使用してサービスを再生成してください。


関連資料:

JMSアドレスおよびJMSプロパティ値のWSDL要素の詳細は、『Oracle Application Server Web Servicesアドバンスト開発者ガイド』の「JMSトランスポートのWSDL拡張」を参照してください。


Webサービス起動フレームワークの使用方法

この項では、OracleAS Web ServicesによるWebサービス起動フレームワーク(WSIF)のサポートに関する制限事項について説明します。

Webサービス・プロバイダの使用方法

Webサービス・プロバイダ操作に対してMBeanが重複して表示される

動的プロバイダ・エンドポイントを使用していて、Application Server Controlの操作に対してMBeanが重複して表示される場合、inputName属性およびoutputName属性がoracle-webvservices.xmlファイルの操作に対して指定されていることを確認してください。