gpt4 book ai didi

java - 使用 namespace 前缀解码 soap 响应

转载 作者:行者123 更新时间:2023-11-30 11:30:57 25 4
gpt4 key购买 nike

我正在尝试使用 jaxb 解码 soap 响应。

我尝试使用下面的代码来查找根元素

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(false);
DocumentBuilder db;
try {
db = dbf.newDocumentBuilder();
Document d = db.parse(new File("response.xml"));

Unmarshaller unmarshaller = null;
Results results = null;
unmarshaller = JAXBContext.newInstance(Results.class).createUnmarshaller();

Node getNumberResponseElt = d.getElementsByTagName("results").item(0);
JAXBElement<Results> rs = unmarshaller.unmarshal(new DOMSource(getNumberResponseElt),Results.class);
results = rs.getValue();

}

这是我的示例回复

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header/>
<soapenv:Body>
<service:ServiceResponse xmlns:out="http://example.com/Person/PersonData/v1" xmlns:service="http://example.com/Person/PersonData/v1/" xmlns:xs4xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<results>
<out:result>
<out:person>
<out:personName>
<out:firstName>First</out:firstName>
<out:lastName>Last</out:lastName>
</out:personName>
<out:gender>M</out:gender>
</out:person></out:result></results></service:ServiceResponse></soapenv:Body></soapenv:Envelope>

我能够获取 results 对象,但是当我尝试访问 results 中的 result 时,由于前缀 输出:

谁能帮我摆脱这一切?

更新:谁能帮我解决这个问题?

我使用 stax xml 解析器来解析 results 但我看到其中的所有值都是 null。

最佳答案

我认为问题出在 namespace 位置。您可以使用 StAX XMLStreamReader 来解析 XML 并前进到正确的元素,然后在此时从 XMLStreamReader 解码

http://blog.bdoughan.com/2012/08/handle-middle-of-xml-document-with-jaxb.html

关于java - 使用 namespace 前缀解码 soap 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17483699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com