Как получить строковое представление XmlType? - PullRequest
15 голосов
/ 17 мая 2011

Можно ли преобразовать javax.xml.bind.annotation.XmlType в строковое представление XML?

Пример:

Следующий класс Req из сторонней библиотеки, поэтому я не могу переопределить метод toString ().

@javax.xml.bind.annotation.XmlAccessorType(javax.xml.bind.annotation.XmlAccessType.FIELD)
@javax.xml.bind.annotation.XmlType(name = "req", propOrder = {"myDetails", "customerDetails"})
public class Req  {
...
}

В моем приложении я хочу просто получить строковое представление XML, чтобы я мог записать его в файл:

<Req>
    <MyDetails>
    ...
    </MyDetails>
    <CustomerDetails>
    ...
    </CustomerDetails>
</Req>

Когда я пытаюсь использовать JAXB и Marshall для преобразования в строку XML:

JAXBContext context = JAXBContext.newInstance(Req.class);
Marshaller marshaller = context.createMarshaller();
StringWriter sw = new StringWriter();
marshaller.marshal(instanceOfReq, sw);
String xmlString = sw.toString();

Я получаю следующее исключение:

javax.xml.bind.MarshalException
    - with linked exception:
    [com.sun.istack.SAXException2: unable to marshal type "mypackage.Req" as an element because it is missing an @XmlRootElement annotation]

Я посмотрел другие классы в сторонней библиотеке, и ни один из них не использовал аннотацию @XmlRootElement. Есть ли способ обойти это?

Ответы [ 2 ]

21 голосов
/ 17 мая 2011

Вы можете использовать JAXB и перенаправить его в строку XML

JAXBContext context = JAXBContext.newInstance(Req.class);
Marshaller marshaller = context.createMarshaller();
StringWriter sw = new StringWriter();
marshaller.marshal(instanceOfReq, sw);

String xmlString = sw.toString();
6 голосов
/ 08 мая 2013

Добавляя к тому, что указал Bala R, вы можете сделать это, если ваш элемент JAXB не имеет @xmlrootelement

JAXBContext context = JAXBContext.newInstance(YourClass.class);
            Marshaller marshaller = context.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
            StringWriter sw = new StringWriter();
            JAXBElement jx = new JAXBElement(new QName("YourRootElement"), YourClass.class, input);
            marshaller.marshal(jx, sw);
            String xmlString = sw.toString();

Это также было указано здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...