java - 在 Jaxb 解码时希望未知属性出错

标签 java xml jaxb

我正在使用 Jaxb 将 XML 解码为 Java 对象。我需要知道新属性/元素何时在 XML 中并失败。但是默认情况下,解码器会忽略新元素/属性。

当 XML 中存在 POJO 中未指定的新属性/元素时,我可以设置为失败的配置吗?

我的 POJO:

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "ROOT")
public class Model {

    private A a;

    public A getA() {
        return a;
    }

    @XmlElement(name = "A")
    public void setA(A a) {
        this.a = a;
    }

    static class A {

        String country;

        public String getCountry() {
            return country;
        }

        @XmlAttribute(name = "Country")
        public void setCountry(String country) {
            this.country = country;
        }
    }
}

解码代码:

JAXBContext jaxbContext = JAXBContext.newInstance(Model.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

String sample = "<ROOT>" +
                    "<A Country=\"0\" NewAttribute=\"0\"></A>" +
                    "<NEWELEMENT> </NEWELEMENT>" +
                "</ROOT>";
InputStream stream = new ByteArrayInputStream(sample.getBytes(StandardCharsets.UTF_8));

Object unmarshal = jaxbUnmarshaller.unmarshal(stream);

最佳答案

您需要调用Unmarshaller.setEventHandler()使无效的 XML 内容失败。

关于java - 在 Jaxb 解码时希望未知属性出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33095314/

相关文章:

java - Spring Boot 在错误响应实体中添加请求正文

java - 连接两个 Java 应用程序的适当方法

c# - 如何将 XML 读入与其 xsd 匹配的类中

java - jaxb 解码器将值读取为 0

java - 如何以编程方式更改默认的 JAXB 日期序列化?

java - "loader constraints violated when linking javax/xml/namespace/QName class"来自 Oracle 10g 上的 webapp

java - 线程 "ajp-bio-8009-exec-1"中的异常

java - MockMVC如何在同一个测试用例中测试异常和响应代码

java - 如何在“with\”转义时避免转义 &

java - 使用 onClick 监听器事件显示图像