2011-05-16 69 views
0

我有以下要求: 我有一個驗證系統。我需要做的事情之一是對XML文件進行驗證,即驗證該標籤X是否等於給定值。我有多種可能的情況,每種情況下都有一組需要驗證的不同標籤。java驗證設計問題

我不想在不同場景下測試相同標籤時重複相同的代碼。

我想弄清楚會解決這個問題的設計。

任何想法?

謝謝。

回答

0

我會爲這些場景定義XPath表達式對和預期結果。

驗證器然後將採取一個場景(對象),編譯並將關聯的表達式應用到xml文檔。這將選擇一個元素,驗證器會檢查元素的內容是否與期望值匹配。

+0

感謝您的回答。預期的結果在運行時確定。所以我不能預定義表達式和結果。 – dan 2011-05-16 21:08:50

+0

@dan - 無所謂 - 然後只存儲XPath並在運行時告訴驗證程序*其中*用於獲取預期結果或規則 – 2011-05-16 21:52:40

0

呃,委託給共享方法?像:

void validateAppleScenario(Xml xml) { 
    validateFruit(xml); 
    // validate apples specific tags 
} 

void validateBanana(Xml xml) { 
    validateFruit(xml); 
    // validate banana specific tags 
} 

void validateFruit(Xml xml) { 
    // validate tags common to all fruit 
} 

或者如果你喜歡驗證是單獨的對象,你可以使用子類型:

interface Validator { 
    void validate(Xml xml); 
} 

class FruitValidator implements Validator { 
    void validate(Xml xml) { 
     // validate tags common to all fruit 
    } 
} 

class AppleValidator extends FruitValidator { 
    void validate(Xml xml) { 
     super.validate(xml); 
     // validate tags specific to apples 
    } 
} 
0

一種方法是將XML解析成一個對象,然後按照豆驗證它驗證規範(JSR 303)。 Hibernate Validator是參考實現。*您可以使用驗證約束對您的屬性進行註釋,然後指定validation groups,以便在某些情況下驗證某些字段。

還有更多的信息herehere

* Hibernate Validator與Hibernate ORM不同。它們只與Hibernate ORM使用Validator進行約束檢查有關。