2010-08-21 71 views
4

使用最新的JAXB Sun實現,但可以依靠XJC生成正確的註釋。有幾個例子,XJC沒有附加XMLElement或XMLAttribute註釋是沒有邏輯的理由。 Plus還有插件框架背後的邏輯問題。無論如何,我想拋棄編寫模式的想法只是爲了產生POJO,然後必須加載架構來抵制驗證。針對javax綁定註釋而非模式進行驗證

任何人都有辦法直接驗證Javax綁定註釋嗎?看到一個很酷的解決方法: how can i unmarshall in jaxb and enjoy the schema validation without using an explicit schema file

其中一個模式是動態創建只是爲了驗證。尋找一種方法直接反對註釋(如Hibernate Validator和JSR 303,但特別針對Javax綁定註釋)?

回答

1

沒有任何可以針對JAXB註釋完成的標準驗證。事實上,大部分情況下,這是因爲對象模型的類型化特性減少了可能出現的無效輸入的數量(例如,如果我的客戶元素具有子地址元素,那麼我的Customer對象具有Address屬性,除了該屬性上的地址對象以外,其他設置都會被設置)。

您可能希望進行驗證的方法是將集合限制爲某個數字元素(因爲您擁有maxOccurs =「10」)或特定長度的字符串(因爲您具有模式構面)。 JAXB 2.X(JSR 222)不會在默認情況下在您的對象模型上生成這些對象(儘管您可以自己添加它們,就像人們在使用JPA時那樣),使用JSR 303並運行驗證器。

  1. 如果您遇到 的XJC工具問題,請考慮 記錄中的錯誤反對:

  2. 您問題相關的其他景點

  3. 如果沒有註釋,那麼 的默認值是@XmlElement,因此這些註釋中的某些 可能由於這個原因而丟失 。註釋通常只能添加到 以調整名稱或名稱空間信息。

  4. 隨着JAXB(就像JPA),你可以 開始POJOs。可以添加JAXB註釋 以定製XML 表示。

+0

有效類型元數據可以根據從JAXB註釋生成的模式進行驗證,但結構或語法必須違背模式。仔細閱讀JAXB 2.2規範,基本上不可能對僅限於一次出現的選擇複雜類型進行註釋。所以我的思路很快就死了。通過SchemaFactory運行二進制代碼並加載模式。 JSR 303將處理更好的「類型」檢查(比枚舉更多的表達限制)。 – 2010-08-24 15:43:39