是否可以对单个JAXB注释类执行验证

时间:2018-05-14 06:18:09

标签: java xsd jaxb schema unmarshalling

我们有大量使用JAXB进行序列化的类,并且在编组或解组过程中没有对它们使用任何验证。 正在探索JAXB的内置机制,以便使用set schema方法进行验证。现在因为我有大量的JAXB模型类,所以为大量类生成模式会导致复杂的模式。试图找出是否有一个理想的选项,通过该选项可以仅对模式中的特定类执行验证而忽略其余的类?

我有以下几行代码,

    SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
    Schema schema;

    JAXBContext jc;
    try {
        jc = JAXBContext.newInstance(MyClass.class);
        Unmarshaller unmarshaller = jc.createUnmarshaller();
        schema = sf.newSchema(new File("c:\\schema1.xsd"));
        unmarshaller.setSchema(schema);
        unmarshaller.setEventHandler(new ValidationEventHandler() {

            @Override
            public boolean handleEvent(ValidationEvent event) {
                if (event == null) {
                    return true;
                }
                String line = "unknown"; //$NON-NLS-1$
                String col = "unknown"; //$NON-NLS-1$
                ValidationEventLocator locator = event.getLocator();
                if (locator != null) {
                    line = Integer.toString(locator.getLineNumber());
                    col = Integer.toString(locator.getColumnNumber());
                }
                return true;
            }
        });
        unmarshaller.unmarshal(new File("C:\\Temp\\Test\\Test.xml"));

我已按照链接Is it possible to generate a XSD from a JAXB-annotated class?为MyClass.java自动生成了schema1.xsd 现在,在我的情况下,除了MyClass.java之外还有许多其他模型JAXB类,因此为所有那些表示我不想要的错误的事件引发了事件。 我怎么能只限制单个JAXB类的模式?这有可能吗? 提前致谢

0 个答案:

没有答案