2011-05-05 65 views
1

先決條件:基於CXF的服務接收到數據的請求/響應,這違反了XSD限制。如何在CXF發生解組錯誤的情況下檢索字段名稱?

實際行爲: 在這種情況下CXF返回故障中包含的消息:

CVC-最大長度-有效:值 'string_length_violated_value' 與長度= '28' 是不小面有效的相對於最大長度「13」型「XSDStringTypeWithLengthRestriction」

目標: 回報故障消費者與含有無效數據字段的名稱。 F.E.像這樣:

來自提供者的響應包含無效數據。字段'field_name'的值'string_length_violated_value'相對於maxLength'13'不是facelet-valid。

我想知道如果這是可能的,如果是這樣,那麼如何確定(從哪裏檢索)這個字段名稱?

+0

我剛剛遇到類似的問題,我得到一個「無效值」解組錯誤,但沒有任何有關元素的提示,除了「違規值」。由於我在XML消息中有數百個元素,就像在大海撈針一樣。我對這個階段的解決方法是爲每個元素提供獨特的(僞造)值,並且由於值(但不是元素)被報告,它指向了正確的元素。雖然這很乏味而且不太聰明。一旦我有一點時間,我會嘗試'JAXB ValidationEventHandler'技術。 – Withheld 2013-10-02 17:29:45

+0

嗨丹尼爾,很多時間過去了,所以我不記得詳細,對不起。但是我可以說 - 對我來說'ValidationEventHandler'不起作用,因爲我們使用的cxf版本忽略了這個。 這是個壞消息,但也有好處 - 我已經通過挖掘封裝對象設法從cxf故障中獲得有關「座標」(行和列號)的數據 - 這是我們的解決方案。 – Milkywayfarer 2013-10-02 21:14:25

回答

2

我不知道這是否會完全工作,但你可以試一試:

您可以創建一個JAXB的ValidationEventHandler並註冊在端點。

它獲取的ValidationEvent具有基本字符串(您在上面看到)和其他信息。我會在那裏放置一個斷點並深入瞭解事件,看看是否有任何其他有用的信息可用。

+0

非常感謝我會試試看,並告知它是否會帶來任何結果! – Milkywayfarer 2011-05-05 20:43:05

+0

不幸的是,[本源碼](http://stackoverflow.com/a/10227684/1864054)指出[ValidationEventHandler](https://jaxb.java.net/jaxb20-ed/api/javax/xml/bind/ ValidationEventHandler.html)不會讓您更改響應行爲,並且您無法更改SOAP響應格式。真的嗎? – Withheld 2013-10-02 19:16:54

相關問題