2011-05-05 15 views
1

前提条件:CXFに基づくサービスは、XSD制限に違反するデータを含む要求/応答を受信します。CXFでアンマーシャリングエラーが発生した場合のフィールド名の取得方法は?

実際の挙動

CVC-maxLengthの-有効: この場合には、CXFのようなメッセージで障害を返す長さ= '28' と値 'string_length_violated_valueは' に対してファセットは有効ではありませんmaxLengthの「13」型「XSDStringTypeWithLengthRestriction」

目標:無効なデータが含まれているフィールドの名前を消費者に 復帰の障害。 F.e.

プロバイダからの応答には無効なデータが含まれています。フィールド 'field_name'の値 'string_length_violated_value'は、maxLength '13'に対してファセット有効ではありません。

私はそれが可能かどうか、もしそうなら、このフィールド名(どこから検索する)を決定するのだろうか?

+0

"不正な値"を除いて、問題の要素についてのヒントがなく、「無効な値」のアンマーシャリングエラーが発生する同様の問題が発生しました。私はXMLメッセージに何百もの要素を持っているので、乾草の中で針を探すのと同じです。この段階のための私の回避策は、各要素に一意の(偽の)値を提供することであり、要素(要素ではない)は報告されているので、正しい要素を指し示します。それは面倒で、それほどスマートではありません。 JAXB ValidationEventHandlerメソッドをもう少し試してみます。 – Withheld

+0

こんにちはダニエル、私は詳細を覚えていないので、多くの時間が過ぎた、申し訳ありません。しかし、私が言うことができるのは、私たちの 'ValidationEventHandler'が機能しなかったことです。私たちが使ったcxfのバージョンはこれを無視していました。 これは悪い知らせですが、良いこともあります - カプセル化されたオブジェクトを掘り下げてcxf faultから "coordinate"(行と列番号)に関するデータを取得できました。これが私たちのソリューションでした。 – Milkywayfarer

答えて

2

私は、これは完全に動作しますが、あなたはそれを試してみることができるかどうかはわからない:

あなたはJAXBのValidationEventHandlerを作成し、エンドポイントでそれを登録することができます。

取得するValidationEventには、基本的な文字列(上記参照)とその他の情報があります。私はそこにブレークポイントを置き、追加の有用な情報があるかどうかを調べるイベントを掘り下げます。

+0

大変ありがとう私はそれを試してみて、それが結果をもたらすかどうかを知らせます! – Milkywayfarer

+0

残念ながら、[ValidationEventHandler](https://jaxb.java.net/jaxb20-ed/api/javax/xml/bind/)[このソース](http://stackoverflow.com/a/10227684/1864054) ValidationEventHandler.html)では、応答動作を変更することはできず、SOAP応答形式を変更することはできません。本当? – Withheld

関連する問題