2012-06-25 29 views
1

我試圖解開一些推土機映射文件,以便爲許多應用程序提供一個映射可用性庫。但我不能讓JaxB註釋正常工作。無論是映射列表我們unmarshalled爲空或空Unmarshalling推土機映射文件提供一個映射庫

從映射文件,所有我感興趣的是。

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<mappings> 
    <mapping> 
     <class-a>package.MySourceClass</class-a> 
     <class-b>other.package.DestinationClass</class-b> 
    </mapping> 
</mappings> 

我有一個映射類

@XmlRootElement(name="mappings") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Mappings { 

    @XmlElementWrapper(name="mappings") 
    private List<Mapping> mappingEntries = null; 

//Getters and setters omitted 

和映射類

@XmlRootElement(name="mapping") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Mapping { 


    @XmlElement(name ="class-a") 
    private String classA; 

    @XmlElement(name = "class-b") 
    private String classB; 

我已經試過了註釋的衆多組合,我無法弄清楚我做錯了什麼。

有人可以指出我在正確的方向。

回答

1

你可以做到以下幾點:

映射

package forum11193953; 

import java.util.List; 
import javax.xml.bind.annotation.*; 

@XmlRootElement(name="mappings") // Match the root element "mappings" 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Mappings { 

    @XmlElement(name="mapping") // There will be a "mapping" element for each item. 
    private List<Mapping> mappingEntries = null; 

} 

映射

package forum11193953; 

import javax.xml.bind.annotation.*; 

@XmlAccessorType(XmlAccessType.FIELD) 
public class Mapping { 


    @XmlElement(name ="class-a") 
    private String classA; 

    @XmlElement(name = "class-b") 
    private String classB; 

} 

演示

package forum11193953; 

import java.io.File; 
import javax.xml.bind.*; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     JAXBContext jc = JAXBContext.newInstance(Mappings.class); 

     Unmarshaller unmarshaller = jc.createUnmarshaller(); 
     File xml= new File("src/forum11193953/input.xml"); 
     Mappings mappings = (Mappings) unmarshaller.unmarshal(xml); 

     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     marshaller.marshal(mappings, System.out); 
    } 

} 

的input.xml /輸出

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<mappings> 
    <mapping> 
     <class-a>package.MySourceClass</class-a> 
     <class-b>other.package.DestinationClass</class-b> 
    </mapping> 
</mappings> 
+0

在該設置中,列表被實例化,但是具有0個元素 – harmingcola

+0

我已經擴展了我的答案以包含完整的示例,但是我們正確的初始映射。您的模型中可能存在某些錯誤。 –

+1

你先生,是個搖滾明星,非常感謝。我從未將XmlElementWrapper更改爲映射列表中的XmlElement。 – harmingcola