我有一个可以正常工作的SOAP集成项目,我需要编写一些测试。
为避免在测试过程中调用Web服务,我将一些SOAP响应保存到XML文件中,但是我不知道如何将这些XML转换为适当的对象。
我尝试使用JAXBContext
/ Unmarshaller
,但收到错误expected elements are (None)
,我认为这与以下事实有关:与XML响应关联的类没有有一个@XmlRootElement
注释(我不能更改它)。
This question与我的非常相似,但是当前答案并未真正指定如何从响应中获取最终对象。
我还不清楚是否必须保留SOAP专用标签,或者剥离它们并将文件视为普通XML会更容易。
答案 0 :(得分:0)
看到this answer后,我开始使用它。
问题是如预期的那样缺少@XmlRootElement
,为了使其正常工作,应使用unmarshall()
的2参数版本(来自另一个问题的代码):
String pathname = "file.xml";
InputStream stream = new FileInputStream(pathname);
JAXBContext jaxbContext = JAXBContext.newInstance(UserType.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLEventReader someSource = factory.createXMLEventReader(stream);
JAXBElement<UserType> userElement = jaxbUnmarshaller.unmarshal(someSource, UserType.class); UserType user = userElement.getValue();