簡體   English   中英

可以通過JAXB getter進行驗證嗎?

[英]JAXB getter with validation possible?

我的代碼如下所示:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Elements", namespace = MyNamespaceContext.NS_SOME, 
propOrder = { "element" })
public class Elements implements Serializable {

private static final long serialVersionUID = 1L;

@XmlElement(required = true)
protected List<Element> element;

public List<element> getElement() {
    if (element == null) {
        element = new ArrayList<Element>();
    }
    //Added by me afterwards
    element = ElementHelper.normalizeElement(element);
    return this.element;
}

}

該XML如下所示:

<elements>
    <element>
        <one>something</one>
        <two>something</two>
    </element>
    <element>
        <one>another </one>
        <two>another</two>
    </element>
</elements>

我想做的是在我的getter方法中添加一個清潔器,以刪除空格和其他東西。 因此,我考慮將我的ElementHelper添加到該吸氣劑中(請參見代碼段)。 但是它不起作用(我的輸出中仍然有空格)。 如果我在代碼中的某個地方調用Elements.getElement()並將返回的列表與ElementHelper一起使用,則它確實可以工作。 因此在我看來,沒有按應有的方式調用getter方法。

XmlElement移至getter方法是否有幫助? 還是有其他簡單的技巧可以做這種事情?

我想在代碼的這一部分(集中式)上執行此操作,因為我不想每次在代碼的各個位置都需要ElementHelper時就調用它,而在其他一些地方卻忘記了它(這是舊代碼) 。 還是你們當中有一個建議在哪里做呢? 因為我不喜歡這樣做。

我剛剛開始了解JAXB,但對我來說仍然不清楚。 如果您可以更詳細地回答有關JAXB在該問題上如何工作的問題,或者指向一個很好且易於理解的資源,我將不勝感激。

編輯:

下面是ElementHelper的代碼:

public static List<Element> normalizeElement(List<Element> elements){
    for(int i = 0; i < elements.size(); i++){
        normalizeValues(elements.get(i));
    }
    return elements;
}

private static void normalizeValues(Element element){
    String one;
    String two;
    if( (one = element.getOne()) != null){
        element.setOne(one.trim());
        element.setOne(one.replaceAll("\\s+", ""));
    }

    if( (two = element.getTwo()) != null){
        element.setTwo(two.trim());
        element.setTwo(two.replaceAll("\\s+", ""));     
    }

}

所需的輸出是,一和二的字符串將沒有空格和其他不可見的字符。

  1. 如果您使用@XmlAccessorType(XmlAccessType.FIELD) jaxb將直接訪問字段,請使用PROPERTYNONE並將注釋移至getter。
  2. 第一次調用getElementList將為空,因此無需進行任何標准化。 我不確定是否會第二次打電話。

一旦完全設置類void afterUnmarshal(Unmarshaller u, Object parent)我將使用void afterUnmarshal(Unmarshaller u, Object parent)方法對類中的所有內容進行規范化。

這樣的事情應該做:

void afterUnmarshal(Unmarshaller u, Object parent) {
    this.element = ElementHelper.normalizeElement(element);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM