Java Soap Read Response value



我有一个soap响应,看起来像这样:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="urn:dcrown">
    <SOAP-ENV:Body>
        <ns1:jj_syncResponse xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/">
            <return xsi:type="tns:jj_sync">
                <verification xsi:type="xsd:bool">1</verification>
                <status xsi:type="xsd:bool">1</status>
            </return>
        </ns1:jj_syncResponse>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

如何读取

的值

验证

并赋值给变量

我试图修改以下代码,但没有成功:

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.MimeHeaders;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class testSoapRead {
         private static List<Element> elements(NodeList nodes) {
    List<Element> result = new ArrayList<Element>(nodes.getLength());
    for (int i = 0; i < nodes.getLength(); i++) {
      Node node = nodes.item(i);
      if (node instanceof Element)
        result.add((Element)node);
    }
    return result;
  }
  private static Element named(Element elem, String name) {
    if (!elem.getNodeName().equals(name))
      throw new IllegalArgumentException("Expected " + name + ", got " + elem.getNodeName());
    return elem;
  }
  @SuppressWarnings("unchecked")
  public static void main(String[] args) throws IOException, SOAPException {
    String xml = "<?xml version="1.0" encoding="utf-8"?>rn" +
    "<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" rn" +
    "               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" rn" +
    "               xmlns:xsd="http://www.w3.org/2001/XMLSchema">rn" +
    "    <soap:Body>rn" +
    "        <ns1:jj_syncResponse xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/"> rn" +
    "            <return xsi:type="tns:jj_sync">rn" +
    "               <verification xsi:type="xsd:bool">1</verification>rn" +
    "               <status xsi:type="xsd:bool">1</status>rn" +
    "            </return>rn" +
    "        </ns1:jj_syncResponse>rn" +
    "    </soap:Body>rn" +
    "</soap:Envelope>rn" +
    "";
    //System.out.println("xml : "+xml);
    MessageFactory factory = MessageFactory.newInstance();
    SOAPMessage msg = factory.createMessage(new MimeHeaders(), new ByteArrayInputStream(xml.getBytes(Charset.forName("UTF-8"))));
    msg.saveChanges();
    SOAPBody soapBody = msg.getSOAPBody();
    for (Element response : elements(soapBody.getElementsByTagName("jj_syncResponse"))) {
        List<Element> children = elements(result.getChildNodes());
        Element resultData = named(children.get(0), "return");
        List<Element> resultDataChildren = elements(resultData.getChildNodes());
        boolean validated = Boolean.getBoolean(named(resultDataChildren.get(0), "verification").getTextContent());
        boolean status = Boolean.getBoolean(named(resultDataChildren.get(0), "status").getTextContent());
        System.out.println("validated : "+validated+" &&& status : "+status);
    }
  }
} 

我找到了一个解决方案,下面是使用for循环的工作代码:

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.MimeHeaders;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class testSoapRead {
  @SuppressWarnings("unchecked")
  public static void main(String[] args) throws Exception, SOAPException {
    String xml = "<?xml version="1.0" encoding="utf-8"?>rn" +
    "<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" rn" +
    "               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" rn" +
    "               xmlns:xsd="http://www.w3.org/2001/XMLSchema">rn" +
    "    <soap:Body>rn" +
    "        <ns1:jj_syncResponse xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/"> rn" +
    "            <return xsi:type="tns:jj_sync">rn" +
    "               <verification xsi:type="xsd:bool">yyyy</verification>rn" +
    "               <status xsi:type="xsd:bool">nnnn</status>rn" +
    "            </return>rn" +
    "        </ns1:jj_syncResponse>rn" +
    "    </soap:Body>rn" +
    "</soap:Envelope>rn" +
    "";
    //System.out.println("xml : "+xml);
        MessageFactory factory = MessageFactory.newInstance();
        SOAPMessage message = factory.createMessage(new MimeHeaders(),
             new java.io.ByteArrayInputStream(xml.getBytes(
                                                  Charset.forName("UTF-8"))));
        
        SOAPBody body = message.getSOAPBody();
        NodeList returnList = body.getElementsByTagName("ns1:jj_syncResponse");
        String strVerification = "";
        String strStatus = "";      
        
           NodeList list = body.getElementsByTagName("return");
           for (int i = 0; i < list.getLength(); i++) {       
               NodeList innerList = list.item(i).getChildNodes();
               for (int j = 0; j < innerList.getLength(); j++) {
                  if (innerList.item(j).getNodeName() == "verification"){
                    strVerification = innerList.item(j).getTextContent();
                  }
                  if (innerList.item(j).getNodeName() == "status"){
                    strStatus = innerList.item(j).getTextContent();
                  }               
               }
           }
        
        System.out.println("strVerification : "+strVerification);
        System.out.println("strStatus : "+strStatus);
  }
}

结果是:

-------------------- 配置:soapcron 1.6.0_23 - JDK版本 --------------------

strVerification: yyyy

strStatus: nnnn

过程完成。

相关内容

最新更新