2016-11-18 62 views
1

您好我是Jaxb的新手,并试图通过jaxb解组文件xml。我已正确添加了xmppropordername字段。Jaxb unmarshall返回空值

但是我的两个XML字段填充为空,其他填充完美。

我的XML文件是: -

<tables> 
    <table id="1"> 
     <name>test1</name> 
     <schema>validator_test</schema> 
     <rowCountToValidate>7</rowCountToValidate> 
     <columnTypeCheckRequired>FALSE</columnTypeCheckRequired> 
     <additionalColumns>column1,column2</additionalColumns> 
     <targetName>target1</targetName>> 
    </table> 
    <table id="2"> 
     <schema>validator_test</schema> 
     <name>validate_external1</name> 
     <rowCountToValidate>1</rowCountToValidate> 
     <columnTypeCheckRequired>FALSE</columnTypeCheckRequired> 
     <additionalColumns>column1,column2</additionalColumns> 
    </table> 
</tables> 

我的代码来解读内容是:

import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlRootElement; 
import javax.xml.bind.annotation.XmlType; 

import org.apache.commons.lang.builder.ToStringBuilder; 
import org.springframework.beans.factory.annotation.Value; 
import org.springframework.stereotype.Service; 

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

@XmlElement(name = "additionalColumns") 
public String getadditionalColumns(){ 
    return 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; 
} 



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

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

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

我得到的columnTypeCheckRequired和additionalColumns空值。但其他字段正确填充。是否有其他需要设置的字段或设置?

我对Jaxb完全陌生!有人能帮我理解错误吗?

+0

您看到了哪个确切的错误?这是不是在问题... – Matthias

回答

2

您必须使用camel case样式更改以下getter。 C和A大写字母。

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

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

它工作得很好。因为我对此很陌生,你会介意到底为什么我错了,以及jaxb如何实现它? – Ayon

+1

@Ayon问题很简单,JAXB期望每个字段都使用camelcase表示法,所以它找不到匹配项。 – Xstian

+0

@Ayon你解决了吗? – Xstian