我遵循用于生成JAXB对象的XSD
<xs:complexType name="packageType">
<xs:sequence>
<xs:element ref="package" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="dependencies" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="id" type="xs:NMTOKEN" use="required"/>
</xs:complexType>
现在,如果我收到XML
示例XML
<package id="FA33" required="false" empty="false">
<dependencies />
</package>
在上面的示例中,如果我删除“dependencies”空标记,JAXB会抛出“意外的包结束”错误。
由于minOccours存在,这两种情况都不应该有所作为。但就我而言,JAXB无法解决 case1 中给定的xml,即如果没有依赖标记。如果有一个空的依赖关系标签,那么就可以了。
是预期的行为还是做错了什么?
P.S: 我正在使用Jaxb 1.3
答案 0 :(得分:3)
如何使用JAXB 2?
JAXB 1用于验证unmarshall。这是一个问题,因为您无法真正解组缺少必需元素等的无效XML。
据我记得,我曾经通过以下方式解决这个问题:
处理程序如下:
import javax.xml.bind.ValidationEventHandler;
/**
* Validation handler which ignores all the validation events.
*/
public class IgnoringValidationEventHandler implements ValidationEventHandler {
/**
* Static instance.
*/
public static final ValidationEventHandler INSTANCE = new IgnoringValidationEventHandler();
/**
* Simply returns <code>true</code>
*
* @param event
* ignored;
* @return Always returns <code>true</code>.
*/
public boolean handleEvent(javax.xml.bind.ValidationEvent event) {
return true;
}
}
通过marshaller.setEventHandler(IgnoringValidationEventHandler.INSTANCE);
注册。
至于修补后的jaxb-xjc
,你可以通过valikov(at)gmx.net与我联系,我可以把罐子寄给你。