2

完全に正常に動作する Web サービス クライアントがあり、その中に WSDL の場所を定義する行があります。

@WebServiceClient(name = "CReceiveMOMessageService", 
                  targetNamespace = "http://...", 
                  wsdlLocation = "CReceiveMOMessageService.wsdl")

コード部分は実行可能な JAR としてエクスポートする必要があり、リモートの場所で動作することを意図しています。

上記のように WSDL の場所を定義すると、JAR ファイルを実行するディレクトリで WSDL ファイルが検索されます。代わりに、WSDL ファイルをプロジェクト フォルダーに追加し、その後 JAR としてエクスポートしwsdlLocation、JAR ファイル内の WSDL を指すようにパラメーターを構成します。

これはどのように達成できますか?

4

1 に答える 1

3

WSDLをJARに追加することが可能です。慣例では、WSDLをそのMETA-INF/wsdl場所のJARに配置するようです(ただし、Oracleツールが優先しているようです(たとえば、このOracleチュートリアルのポイント9をMETA-INF/wsdls参照してください)。

Oracle Enterprise Pack for Eclipseを使用したことがなく、JAR内にWSDLをパッケージ化するように指定すると、OEPE ClientGenタスクがクライアントクラスを正しく生成すると思いますが、-wsdllocation META-INF/wsdls/YourService.wsdlパラメータを渡すのと同じではないと思います。実行中wsimport.exe

wsimport.exe出力@WebServiceClient(... wsdlLocation = "META-INF/wsdls/YourService.wsdl")しますが、通常、クラスの静的初期化子で次のようなコードを生成します。

baseUrl = YourService.class.getResource(".");
url = new URL(baseUrl, "META-INF/wsdls/YourService.wsdl");

これはルートフォルダを指し、そこに提供されたWSDLパスを追加して、最終的に存在しないパスを取得します。

生成されたクラスを変更して、代わりに次のようなものを含める必要があります。

url = YourService.class.getClassLoader().getResource("META-INF/wsdls/YourService.wsdl");

これで、JAR内を指すようになります。もちろん、クライアントJARをビルドするときは、その場所にWSDLをパックする必要があります。

于 2012-07-13T20:00:25.107 に答える