0

JBoss 5.1.0GA を使用して WebService とそのクライアントを開発しています。JBossWs スタックは、ダウンロードしたバイナリで既にプリインストールされており、私の理解では、JBossWs 3.1.2GA です。

このセットアップを使用して Web サービスを開発し、クライアントも正常に作成しました。これは私が持っているものです。

war ファイルとしてデプロイされた pojo Web サービス。

@WebService
public class Service{
    @WebMethod
    public CompleObj getConfiguration() {
        CompleObj oConf = new CompleObj ();
        for (int i = 0; i < 10; i++) {
            NestObj oInst = new BOpRepoInstance("Val1", "Val2", "Val3", "Val4");
            oConf.addRepoInstance(oInst);
        }
        return oConf;
    }
}

ここ、

CompleObj => は、NestObj 型のリストを持つ複合オブジェクトです。そのゲッター/セッター、toString、およびその他のメソッド。

NextObj => は String 型の変数を 4 つ持っています。そのゲッター/セッター、toString、hashCode、equals、およびその他のメソッド。

この Web サービスを正常にデプロイしました。

その後、Eclipse ウィザードを使用してクライアントを作成し、WSDL ドキュメントを使用して Web サービス クライアントを生成しました。また、Web サービスを呼び出して戻り値を取得するサンプル クライアント ファイルも作成しました。これも魅力のように機能しました。

今私の問題は、Eclipseがクライアント用のスタブを生成したときに、CompleObjとNestObjのクラスを作成したことです。これらのクラスには、変数とそのゲッター/セッターしかありません (これらは WSDL ドキュメントから生成されているため、これは理にかなっています)。したがって、クライアント側でも使用したいtoString、hasCode、equalsなどを含む他の多くのメソッドを失います。

WebService プロジェクトで定義された実際のクラス ファイルを直接利用し、クライアントが生成されたファイルを使用しないようにするにはどうすればよいでしょうか。クラス ファイルをクライアント プロジェクトの .jar バイナリとして提供できますが、これを実現する方法がわかりません。

もう 1 つの質問は、Web サービスの場所がスタブに直接埋め込まれていることです。Web サービスの場所を引数の一部として呼び出しコードに渡すにはどうすればよいですか?

4

1 に答える 1

0
  1. クライアント側で生成されるクラスは単なるプレースホルダーであり、独自のクラスのデシリアライズされたバージョンではありません。サービスを呼び出すと、オブジェクトをサーバーに運ぶために使用され、JBOOSWS は実際のクラスへの JAXB マッピングを行います。そのため、同じように見えても、クライアント側で使用する独自のクラスを作成することはできません。

  2. URL はスタブ コードで固定されます。Eclipse で WS クライアントを生成するときに最初に指定する必要があるのは WSDL URL であり、次に Eclipse はそれに応じてクライアント コードを生成するため、生成されたコードは指定した WSDL に固有です。WSDL を動的に渡す場合は、WSDLtoJAVA またはその他のユーティリティを使用して、渡された WSDL URL によってクライアント スタブを生成する独自のコードが必要です。

于 2012-07-04T09:26:42.657 に答える