2016-11-18 63 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