ヘッダーをスキップ

Oracle Application Server Web Services開発者ガイド
10g(10.1.3.1.0)

B31868-01
目次
目次
索引
索引

戻る 次へ

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

この付録では、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 Servicesがスキーマ検証の実行を試みると発生する場合があります。エラーの原因は、wsdl:types要素にあるスキーマ定義と、SOAPペイロードのワイヤ書式の不一致です。

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

次に示すのは、ワイヤとWSDLで要素の順序が異なっている場合の例です。デシリアライズ・コードがワイヤのParentItemIdを処理すると、スキーマからのQuantity要素とPrePick要素をスキップします。ワイヤでPrePickが検出されると、処理は失敗します。ParentItemIdの後にはこの要素は出現できません。

ワイヤ書式:

...
<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を使用してNodeListを取得する

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にマップされます。

Webサービスをトップダウン方式でアセンブルする場合、またはWebサービス・プロキシをアセンブルする場合には、WebServicesAssemblerは、xsd:choiceまたはxsd:groupのXML型を含む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を生成する方法の詳細は、「assemble」および「genWsdl」を参照してください。  

注釈付きのクラスをWebServicesAssembler assembleコマンドに対するclasspath引数でリストする必要がある

WebServicesAssemblerのassembleコマンドを使用して、注釈付きのクラスをWebサービスにアセンブルする場合は、input引数とclasspath引数の両方でクラスを指定する必要があります。注釈付きでないクラスの場合はinput引数でリストされているファイルはclasspathの一部であるとみなされるので、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でサポートされているタイプの場合のみです。

WebServicesAssemblerの使用方法

ファイル名が長いためデプロイできない

生成されたファイル名とディレクトリ名を組み合せた長さが一定のサイズ制限を超える場合は、デプロイが失敗し、エラーがスローされます。サイズ制限はオペレーティング・システムに応じて異なります。たとえば、Windowsオペレーティング・システムではサイズ制限は255文字です。

名前の長さは、WebServicesAssemblerとデプロイ・コードで制御されます。ファイル名は、WebServicesAssemblerにより、Javaクラスのメソッド名またはWSDLの操作名に基づいて生成されます。ディレクトリは、デプロイ・コードにより、コード生成時にEARおよびWARファイルの名前に基づいて作成されます。

生成されるファイル名およびディレクトリ名が長くならないようにするには、次の名前の文字数を妥当な長さに制限します。

また、J2SE 5.0 JDKの最新バージョン(jdk-1_5_0_06以降)にアップグレードすることによっても、この問題を回避できます。

WebServicesAssemblerエラーの詳細情報の取得

コマンドラインまたはAntタスクにdebug引数を指定することで、WebServicesAssemblerによって戻されるエラーに関する詳細な診断情報を取得できます。

関連項目

この引数の詳細は、「debug」を参照してください。 

WebServicesAssemblerでファイルをコンパイルできない

WebServicesAssemblerでファイルを正常にコンパイルできないと、次のようなエラーが戻されます。

java? java.io.IOException: CreateProcess: javac -encoding UTF-8 -classpath

WebServicesAssemblerでJavaファイルがコンパイルできるよう、javacコンパイラを利用できるようにする必要があります。パスにはJAVA_HOME/binを含めるようにしてください。

WebServicesAssemblerが必要なクラスを見つけられない

すべてのJ2EE 1.4アプリケーションに共通するクラスの使用が必要な場合もあります。標準J2EE 1.4クラスおよびOracleデータベース・クラスはすべて自動的に組み込まれます。Antタスクの使用時に、WebServicesAssemblerでは、これらのクラスが含まれたJARを検索する必要があります。

