2

Eclipseを使用して、既存のWSDLから(クライアントではなく)WebLogicWebサービスを自動的に作成しています。3つの要求パラメーター(String、String、byte [])を受け取り、1つのパラメーター(byte [])で応答します。ただし、自動生成されたクラスには、次のエラーを生成するコードが含まれています。

エンドポイントインターフェイスメソッド「publicbyte[]sign(java.lang.String、java.lang.String、byte [])」をWebサービスに実装する必要があります。

しかし、signメソッドは明らかにコードに存在します。

そこで、Webサービスの自動生成をテストするために、非常に単純なWSDLを作成してみました。今回、WSDLは2つの要求パラメーター(int、int)と1つの応答(int)を定義しました。

今回はエラーは表示されず、正常に機能しました。

私が使用しているツール

  • Eclipse-3.7.1
  • Oracle Enterprise Pack for Eclipse 11.1.1.8.0
  • Oracle WebLogic Server 11gR1(10.3.6)
  • OracleJAX-WS2.1.5によって実行されるクラスの自動生成
  • Windows 7-32ビット、1.6 JDK / JRE

エラーを再現する手順:

  1. Eclipseを起動します
  2. ファイル→新規→Webサービスプロジェクト
  3. このWSDLをWEB-INF/wsdlディレクトリにインポートします。
  4. WSDLファイル名を右クリックし、[WebLogicWebサービス]→[Webサービスの生成]をクリックします。
  5. 生成されたdss_DSSPortImplクラスファイルのエラーに注意してください。

このWSDLを使用して上記の手順を繰り返すと、生成されたクラスファイルは正常に機能します。

どんな助けでも本当にありがたいです。ありがとう!


(プライバシー上の理由から、WSDLファイルの名前空間は私のテストから変更されました。)

4

1 に答える 1

1

現在ラップトップにOEPEがインストールされていないため、正確な手順を再現できませんが、これは役立つ場合があります。

問題の wsdl を注意深く見ると、SignResponse に「署名」と「ステータス」という 2 つの要素があることがわかります。応答メッセージには複数の要素が含まれているため、wsimport はメソッド シグネチャの一部として出力パラメーターごとに 1 つの Holder 引数を生成し、各引数を返すバケットを提供します。問題の wsdl に対して直接 wsimport を実行すると、サービス インターフェイス (Adapter.java) で次の (予想される) 署名が得られます。

public void sign(
    @WebParam(name = "userId", targetNamespace = "")
    String userId,
    @WebParam(name = "fileType", targetNamespace = "")
    String fileType,
    @WebParam(name = "fileContent", targetNamespace = "")
    byte[] fileContent,
    @WebParam(name = "signature", targetNamespace = "", mode = WebParam.Mode.OUT)
    Holder<byte[]> signature,
    @WebParam(name = "status", targetNamespace = "", mode = WebParam.Mode.OUT)
    Holder<String> status);

wsimport を介して最初の wsdl に対してスタブを生成すると (この方法での生成が WLS に適切にデプロイされることはわかっています。これが私の典型的な方法であり、WebLogic がデプロイ環境であるためです)。

于 2012-05-08T04:15:26.407 に答える