当前位置: 首页 > 知识库问答 >
问题:

使用命名空间前缀解组soap响应

伯逸明
2023-03-14

我试图使用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>

我能够获取结果对象,但当我尝试访问结果中的结果时,由于前缀out,它显示为null:

有人能帮我脱身吗?

更新:有人能帮我吗?

我使用stax xml解析器解析为结果,但我将其中的所有值都视为null。

共有1个答案

郗浩
2023-03-14

我认为问题是命名空间位置。您可以使用StAX XMLStreamReader解析XML并前进到正确的元素,然后在此时从XMLStreamReader散集

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

 类似资料:
  • 问题内容: 在花了几个令人沮丧的时间后,我正在寻求您的帮助。 我正在尝试从SOAP响应中获取特定节点的内容。 响应是 我试图了解 的节点和子节点。由于XML包含名称空间 不起作用。我已经阅读了许多文章,例如 http://www.sitepoint.com/blogs/2005/10/20/simplexml-and-namespaces/ http://blog.stuartherbert.co

  • 我想使用JAXB来 将xml解组为java对象, 将其封送回xml 并使用名称空间生成完全相同的输出 下面是原始的 XML: 我正在使用以下POJO: 我用于取消/编组的代码: 这实际上不起作用,我甚至无法解组初始xml。但是如果我尝试封送一个POJO,我只在代码中设置字段。我得到以下结果: 我如何摆脱这个ns3前缀?

  • 我正在从jaxb模型生成rest响应(使用Jersey)。对于某些响应,生成的XML将名称空间前缀(ns2)添加到名称空间属性中,尽管它们都存在于同一个名称空间中。但对其他人来说,这完全没问题。 根据我的分析,我认为当一个复杂元素(另一个jaxb模型)在其中使用时会发生这种情况。但所有这些模型都在package-info.java中的相同名称空间中声明。 这是代码。 XYZModel.class

  • 我正在使用 JAXB 来对我正在实现 Java 客户端的 Web 服务进行封送和解组和取消马歇尔请求和响应。然而,我被困在以下回应上,我需要解体。 为了将响应表示为Java对象,我有以下域类: 然后,我执行以下操作来解除元帅: 解编组没有发生任何事件。 对象是使用两个列表创建的。为空,有一项。但是,该项目上的和 null。我认为这与XML命名空间有关,但我无法弄清楚如何修复它。 我尝试了另一种方式

  • 问题内容: 我正在使用JQuery执行Web服务调用,它是ajax函数,无法解析返回的数据。当我警告数据(alert($(data).find(“ return”)。text())为空时,我看到服务器响应xml数据,如下所示,当我警告(数据)时,我得到了[object XMLDocument给定我的XML结构并在下面使用命名空间,txt = $(data).find(“ return”)。text

  • 只有在soap信封已被移除的情况下,JAXB才能解组XML。然而,我试图解组的SOAP响应在SOAP信封上有其名称空间声明。如果删除soap信封,名称空间声明也将被删除。因此,标签的前缀将指无。这会导致JAXB抛出错误。如果在SOAP信封上声明了名称空间,如何使用JAXB对SOAP响应进行解组? 我需要解组的XML的类似示例如下: 如果我拿掉肥皂信封,会发生这样的事情: 如果我移除soap信封,名