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; }