2012-03-01 5 views
2

問題文: 現在、SOAPフォールトに正しく入力された要素と、SOAP要求とSOAP応答との一致を可能な限り閉じるという要件が2つありますAxis Web Serviceからの移行前および移行後のCXF Webサービス用。最初の必要性についてはCXF - コレクションのスキーマ名が競合します

は上述の、我々は次のオプションを探求:

  1. 私たちは、必要に応じて、SOAP障害を処理するCXF用のカスタムインターセプタクラスを構成しました。また、「要素」の内容をJavaコードで直接設定できるように、サービス実装のメソッドを変更しました。しかし、JAXBコンテキストに関する問題が発生し、Java例外をSOAPフォールトに正しく非マーシャルできない
  2. 2つの新しいクラスが作成されました.1つは単純なJava Beanとしての例外の実際のコンテナとして、 Java例外クラスを拡張するラッパーとしてもう1つ。アプリケーション例外のSOAPフォールトへの変換を可能にするために、サービス実装で例外ラッパークラスを使用しました。しかし、これらのクラスがJAXB Contextに知られていないという問題が発生しました。
  3. wsdl2javaツールを使用して、JAX-WSとJAXBのさまざまなアーティファクトを生成しようとしました。 (つまり、Axis/WebLogicのレガシー)WSDLを使用して、JAXBの成果物、特にJAXBコンテキストを処理するObjectFactoryクラスとDamageCatalogElementArrayクラスを使用しました。これをポストすると、さまざまなXMLタイプ、つまり参照されている対応するクラスが指定された名前空間に対して未定義であるというエラーが発生しました。
  4. さまざまなクラスで使用される名前空間(QNameインスタンス)を一貫させ、パッケージ構造とのスキーママッピング。現時点では、サービス実装メソッドのDamageCatalogElement、クラスに関連するcatalogDamage()、DamageCatalogElementArrayという、特定のクラスの配列のコレクションでスキーマが競合するというエラーが発生しています。サービスの実装では、このメソッドの戻り値の型は、型の配列であるため、私たちはのObjectFactoryにJAXBElementのインスタンスを返すとき、私たちはクラスを使用しなければならないのに対し、これは、DamageCatalogElementArray
  5. DamageCatalogElementある

我々はCXF 2.4を使用しています。 2、JDK1.6、JBoss AS 4.2です。 何か助けや指針をいただければ幸いです!

答えて

1

最後に問題を解決しました。 CXFツールwsdl2javaを使用してクラスを生成するというトリックは、AxisのWSDLを提供し、レガシーコードのJAXB関連クラスを置き換えることで発生しました。 これを実行しているうちに、リファクタリングを行う必要がありますが、それは問題ありません。 生成されたクラスを置いた瞬間、すべて正常に動作しています。 :)

関連する問題