我有一个从SOAP请求返回的Java对象,我想做的就是将它编组为XML字符串。
问题是这个对象的类定义对我来说是不可编辑的,因为它是编译源代码并且它没有@XmlRootElement注释,因此当我尝试使用JAXBElement和Marshaller以传统方式编组时它会失败。
即使我使用这样的QName:
JAXBContext jaxbContext = JAXBContext.newInstance(Car.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
// format the XML output
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
QName qName = new QName("info.source4code.jaxb.model", "car");
JAXBElement<Car> root = new JAXBElement<Car>(qName, Car.class, car);
jaxbMarshaller.marshal(root, stringWriter);
我得到一个例外:
javax.xml.bind.MarshalException - with linked exception: [javax.xml.bind.JAXBException: class org.com.RetrieveDetailsResponse nor any of its super class is known to this context.]
该类的定义如下:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "retrieveDetailsResponse", propOrder = {
"detailsList"
})
public class RetrieveDetailsResponse {
我想做的就是把这个回复转换成XML文本,看起来很简单,但让我发疯,请帮助。
编辑:我尝试了下面发布的类似问题的答案,但它并没有解决我的问题。