0

VO を受け取り、VO に Map 型のパラメーターが含まれる Web サービスを作成しようとしています。この単純な Service を作成し、そこから Web サービスを作成しようとしました。Web サービスの作成中に、サポートされていないという例外が発生します。

 public MyVO myService(MyVO vo) {
    return vo;
}

public class VO{
  private String name;
  private Map<String, Serializable> paramsMap;  
}

私が得ているエラー:

サービス クラスを介して使用される値型のフィールドまたはプロパティに、JAX-RPC 1.1 仕様でサポートされていないデータ型 "java.util.Map" があります。この型のインスタンスは、正しくシリアル化または逆シリアル化されない場合があります。データが失われたり、Web サービスが完全に機能しなくなる可能性があります。

これの何が問題なのかわかりません。助けや回避策はありますか?

前もって感謝します。

4

1 に答える 1

1

このリンクは、JAX-RPC 1.1 および Map でサポートされているデータ型を示しています (およびそのすべてのサブクラスはサポートされていません)。

JAX-RPC 1.1 仕様、セクション 5.1.3 には次のように記載されています。

その他の標準 Java クラス (Java コレクション フレームワークのクラスなど) は、プラグ可能なシリアライザーとデシリアライザーを使用してマップされます。プラグ可能なシリアライザーとデシリアライザーの詳細については、第 15 章 (「拡張型マッピング」) を参照してください。

1 つの回避策は、パラメーターを介して渡すことができるキーと値のペア JavaBean の配列を用意することです。

例:

public final class KVPair<T> implements Serializable {
    private String key;
    private T value;

    //Getters and setters
}

そして、のマップを持つサービスがありますKVPair

service.consume(KVPair[] map);

IBM DeveloperWorksは、配列を WSDL の複合型としてマッピングする例を示しています。

于 2011-06-13T11:50:13.650 に答える