2012-06-25 30 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