2009-09-30 3 views
14

Я ищу, чтобы преобразовать класс, который выглядит следующим образом ...Что такое эквивалент Jaxb значения текстового узла?

public class Amenity { 
    public String id; 
    public String value; 
} 

в следующий XML с помощью JAXB аннотации:

<amenity id="id-string-here">value-string-here</amenity> 

Кто-нибудь знает, что аннотация использовать на переменной value члена для этого? Ближайший я получил до сих пор:

@XmlRootElement 
public class Amenity { 
    @XmlAttribute 
    public String id; 
    @XmlElement 
    public String value; 
} 

К сожалению, этот подход не позволяет мне указать, что переменная value член не должно быть вынесено в отдельный тег <value></value>.

+0

Как многие из них упомянутый выше, название этого вопроса вводит в заблуждение, поскольку оно запрашивает, как обрабатывать блоки CDATA, но приведенный выше пример не ясно иллюстрирует это. В то время, когда я писал, мне не нужен блок CDATA, а просто нужно было знать об аннотации @XmlValue. Вот почему я получил ответ на jarnbjo. С тех пор мне действительно нужна информация о том, как создать блок CDATA; поэтому последующие ответы также были очень полезными. Я проголосовал за каждого. Спасибо за помощь всем! – ra9r

ответ

21

Я не уверен на 100%, но попробуйте использовать аннотацию вместо @XmlElement.

+3

+1 это точно верно – skaffman

0

JAXB не поддерживает маршалинг/маршалинг в/из типов CDATA xml.

+1

Спецификация JAXB не распространяется на CDATA, однако реализации JAXB, такие как EclipseLink JAXB (MOXy), содержат расширения для обработки CDATA, http://bdoughan.blogspot.com/2010/07/cdata-cdata- run-run-data-run.html –

4

Похоже, вопрос имел в виду текстовые узлы не CDATA узлов, но вот ссылка на как EclipseLink JAXB (Moxy) обрабатывает CDATA:

+2

Не знаете, почему этот ответ получил пониженное голосование. Он остался на благо людей, которые нашли проблему на основе названия. Для чего это стоит, я решил ответить на вопрос @XmlValue jarnbjo, прежде чем покинуть свой собственный. –

+0

Спасибо за ссылку. Удивительно, что CDATA не рассматривался как часть существующей спецификации, но я предполагаю, что до тех пор, пока StringWriters правильно кодируют внутреннюю разметку, не должно быть необходимости в ней. – ra9r

1

This documentation пишет:

В. Как я могу заставить Маршаллера генерировать блоки CDATA?

A. Эта функция недоступна непосредственно из JAXB, но вы можете настроить XMLSerializer Apache Xerces-J для создания блоков CDATA. Для более детального изучения рассмотрите пример приложения JaxbCDATASample.java.

(кстати, это не ответ на ваш конкретный вопрос, но так как вопрос название вводит в заблуждение, и это первый результат Google для jaxb CDATA, Я отвечаю немного другой вопрос)