WebServicesAssembler Antタスクでは、wsa.jarを検索してこれらの補足的なクラスをロードしようとします。Antタスクでは、次のAntプロパティまたは環境変数をこの順序で検索します。タスクによってwsa.jarが見つからないか、プロパティが定義されていない場合は、タスクは次のプロパティを検索します。

  1. oc4j.home: OC4Jのルート・インストール・ディレクトリが指定されているAntプロパティ。このプロパティは、環境変数のかわりに使用できます。

  2. OC4J_HOME: OC4Jのルート・インストール・ディレクトリが指定されている環境変数。

  3. oracle.home: Oracle製品のルート・インストール・ディレクトリが指定されているAntプロパティ。このプロパティは、環境変数のかわりに使用できます。

  4. ORACLE_HOME: Oracle製品のルート・インストール・ディレクトリが指定されている環境変数。

Antタスクは、wsa.jarを検出すると、wsa.jarの位置をルートとして、そのマニフェスト・ファイルにリストされているすべてのクラスをロードします。

Webサービスとメッセージ部分が異なるディレクトリに生成される

意図的にWebサービスとメッセージ部分を異なるディレクトリに生成することができ、また同じことが非意図的に発生する場合もあります。そのための方法の1つは、targetNamespace引数を誤って設定することです。

targetNamespaceの値は、仕様に準拠しているHTTP URL、準拠していないHTTP URL、またはURIであってもかまいません。targetNamespaceの値は、次のようにしてパッケージ名にマップされます。

たとえば、パッケージ・パスoracle/demo/helloでWebサービスをアセンブルしているものとします。targetNamespace引数にhttp://hello.demo.oracle(非準拠URL)を設定すると、WSDLのターゲット名前空間はhttp://hello.demo.oracleになりますが、メッセージ部分はまだ名前空間oracle.demo.hello(サービス・パッケージ名から)を使用しています。このWSDLでプロキシを生成すると、サービスはhello.demo.oracleに生成され、メッセージ部分はoracle.demo.helloに生成されます。

この場合は、targetNamespace引数の値としてhttp://oracle.demo.helloを使用する必要があります。それにかわる方法としては、Javaコードがcom/oracle/demo/helloにある場合は、targetNamespace引数の値としてhttp://hello.demo.oracle.comを使用します。このようにすると、生成されるコードは意図したJavaパッケージに格納されます。

関連項目

  • 異なるURI値に対するこの引数の使用方法の詳細は、「targetNamespace」を参照してください。

  • この引数の動作の詳細は、「packageName」を参照してください。

 

要素名にマルチバイト・キャラクタが含まれるWSDLファイルを、genInterface、genProxyおよびtopDownAssembleが正しく処理できない

WSDLファイルの要素名でマルチバイト・キャラクタが使用されている場合、genInterface、genProxyおよびtopDownAssembleコマンドはWSDLファイルを正しく処理できません。コマンドはJavaソース・ファイルを生成しますが、このソース・ファイルをコンパイルすることはできません。

この制限事項を回避するには、インタフェースを生成するときに、dataBinding引数にfalseを設定します。

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

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

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

関連項目

J2EE Webサービス・クライアントのパッケージ方法の詳細は、「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プラットフォームがURIレスポンスの値として0をデシリアライズできない

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

しかし、AXISプラットフォームは、xsd:anyURIを独自のクラスorg.apache.axis.types.URIにマップしています。このため、新しいURIをインスタンス化するために0を渡すと、問題が発生する場合があります。

たとえば、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エンコード配列(soapenc:array)を、配列の配列として誤って表します。このようなクライアントが、OracleAS Web Servicesからsoapenc:arrayを含むレスポンスを受け取ると、次のようなエラーを戻します。

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を使用しないようにします。1次元の配列を使用するか、またはかわりに配列の配列を使用してください。

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

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

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

添付ファイルによるフォルトは、WebサービスをWSDLから(トップダウン方式で)アセンブルする場合にのみ、Webサービスに追加できます。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ドキュメントを編集した後、サービスを再デプロイします。

oracle-webservices.xmlファイルのJMS値を変更することで、問題を解決しないでください。このファイルの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が重複して発生する場合は、oracle-webvservices.xmlファイルで、操作に対してinputName属性とoutputName属性が指定されていることを確認してください。


戻る 次へ
Oracle
Copyright © 2006 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引