<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="120"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
所以,我想让它变得转换为这样的Java代码:
public void setAge(int age){
if(age < 0 || age > 120){
//throw some exception
}
//setting the age as it is a valid value
}
是否有可能在JAXB?
曾经看过一些WebService的客户端存根生成器这样做也许Axis2的web服务,但不能确定。
的JAXB(JSR-222)规范不包括生成快速失败逻辑到域模型。 现在通常的做法是,以表达注释(或XML)的形式验证规则并在其上运行的验证。 Bean验证(JSR-303)标准化这一点,可在任何Java EE 6实现。
XJC扩展
我还没有尝试以下扩展自己,但它看起来好像它会产生Bean验证(JSR-303)批注到从XML架构域模型表示的验证规则。 由于XJC是非常可扩展可能有其他的插件可用。
- http://code.google.com/p/krasa-jaxb-tools/
建议的方式来执行此验证的JAXB是在编组RESP的模式验证切换。 解组:
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = schemaFactory.newSchema(...);
ValidationEventHandler valHandler = new ValidationEventHandler() {
public boolean handleEvent(ValidationEvent event) {
...
}
};
marshaller.setSchema(schema);
marshaller.setEventHandler(valHandler);
您可以尝试JAXB刻面 。 快速片段:
class MyClass {
@MinOccurs(1) @MaxOccurs(10)
@Facets(minInclusive=-100, maxInclusive=100)
public List<Integer> value;
@Facets(pattern="[a-z][a-z0-9]{0,4}")
public String name;
}