2011-08-04 72 views
1

我正在开发应用程序,我必须在某些xmlbean主题上编写自定义验证,基本上可以看到存在或不存在适当值的字段。现在这些对象是从diff模式生成的。我正在使用由xmlbeans提供的对模式提供的验证,但是在进一步处理这些对象之前还需要对这些对象进行更多业务验证。 有人可以为这个用例提出任何设计模式吗?在这个用例中应该使用哪种设计模式?

感谢

回答

1

定义自己的验证接口:

interface Validator <T extends XmlBean> { 
    boolean validate(T bean); 
} 

每个classyou正在处理实现它,你可以提供一个工厂类来获取验证的每个bean通过实施以下接口类:

interface IValidatorFactory { 
    public <T extends XmlBean> Validator<T> getValidator(Class<T> clazz); 
} 

class ValidatorFactory implements IValidatorFactory { 
    private final Map<Class<? extends XmlBean>, Validator<? extends XmlBean>> map = 
     new HashMap<Class<? extends XmlBean>, Validator<? extends XmlBean>>(); 

    @SuppressWarnings("unchecked") 
    @Override 
    public <T extends XmlBean> Validator<T> getValidator(Class<T> clazz) { 
     return (Validator<T>)map.get(clazz); 
    } 

    public <T extends XmlBean> void registerValidator(Class<T> clazz, Validator<T> validator) { 
     map.put(clazz, validator); 
    } 
} 
+0

看起来很有希望。我会试试这个。 – javauser2011

0

您可以将您自己的自定义前置和后置挂钩添加到您生成的XmlBeans类中。要添加添加挂钩,您需要创建一个.xsdconfig文件,并提供一些可调用的静态方法preSet()postSet()

有关示例,请参见:

https://www.ibm.com/developerworks/xml/library/x-xmlbeanse/?ca=dgr-eclipse-1

而且也:

http://svn.apache.org/viewvc/xmlbeans/trunk/test/cases/xbean/extensions/prePostFeature/readOnlyBean/po.xsdconfig?revision=HEAD&view=markup

http://svn.apache.org/viewvc/xmlbeans/trunk/test/src/xmlobject/extensions/prePostFeature/readOnlyBean/existing/FooHandler.java?revision=HEAD&view=markup

相关问题