如果名称空间声明位于SOAP信封上,如何使用JAXB解组SOAP响应?

如果名称空间声明位于SOAP信封上,如何使用JAXB解组SOAP响应?,第1张

如果名称空间声明位于SOAP信封上,如何使用JAXB解组SOAP响应

您可以使用StAX解析器来解析SOAP消息,然后将其前进

XMLStreamReader
getNumberResponse
元素,并使用带有类参数的unmarshal方法。Java
SE 6中包含一个StAX解析器,但是您需要为Java SE
5下载一个StAX解析器。Woodstox是流行的StAX解析器。

响应

package forum11465653;public class Response {    private long number;    public long getNumber() {        return number;    }    public void setNumber(long number) {        this.number = number;    }}

演示版

An

XMLStreamReader
有一个
NamespaceContext
。在
NamespaceContext
知道所有当前级别活动命名空间声明。您的JAXB(JSR-222)实现将能够利用它来获取必要的信息。

package forum11465653;import java.io.FileReader;import javax.xml.bind.*;import javax.xml.stream.*;public class Demo {    public static void main(String[] args) throws Exception{        XMLInputFactory xif = XMLInputFactory.newFactory();        XMLStreamReader xsr = xif.createXMLStreamReader(new FileReader("src/forum11465653/input.xml"));        xsr.nextTag(); // Advance to Envelope tag        xsr.nextTag(); // Advance to Body tag        xsr.nextTag(); // Advance to getNumberResponse tag        System.out.println(xsr.getNamespaceContext().getNamespaceURI("ns"));        JAXBContext jc = JAXBContext.newInstance(Response.class);        Unmarshaller unmarshaller = jc.createUnmarshaller();        JAXBElement<Response> je = unmarshaller.unmarshal(xsr, Response.class);        System.out.println(je.getName());        System.out.println(je.getValue());    }}

输出量

http://example.com/{http://example.com/}getNumberResponseforum11465653.Response@781f6226


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5489785.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存