在这个用例中应该使用哪种设计模式?
【腾讯云】亏本大甩卖,服务器4核16G 1年370元(带宽12M,系统盘120GB SSD盘,月流量2000GB)!!!!!!
云产品 配置 价格
服务器 1核2G,带宽5M,系统盘50GB SSD盘,月流量500GB 38元/年
MySQL 1核1G 19元/年
服务器 16核32G,带宽18M,系统盘250GB SSD盘,月流量5000GB 1197元/年
点我进入腾讯云,查看更多详情

I am working on app where I have to write custom validation on some xmlbean oject, basically to see so and so fields with proper values exist or not. Now those objects are generated from diff schema. I am using validation provided by xmlbeans against the schema but there are some more business validation needs to be done for these objects before it is being processed further. Can somebody suggest any design pattern for this use case?

Thanks

#0

Define your own validator interface:

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

Implement it for each classyou are dealing with, you can provide a factory class to get the validator for each bean class by implementing the following interface:

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

#1

You could potentially add your own custom pre- and post-set hooks to your generated XmlBeans classes. To add add the hooks you need to create an .xsdconfig file and provide a some preSet() and postSet() static methods that can be called.

For an example, see:

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

And also:

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

推荐文章

flask源码阅读系列一config模块

flask源码阅读系列一config模块

推荐文章

高效利用Sentry追踪日志发现问题

高效利用Sentry追踪日志发现问题

推荐文章

git 使用操作

git 使用操作

推荐文章

【Flask】使用Flask-Admin内建的JS控件获取日期和时间

【Flask】使用Flask-Admin内建的JS控件获取日期和时间

推荐文章

pycharm gitignore file

pycharm gitignore file

推荐文章

神经网络程序设计课学习心得

神经网络程序设计课学习心得

推荐文章

SpringCloud-分布式配置中心【加密-非对称加密】

SpringCloud-分布式配置中心【加密-非对称加密】

推荐文章

第一个网络爬虫-抓取CodeSnippet代码片段

第一个网络爬虫-抓取CodeSnippet代码片段

推荐文章

Flask secret_key的设置对session有影响

Flask secret_key的设置对session有影响

推荐文章

多进程模块(multiprocessing)

多进程模块(multiprocessing)

推荐文章

Flask学习总结笔记(6) -- Flask-Moment本地化日期和时间

Flask学习总结笔记(6) -- Flask-Moment本地化日期和时间

推荐文章

jwplayer :若请求不到流,则页面一直转圈请求效果

jwplayer :若请求不到流,则页面一直转圈请求效果

推荐文章

MacBook ssh卡在debug1: SSH2_MSG_KEXINIT sent的解决办法

MacBook ssh卡在debug1: SSH2_MSG_KEXINIT sent的解决办法

推荐文章

【Flask】在Flask中使用logger

【Flask】在Flask中使用logger

推荐文章

Flask学习记录之Flask-SQLAlchemy

Flask学习记录之Flask-SQLAlchemy

推荐文章

IOS使用新的HTTP2 api测试推送,APNs推送的测试工具

IOS使用新的HTTP2 api测试推送,APNs推送的测试工具