Как получить представление строки XmlType?
Можно ли преобразовать 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. Как это обойти?
Ответы
Ответ 1
Вы можете использовать JAXB и перевести его в строку xml
JAXBContext context = JAXBContext.newInstance(Req.class);
Marshaller marshaller = context.createMarshaller();
StringWriter sw = new StringWriter();
marshaller.marshal(instanceOfReq, sw);
String xmlString = sw.toString();
Ответ 2
Добавление к тому, что указано в 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();
Это также было указано здесь.