1

Web サービスを作成するために、Apache CXF コード ファースト アプローチを使用しています。ユーザー資格情報を渡すためのカスタム SOAP ヘッダーがあります。

@webparam アノテーションを使用して、SEI で usercredentials を渡そうとしています。

これらは Service クラスの 2 つの操作です。

@Path("/item/{id}")
@GET
public Item getItem(@PathParam("id") String id,
 @WebParam(name="userDetails", header=true, mode=Mode.IN) UserDetails details) throws NotFoundException;

@Path("/name/{id}")
@GET
public Item getItemByName(@PathParam("id") String id,
 @WebParam(name="userDetails", header=true, mode=Mode.IN) UserDetails details) throws NotFoundException;

wsdlの生成中に発音すると、次のエラーがスローされます

D:\workspace\myService\src\main\java\com\ws\api\ItemPublicationWebService.java:52: [xml] Web メソッドは、定義された Web メッセージ パーツの名前と同じ「userDetails」という名前のメッセージ パーツを定義しますD:\workspace\myService\src\main\java\com\ws\api\ItemPublicationWebService.java:41 にあります。注釈を使用して曖昧さをなくしてください。

webParam の名前を一意に保つと、wsdl が生成されることがわかりました。しかし、それは期待される結果ではありません。

ここで何が欠けていますか?

4

1 に答える 1

0

ここで Enunciate が行っていることは、Web サービス API 用に、きれいで統合された WSDL を作成しようとしていることです。Enunciate は、コンパイル時に機能し、WSDL が参照できる単一の統合 XML スキーマ ファイルにすべてのヘッダー要素をグループ化しようとするため、他の WSDL ジェネレーターとは異なります。(他の WSDL ジェネレーターは実行時に動作するため、必要に応じてオンザフライでスキーマを生成できますが、XML 要素などの重複が多数あります。)

したがって、Enunciate が「getItem」メソッドに到達すると、「userDetails」という名前のヘッダー要素を確認し、その XML 要素を生成中の XML スキーマ ドキュメントに追加します。次に、Enunciate は「getItemByName」メソッドに遭遇し、「userDetails」という名前の別のヘッダー要素があることを確認しますが、それらが同じ要素であることを確認するほどスマートではありません。そのため、競合があると考えて、エラーをスローします。

JIRA の問題を記録しました:

http://jira.codehaus.org/browse/ENUNCIATE-453

今のところ、Enunciate で WSDL を生成することに関心がない場合は、'xml' Enunciate モジュールを無効にすることができます。

<enunciate...>
  ...
  <modules>
    <xml disabled="true"/>
  </modules>
</enunciate>
于 2010-07-01T17:31:14.543 に答える