javaxmlsoap

How to retrieve element value from SOAP response using Java?


I am trying to get the tag value from the below String response getting from salesforce,

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://soap.sforce.com/2006/04/metadata">
   <soapenv:Body>
      <listMetadataResponse>
         <result>
            <createdById>00528000001m5RRAAY</createdById>
            <createdByName>Hariprasath Thanarajah</createdByName>
            <createdDate>1970-01-01T00:00:00.000Z</createdDate>
            <fileName>objects/EmailMessage.object</fileName>
            <fullName>EmailMessage</fullName>
            <id />
            <lastModifiedById>00528000001m5RRAAY</lastModifiedById>
            <lastModifiedByName>Hariprasath Thanarajah</lastModifiedByName>
            <lastModifiedDate>1970-01-01T00:00:00.000Z</lastModifiedDate>
            <namespacePrefix />
            <type>CustomObject</type>
         </result>
      </listMetadataResponse>
   </soapenv:Body>
</soapenv:Envelope>

Above we had the tag <fullName>. I'll need to get the value inside the tag and put it in the String array. I have tried with substring method but It returns only one value. Can anyone suggest me to do this?


Solution

  • I have tried like below,

    public static Document loadXMLString(String response) throws Exception
    {
        DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        InputSource is = new InputSource(new StringReader(response));
    
        return db.parse(is);
    }
    
    public static List<String> getFullNameFromXml(String response, String tagName) throws Exception {
        Document xmlDoc = loadXMLString(response);
        NodeList nodeList = xmlDoc.getElementsByTagName(tagName);
        List<String> ids = new ArrayList<String>(nodeList.getLength());
        for(int i=0;i<nodeList.getLength(); i++) {
            Node x = nodeList.item(i);
            ids.add(x.getFirstChild().getNodeValue());             
            System.out.println(nodeList.item(i).getFirstChild().getNodeValue());
        }
        return ids;
    }
    

    From above code, you will get ids list. After that, you can put those into the String Array and return those into String array like below,

    List<String> output = getFullNameFromXml(response, "fullName");
    String[] strarray = new String[output.size()];
    output.toArray(strarray);
    System.out.print("Response Array is "+Arrays.toString(strarray));