java - 无法处理 SOAP 响应

标签 java parsing soap response

我有以下代码:

SOAPConnectionFactory sfc = SOAPConnectionFactory.newInstance();
          SOAPConnection connection = sfc.createConnection();

          MessageFactory mf = MessageFactory.newInstance();
          SOAPMessage sm = mf.createMessage();
          SOAPHeader sh = sm.getSOAPHeader();
          SOAPBody sb = sm.getSOAPBody();
          sh.detachNode();
          MimeHeaders mimeHeader = sm.getMimeHeaders();

          //change header's attribute
          mimeHeader.setHeader("SOAPAction", "\"urn:Belkin:service:basicevent:1#GetBinaryState\"");
          //sh.addAttribute(SOAPFactory.newInstance().createName("SOAPAction", "", "urn:Belkin:service:basicevent:1#SetBinaryState"),"");
          QName bodyName = new QName("urn:Belkin:service:basicevent:1", "GetBinaryState", "u");

          //sm.add            

          SOAPBodyElement bodyElement = sb.addBodyElement(bodyName);
          QName qn = new QName("BinaryState");

          System.out.println("\n Soap Request:\n");
          sm.writeTo(System.out);
          System.out.println();

          URL endpoint = new URL("http://" + ipAddress + ":49153/upnp/control/basicevent1");
          SOAPMessage response = connection.call(sm, endpoint);

          connection.close();
          System.out.println(response.getContentDescription());
        } catch (Exception ex) {
          ex.printStackTrace();
        }

给我这个回复(在wireshark中)

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"                    
    s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <s:Body>
        <u:GetBinaryStateResponse xmlns:u="urn:Belkin:service:basicevent:1">
            <BinaryState>0</BinaryState>
        </u:GetBinaryStateResponse>
    </s:Body>
</s:Envelope>

我想在 Java 中获取 BinaryState 值 (0) 或 (1)。 我很难弄清楚它在 SOAPMessage 响应中的位置。帮助会很棒。或者即使我可以将 XML 响应放入字符串中并自己解析它。

最佳答案

将 SOAPMessage 转换为字符串,您可以在其中

SOAPMessage response = connection.call(sm, endpoint);

这样做:

SOAPMessage response = connection.call(sm, endpoint);
ByteArrayOutputStream os = new ByteArrayOutputStream();
response.writeTo(os);
String responseXml = new String(os.toByteArray());
// work with responseXml here...

编辑:

作为替代方案,如果您想要的只是您已经知道名称的元素的特定值(并且至少有一个存在),您可以通过以下方式获得它:

String responseBinaryState = response.getSOAPBody()
                                     .getElementsByTagName("BinaryState")
                                     .item(0).getTextContent();
System.out.println("BinaryState: "+responseBinaryState);

关于java - 无法处理 SOAP 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16389943/

相关文章:

java - 创建并读取测试文件android

java - Google Play 保存的游戏中 resolveConflict 的 snapshotId

php - wp_parse_args 有什么作用?

java - 如何从Web Service 获取请求源?

ios - 存储到 NSString 中的 SOAP 响应需要被解析

java - 如何在eclipse中正确地将.class文件导入到.java文件中?

Java 正则表达式不匹配,正则表达式看起来正常

c - 如何检查简单文本文件中的换行符使用了哪个(ASCII)代码?

ruby-on-rails - 您将如何解析 Ruby 中的 url 以获取主域?

java - 使用相同元素的 SOAP 请求和响应未显示在 SoapUI 中