如何将Java对象从SOAP响应封送到没有@XmlRootElement的xml字符串?

时间:2016-03-10 00:58:24

标签: java xml soap jaxb marshalling

我有一个从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文本,看起来很简单,但让我发疯,请帮助。

编辑:我尝试了下面发布的类似问题的答案,但它并没有解决我的问题。

0 个答案:

没有答案