将SOAP响应从XML文件解析为对象

时间:2019-01-05 14:11:59

标签: java soap xml-parsing jaxb

我有一个可以正常工作的SOAP集成项目,我需要编写一些测试。

为避免在测试过程中调用Web服务,我将一些SOAP响应保存到XML文件中,但是我不知道如何将这些XML转换为适当的对象。

我尝试使用JAXBContext / Unmarshaller,但收到错误expected elements are (None),我认为这与以下事实有关:与XML响应关联的类没有有一个@XmlRootElement注释(我不能更改它)。

This question与我的非常相似,但是当前答案并未真正指定如何从响应中获取最终对象。

我还不清楚是否必须保留SOAP专用标签,或者剥离它们并将文件视为普通XML会更容易。

1 个答案:

答案 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();