JAXB是否支持xsd:restriction?

        

所以我希望它转换为这样的Java代码:

 public void setAge(int age){ if(age  120){ //throw some exception } //setting the age as it is a valid value } 

在JAXB中可以吗?

曾经看过一些WebService Client存根生成器这样做可能是axis2 webservice但不确定。

JAXB(JSR-222)规范不包括在域模型中生成失败快速逻辑。 现在通常的做法是以注释(或XML)的forms表示validation规则并对它们运行validation。 Bean Validation(JSR-303)对此进行了标准化,并且可在任何Java EE 6实现中使用。

XJC扩展

我自己没有尝试过以下扩展,但似乎它会从XML模式生成对域模型表示validation规则的Bean Validation(JSR-303)注释。 由于XJC非常易于扩展,因此可能还有其他插件可用。

在JAXB中执行此validation的建议方法是在marshaller resp上切换模式validation。 解组:

 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-Facets 。 快速片段:

 class MyClass { @MinOccurs(1) @MaxOccurs(10) @Facets(minInclusive=-100, maxInclusive=100) public List value; @Facets(pattern="[az][a-z0-9]{0,4}") public String name; }