我希望我的Eclipselink 2.3 Marshaller在编组时执行验证。 我确定Schema
是由SchemaFactory
正确创建的,我将它传递给Marshaller.setSchema
,并且我通过Marshaller.setEventHandler()
注册了一个处理程序。JAXB-ElipseLink:Marshaller未验证
元帅的结果显然无效。到其Schema(在Eclipse中验证),但我可以看到我的断点handleEvent(ValidationEvent event)
从未被击中。
我正在使用marshal(Object, XMLStreamWriter)
对XML-Fragments进行编组,并希望Marshaller根据我传递的Schema对这些片段执行验证。
任何人有任何想法,为什么这不会发生?
EDIT:
验证错误应该发生的是:2点的元件上缺少的属性。
该元素对应于包含在列表<>中的Java对象。我编组使用List:
<java-type name="foo.ElementType" xml-accessor-type="PROPERTY">
<java-attributes>
// just <xml-attribute> elements here
</java-attributes>
</java-type>
因此,所有的属性都整理到ListWrapperElement/ListElement/@属性:
<xml-element java-attribute="listInstance" xml-path="ListWrapperElement/ListElement" type="foo.ElementType" container-type="java.util.ArrayList"/>
的元素本身的映射。 其中2个缺失,未通过验证检测到。
谢谢布莱斯,我检查了你的博客文章,但无法找到任何不同的东西,我在做什么。在marshal()调用完成后,Marshaller是否执行验证?在我的具体用例2中,一个元素中缺少了必需的属性,这并不是Marshaller检测到的。 验证有任何限制吗? – quaylar
@quaylar - 你的对象的XML模式的哪一部分对应于:global/anomymous,element/type?它是用XmlRootElememt注解还是用JAXBElement包装? –
已更新我的帖子以提供更多详细信息! – quaylar