title: Cannot unmarshal soap body to java object
body: <p>This is related to my earlier post here <a href="https://stackoverflow.com/questions/26709562/getsoapbody-returns-null-whereas-soapresponse-writeto-prints-the-whole-message">getSOAPBody returns NULL whereas SOAPResponse.writeTo prints the whole message, Strange?</a></p>
  
  <p>I am posting my code that i am using to unmarshal. I receive all nulls in the target object</p>
  
  <pre><code>package trials;
  
  import java.io.ByteArrayInputStream;
  import java.io.ByteArrayOutputStream;
  
  import javax.xml.bind.JAXBContext;
  import javax.xml.bind.JAXBElement;
  import javax.xml.bind.Unmarshaller;
  import javax.xml.soap.MessageFactory;
  import javax.xml.soap.MimeHeaders;
  import javax.xml.soap.SOAPBody;
  import javax.xml.soap.SOAPConnection;
  import javax.xml.soap.SOAPConnectionFactory;
  import javax.xml.soap.SOAPElement;
  import javax.xml.soap.SOAPEnvelope;
  import javax.xml.soap.SOAPMessage;
  import javax.xml.soap.SOAPPart;
  import javax.xml.stream.XMLInputFactory;
  import javax.xml.stream.XMLStreamReader;
  import javax.xml.transform.stream.StreamSource;
  
  public class SOAPClientSAAJ {
  
      public static void main(String args[]) throws Exception {
          // Create SOAP Connection
          SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
          SOAPConnection soapConnection = soapConnectionFactory.createConnection();
  
          // Send SOAP Message to SOAP Server
          String url = "http://ws.cdyne.com/emailverify/Emailvernotestemail.asmx";
          SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(), url);
  
          System.out.println("Body");
  
          // print SOAP Response
          System.out.print("Response SOAP Message:");
  
          System.out.println("SOAP Body 2= " + soapResponse.getSOAPBody());
  
          System.out.println("SOAP Body 2=" + soapResponse.getSOAPPart().getEnvelope().getBody());
  
          soapResponse.writeTo(System.out);
          SOAPBody body = soapResponse.getSOAPBody();
          System.out.println("\n");
          System.out.println(body.getElementsByTagName("ResponseText").item(0).getTextContent());
          System.out.println(body.getElementsByTagName("ResponseCode").item(0).getTextContent());
          System.out.println(body.getElementsByTagName("GoodEmail").item(0).getTextContent());
  
          ByteArrayOutputStream bos = new ByteArrayOutputStream();
          soapResponse.writeTo(bos);
          XMLInputFactory xif = XMLInputFactory.newFactory();
          StreamSource xml = new StreamSource(new ByteArrayInputStream(bos.toByteArray()));
          XMLStreamReader xsr = xif.createXMLStreamReader(xml);
          xsr.nextTag();
          while (!xsr.getLocalName().equals("VerifyEmailResult")) {
              xsr.nextTag();
          }
  
          JAXBContext jc = JAXBContext.newInstance(VerifyEmailResult.class);
          Unmarshaller unmarshaller = jc.createUnmarshaller();
          JAXBElement&lt;VerifyEmailResult&gt; jb = unmarshaller.unmarshal(xsr, VerifyEmailResult.class);
          xsr.close();
  
          VerifyEmailResult v = jb.getValue();
          System.out.println(v.ResponseText);
          System.out.println(v.ResponseCode);
          System.out.println(v.LastMailServer);
          System.out.println(v.GoodEmail);
  
          soapConnection.close();
      }
  
  
  
  private static SOAPMessage createSOAPRequest() throws Exception {
      MessageFactory messageFactory = MessageFactory.newInstance();
      SOAPMessage soapMessage = messageFactory.createMessage();
      SOAPPart soapPart = soapMessage.getSOAPPart();
  
      String serverURI = "http://ws.cdyne.com/";
  
      // SOAP Envelope
      SOAPEnvelope envelope = soapPart.getEnvelope();
      envelope.addNamespaceDeclaration("example", serverURI);
  
      /*
       * Constructed SOAP Request Message: &lt;SOAP-ENV:Envelope
       * xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
       * xmlns:example="http://ws.cdyne.com/"&gt; &lt;SOAP-ENV:Header/&gt;
       * &lt;SOAP-ENV:Body&gt; &lt;example:VerifyEmail&gt;
       * &lt;example:email&gt;mutantninja@gmail.com&lt;/example:email&gt;
       * &lt;example:LicenseKey&gt;123&lt;/example:LicenseKey&gt; &lt;/example:VerifyEmail&gt;
       * &lt;/SOAP-ENV:Body&gt; &lt;/SOAP-ENV:Envelope&gt;
       */
  
      // SOAP Body
      SOAPBody soapBody = envelope.getBody();
      SOAPElement soapBodyElem = soapBody.addChildElement("VerifyEmail", "example");
      SOAPElement soapBodyElem1 = soapBodyElem.addChildElement("email", "example");
      soapBodyElem1.addTextNode("mutantninja@gmail.com");
      SOAPElement soapBodyElem2 = soapBodyElem.addChildElement("LicenseKey", "example");
      soapBodyElem2.addTextNode("123");
  
      MimeHeaders headers = soapMessage.getMimeHeaders();
      headers.addHeader("SOAPAction", serverURI + "VerifyEmail");
  
      soapMessage.saveChanges();
  
      /* Print the request message */
      System.out.print("Request SOAP Message:");
      soapMessage.writeTo(System.out);
      System.out.println();
  
      return soapMessage;
  }
  </code></pre>
  
  <p>}</p>
  
  <p>Here is my class which i am trying to unmarshal to</p>
  
  <pre><code>package trials;
  
  import javax.xml.bind.annotation.XmlAccessType;
  import javax.xml.bind.annotation.XmlAccessorType;
  import javax.xml.bind.annotation.XmlRootElement;
  
  @XmlRootElement
  @XmlAccessorType(XmlAccessType.FIELD)
  public  class VerifyEmailResult {
      public String ResponseText;
      public String ResponseCode;
      public String LastMailServer;
      public String GoodEmail;
  }
  </code></pre>
  
  <p>Here is my console output</p>
  
  <pre><code>Request SOAP Message:&lt;SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:example="http://ws.cdyne.com/"&gt;&lt;SOAP-ENV:Header/&gt;&lt;SOAP-ENV:Body&gt;&lt;example:VerifyEmail&gt;&lt;example:email&gt;mutantninja@gmail.com&lt;/example:email&gt;&lt;example:LicenseKey&gt;123&lt;/example:LicenseKey&gt;&lt;/example:VerifyEmail&gt;&lt;/SOAP-ENV:Body&gt;&lt;/SOAP-ENV:Envelope&gt;
  Body
  Response SOAP Message:SOAP Body 2= [soap:Body: null]
  SOAP Body 2=[soap:Body: null]
  &lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;&lt;soap:Body&gt;&lt;VerifyEmailResponse xmlns="http://ws.cdyne.com/"&gt;&lt;VerifyEmailResult&gt;&lt;ResponseText&gt;Current license key only allows so many checks&lt;/ResponseText&gt;&lt;ResponseCode&gt;9&lt;/ResponseCode&gt;&lt;LastMailServer/&gt;&lt;GoodEmail&gt;false&lt;/GoodEmail&gt;&lt;/VerifyEmailResult&gt;&lt;/VerifyEmailResponse&gt;&lt;/soap:Body&gt;&lt;/soap:Envelope&gt;
  
  Current license key only allows so many checks
  9
  false
  null
  null
  null
  null
  </code></pre>