java - JAXB 解码异常

标签 java xml jaxb

我是 Jaxb 新手,在解析简单 XML 时遇到问题。有问题的 XML 如下所示:

<tables>
    <table id="1" >
    <schema>validator_test</schema>
        <name>test1</name>
        <rowCountToValidate>6</rowCountToValidate>
        <columnTypeCheckRequired>FALSE</columnTypeCheckRequired>
        <additionalColumns>column1,column2</additionalColumns>
    </table>
    <table id="2">
    <schema>validator_test</schema>
        <name>validate_external1</name>
        <rowCountToValidate>2</rowCountToValidate>
        <columnTypeCheckRequired>FALSE</columnTypeCheckRequired>
        <additionalColumns>column1,column2</additionalColumns>
    </table>
    <table id="3">
    <schema>validator_test</schema>
        <name>Test_View1</name>
        <rowCountToValidate>2</rowCountToValidate>
        <columnTypeCheckRequired>FALSE</columnTypeCheckRequired>
        <additionalColumns>column1,column2</additionalColumns>
    </table>
</tables>

用于解码的 Jaxb 类是:-

@XmlRootElement(name = "table")
@XmlType(propOrder = { "name", "schema", "rowCountToValidate","columnTypeCheckRequired","additionalColumns","targetName"})
@Service
public class TableInfo {

    private static final boolean TRUE = true;
    @Value("${default.row.count.to.validate}")
    private Integer defaultRowCountToValidate;

    /**
     *
     */
    public TableInfo() {
    }

    private String name;
    private String schema;
    private Integer rowCountToValidate;
    private String targetName;
    private String columnTypeCheckRequired;
    private String additionalColumns;

    @XmlElement(name = "name")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @XmlElement(name = "schema")
    public String getSchema() {
        return schema;
    }

    public void setSchema(String schema) {
        this.schema = schema;
    }

    @XmlElement(name = "rowCountToValidate")
    public Integer getRowCountToValidate() {
        return rowCountToValidate;
    }

      @XmlElement(name = "columnTypeCheckRequired")
      public String getColumnTypeCheckRequired() {
        return columnTypeCheckRequired;
      }

    public void setColumnTypeCheckRequired(String columnTypeCheckRequired) {
        this.columnTypeCheckRequired = columnTypeCheckRequired;
    }


     @XmlElement(name = "additionalColumns")
      public String getAdditionalColumns() {
        return additionalColumns;
      }

    public void setAdditionalColumns(String additionalColumns) {
        this.additionalColumns = additionalColumns;
    }


    public void setRowCountToValidate(Integer rowCountToValidate) {
        // If user configured value is not null and greater than zero then set
        // the value otherwise use default value
        if ((null != rowCountToValidate) && (rowCountToValidate.intValue() > 0)) {
            this.rowCountToValidate = rowCountToValidate;
        }else {
            this.rowCountToValidate = defaultRowCountToValidate;
        }
    }

    @XmlElement(name = "targetName")
    public String getTargetName() {
        return targetName;
    }

    public void setTargetName(String targetName) {
        this.targetName = targetName;
    }


    @Override
    public String toString() {
        return ToStringBuilder.reflectionToString(this);
    }
}

但是,我遇到了以下异常:-

`JAXB unmarshalling exception; nested exception is javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"tables"). Expected elements are <{tables}table>`

如果有人能指出我正在做的错误,我将不胜感激。我对此很陌生,不太了解 jaxb 的工作原理。

最佳答案

您需要创建类 Tables@XmlRootElement(name = "tables")该类必须包含 table类型为 TableInfo 的字段。

当您解码示例 xml 时,您需要传递 Tables解码器类。

关于java - JAXB 解码异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40716575/

相关文章:

java - PDFBox - 查找页面尺寸

java - 无法在 Windows 上运行我的 Maven 项目

xml - 使用 nodejs 中的 xmlbuilder 在 xml 中添加 namspace

java - java读取xml标签的方法

java - 如何在 Jaxb 中默认将非注释字段映射到属性

java - 无法使用 jaxb 将 xml 转换为 pojo

android - 是否可以同时使用 JAXB 和简单 XML?

java - 将大文本文件加载到 int 数组中的最快方法

java - 如何除以两个 float 并得到一个整数

ios - 解析器错误 Error Domain=NSXMLParserErrorDomain Code=4 "The operation couldn’ t be completed."