2012-06-25 4 views
1

Я пытаюсь разархивировать некоторые файлы сопоставления дюз, чтобы предоставить библиотеку доступности отображения для ряда приложений. Но я не могу заставить JaxB аннотации работать правильно. Либо список сопоставлений, которые мы unmarshalled как пустой или пустойUnmarshalling Dozer сопоставляет файлы, чтобы предоставить библиотеку сопоставлений

Из файла сопоставления, все, что меня интересует.

<?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 

и класс Mapping

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


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

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

Я пробовал многочисленные комбинации аннотаций и я не могу понять, что я делаю неправильно ,

Может кто-нибудь указать мне в правильном направлении.

ответ

1

Вы можете сделать следующее:

Mappings

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; 

} 

Mapping

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; 

} 

Demo

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