2013-07-14 2 views
1

Я использую JAXB-impl. Мне нужно иметь возможность отображать вложенные элементы в поля классов как простые типы. Например:JAXB связывание вложенных элементов

<mapping> 

    <search> 
     <channel>main-channel</channel> 
     <url>my-channel-url</url> 
    </search> 

    <items> 
     <item>first</item> 
     <item>second</item> 
     <item>third</item> 
    </items> 

</mapping> 

Предполагая, что мне нужно, чтобы связать «URL» тег в поле в классе, это не будет работать (конечно):

class Mapping{ 

    @XmlElement 
    private String url; 
} 

@XmlElementWrapper, это только для коллекций. Я видел сообщение об использовании eclipse MOXy и использую @XmlPath, но это не вариант. Это должен быть JAXB-impl.

для справки: http://wiki.eclipse.org/EclipseLink/Examples/MOXy/XPath#Marshal_to_XML_-_MOXy_Customization_.231_-_Grouping_Element

Есть ли способ, чтобы получить это отображение без необходимости создавать эти дополнительные вложенные классы?

+0

Почему бы не создать вложенные классы? –

+0

Это может быть вариант. Однако доступ к полям: mapping.getUrl(); более чистый: mapping.getNestedClass.getUrl(); Я не уверен, имеет ли смысл создавать вложенный класс, чтобы удовлетворить JAXB. Я предпочитаю не создавать вложенный класс, но мне может понадобиться его создать. – Mansour

+0

Вам нужно прочитать и написать XML или просто прочитать? –

ответ

3

С дополнительным классом Search, но этот класс является частным вложенным классом и не используется вне класса Mapping.
общественного API класса Mapping возвращает URL, как ожидается,

@XmlAccessorType(XmlAccessType.FIELD) 
class Mapping 
{ 
    @XmlAccessorType(XmlAccessType.FIELD) 
    private static class Search 
    { 
     private String channel; 
     private String url; 
    } 

    private Search search; 

    public String getUrl() 
    { 
     return search == null ? null : search.url; 
    } 
} 
+0

Спасибо большое! – Mansour

Смежные вопросы