Java Soap 请求 - 读取 soap 响应

标签 java web-services soap

我正在尝试从我从网络服务获得的响应中获取特定值。不幸的是我不知道该怎么做。我使用在 stackoverflow 上找到的代码来创建 soap 请求并将响应内容写入标准输出:

private static void printSOAPResponse(SOAPMessage soapResponse) throws Exception {
    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    Transformer transformer = transformerFactory.newTransformer();
    Source sourceContent = soapResponse.getSOAPPart().getContent();
    System.out.print("\nResponse SOAP Message = ");
    StreamResult result = new StreamResult(System.out);
    transformer.transform(sourceContent, result);
}

一切正常,但我不需要完整的响应内容:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bin="http://localhost/WebService/bindings" xmlns:typ="http://localhost/WebService/types">
   <soapenv:Header/>
   <soapenv:Body>
      <bin:doActionResponse>
         <bin:out>
            <typ:result>
               <typ:code>?</typ:code>
               <typ:description>?</typ:description>
            </typ:result>
         </bin:out>
      </bin:doActionResponse>
   </soapenv:Body>
</soapenv:Envelope>

我只需要此响应中的代码和描述的值(value)。我怎样才能做到这一点?

最佳答案

这是其他一些 xml 示例的完整工作示例;

public static void main(String[] args) throws IOException, SOAPException {

    String xmlInput = "  <soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"http://litwinconsulting.com/webservices/\">\n"
            + "   <soapenv:Header/>\n"
            + "   <soapenv:Body>\n"
            + "   <web:RES>\n"
            + "      <web:RETURNCODE>100 </web:RETURNCODE> \n"
            + "   </web:RES>\n"
            + "      <web:GetWeather>\n"
            + "         <!--Optional:-->\n"
            + "         <web:City>%CITY%</web:City>\n"
            + "      </web:GetWeather>\n"
            + "   </soapenv:Body>\n"
            + "  </soapenv:Envelope>";

    MessageFactory factory = MessageFactory.newInstance();
    SOAPMessage message = factory.createMessage(
            new MimeHeaders(),
            new ByteArrayInputStream(xmlInput.getBytes(Charset
                    .forName("UTF-8"))));

    SOAPBody body = message.getSOAPBody();

    NodeList returnList = body.getElementsByTagName("web:RES");

    boolean isSuccess = false;
    for (int k = 0; k < returnList.getLength(); k++) {
        NodeList innerResultList = returnList.item(k).getChildNodes();
        for (int l = 0; l < innerResultList.getLength(); l++) {
            if (innerResultList.item(l).getNodeName()
                    .equalsIgnoreCase("web:RETURNCODE")) {
                isSuccess = Integer.valueOf(innerResultList.item(l)
                        .getTextContent().trim()) == 100 ? true : false;
            }
        }
    }
    if (isSuccess) {
        NodeList list = body.getElementsByTagName("web:GetWeather");

        for (int i = 0; i < list.getLength(); i++) {
            NodeList innerList = list.item(i).getChildNodes();

            for (int j = 0; j < innerList.getLength(); j++) {
                System.out.println(innerList.item(j).getNodeName());
                System.out.println(innerList.item(j).getTextContent());
            }
        }
    }

}

并在需要时导入;

  • java.io.ByteArrayInputStream;
  • java.io.IOException;
  • java.nio.charset.字符集;
  • javax.xml.soap.MessageFactory;
  • javax.xml.soap.MimeHeaders;
  • javax.xml.soap.SOAPBody;
  • javax.xml.soap.SOAPException;
  • javax.xml.soap.SOAPMessage;
  • org.w3c.dom.NodeList;

关于Java Soap 请求 - 读取 soap 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20460870/

相关文章:

java - 显示数组中的最大值和索引号

java - 一段时间后声音停止

web-services - 如何为 "check for updates"制作超高速网络服务器?

objective-c - 将 NSString 参数传递给 SOAP WS 会产生 "Illegal processing instruction target ("xml")"

php - SoapClient 调用返回 500 Internal Server Error

java - 将复杂类型 XSD 内联到 WSDL 中

Java ExecutorService 解决递归斐波那契数列

java - 无法设置 Elasticsearch JAVA API

java - CXF Webservice 客户端在提供 wsdl 时中断

java - tomcat过滤重定向的jsp页面不显示任何内容