1

クラスパスに問題があります。Web サービスである Web アプリケーションがあります。JaxB と CXF を使用します。Web サービスには、Web サービス クライアントである別の JAR の依存関係があります。wsdl2java プラグインを使用して、クライアント コードとサービス コードの両方が生成されるようになりました。問題は次のようになります。

Parent WebService WAR
--PackageA
  --ClassB
Dependency Jar
--PackageA
  --ClassB

したがって、両方とも同じパッケージと同じクラス名を持ち、これらはプラグインによって生成されるため、パッケージの 1 つをリファクタリングして同一にならないようにすることが難しくなります。WebService はクライアントを呼び出し、クライアント コードでは、Web サービス クライアント Jar からの classB ではなく、Web サービスからの親 classB を初期化します。この ClassB の唯一の問題は、differnet パラメータを受け取る 1 つのメソッドがあることです。あるクラス B ではそれが必要ですDateが、別の classB ではそれが必要XmlGregorianCalendarです。そのため、クライアントを呼び出しているときに、nosuchmethodexception が発生します。

これが私がこれまでに試したことです。

1: クライアント jar で、ClassB を初期化するために完全なパッケージとクラス名を指定しようとしました

2: クライアント jar で、Spring Bean を使用してクラスをワイヤリングしようとしましたが、驚くべきことに、クライアントではなく webService からクラスをワイヤリングしています。

3: Web サービス ClassB で、正しいパラメーターを取る同じメソッドを追加してみました。これは部分的に機能しますが、別の例外が発生し、良くありません。

あなたの助けを楽しみにしています。ありがとう!

次のようにuser2880879の提案に従って wsdl からクラスを生成するときに、追加の引数を wsdl2java プラグインに渡すことで問題を解決しました。

<extraarg>-p</extraarg>
<extraarg>http://www.example.com=mypackagename</extraarg>  
4

1 に答える 1

1

トップダウンアプローチを使用してWebサービスを作成していると思います。つまり、最初にjaxwsアノテーションを使用してJavaクラスを作成し、次にcxf mavenプラグインまたはantを使用してwsdlを作成し、このwsdlを使用してクライアントを作成しますか?

このアプローチに従っている場合は、Web サービス クライアント コードを生成するときにバインディング ファイルを提供できます。バインディングファイルとは何か、書き方はこちら。

このバインディング ファイルでは、クライアント コード用に変更するパッケージ名を指定できます。

于 2013-10-16T00:55:00.920 に答える