2010-04-19 28 views
25

我們有這個JAXB註釋:需要JAXB =真正似乎並不需要

@XmlElement(name = "Strategy", required = true) 
protected List<Strategy> strategy; 

如果沒有Strategy元素存在,不會引發任何異常..這是爲什麼?我們不應該得到例外嗎?

回答

32

JAXB參考實現不使用此屬性進行驗證,它純粹出於文檔目的。

如果您需要驗證文檔,您需要定義一個XML Schema,並使用SchemaFactory將它注入MarshallerUnmarshaller

+0

請參閱[this](http://stackoverflow.com/a/2696765/12604)以獲取從'JAXBContext'中加載'Schema'以在Marshaller/Unmarshaller中使用的示例。 – 2013-01-25 16:19:52

+0

我不會說它純粹是爲了文檔 - 它也用於模式生成。當您從Java類生成XSD並且具有'required = true'時,XSD中的元素聲明將使用'minOccurs =「1」'生成。然後您可以使用XSD來驗證XML。 – Jesper 2017-09-30 13:18:07

1

此外,您可以使用beforeMarshalafterUnmarshal方法作爲MarshallerUnmarshaller只具備驗證輸入。

訪問這些方法的方案也允許您爲方法聲明添加任意的throws子句。這意味着在實施這些方法時,您可以安全地使用javax.xml.bind.MarshalExceptionjavax.xml.bind.UnmarshalException(或您想要的任何類型的Exception來發出驗證錯誤的信號。