I am trying to handle soap response from a webservice. I have used wsimport tool to generate client class for handling soap response. Below are the sample soap response and java handler.
Soap Response :
<?xml version="1.0" encoding="UTF-8"?>
<DataSet xmlns="http://tempuri.org/">
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="NTIS">
<xs:complexType>
<xs:sequence>
<xs:element name="Error" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet xmlns="">
<NTIS diffgr:id="NTIS1" msdata:rowOrder="0" diffgr:hasChanges="inserted">
<Error>UserName and/or Password are invalid.</Error>
</NTIS>
</NewDataSet>
</diffgr:diffgram>
</DataSet>
Java handler class
package org.tempuri;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAnyElement;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import org.w3._2001.xmlschema.Schema;
/**
* <p>Java class for anonymous complex type.
*
* <p>The following schema fragment specifies the expected content contained within this class.
*
* <pre>
* <complexType>
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element name="GetQueryNewResult" minOccurs="0">
* <complexType>
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element ref="{http://www.w3.org/2001/XMLSchema}schema"/>
* <any/>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
* </element>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"getQueryNewResult"
})
@XmlRootElement(name = "GetQueryNewResponse")
public class GetQueryNewResponse {
@XmlElement(name = "GetQueryNewResult")
protected GetQueryNewResponse.GetQueryNewResult getQueryNewResult;
/**
* Gets the value of the getQueryNewResult property.
*
* @return
* possible object is
* {@link GetQueryNewResponse.GetQueryNewResult }
*
*/
public GetQueryNewResponse.GetQueryNewResult getGetQueryNewResult() {
return getQueryNewResult;
}
/**
* Sets the value of the getQueryNewResult property.
*
* @param value
* allowed object is
* {@link GetQueryNewResponse.GetQueryNewResult }
*
*/
public void setGetQueryNewResult(GetQueryNewResponse.GetQueryNewResult value) {
this.getQueryNewResult = value;
}
/**
* <p>Java class for anonymous complex type.
*
* <p>The following schema fragment specifies the expected content contained within this class.
*
* <pre>
* <complexType>
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element ref="{http://www.w3.org/2001/XMLSchema}schema"/>
* <any/>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"schema",
"any"
})
public static class GetQueryNewResult {
@XmlElement(namespace = "http://www.w3.org/2001/XMLSchema", required = true)
protected Schema schema;
@XmlAnyElement(lax = true)
protected Object any;
/**
* Gets the value of the schema property.
*
* @return
* possible object is
* {@link Schema }
*
*/
public Schema getSchema() {
return schema;
}
/**
* Sets the value of the schema property.
*
* @param value
* allowed object is
* {@link Schema }
*
*/
public void setSchema(Schema value) {
this.schema = value;
}
/**
* Gets the value of the any property.
*
* @return
* possible object is
* {@link Object }
*
*/
public Object getAny() {
return any;
}
/**
* Sets the value of the any property.
*
* @param value
* allowed object is
* {@link Object }
*
*/
public void setAny(Object value) {
this.any = value;
}
}
}
Client program :
package org.ritwik.client;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import javax.xml.soap.Node;
import org.tempuri.BACOnlineResponse;
import org.tempuri.BACOnlineResponse.BACOnlineResult;
import org.tempuri.BASCOnlineResponse;
import org.tempuri.BASCOnlineResponse.BASCOnlineResult;
import org.tempuri.DEAAppSearch;
import org.tempuri.DEAAppSearchResponse;
import org.tempuri.DEAAppSearchResponse.DEAAppSearchResult;
import org.tempuri.Deawebsvc;
import org.tempuri.DeawebsvcSoap;
import org.tempuri.GetIssueDate;
import org.tempuri.GetIssueDateResponse;
import org.tempuri.GetQueryResponse;
import org.tempuri.GetUserInfoResponse;
import org.tempuri.GetUserInfoResponse.GetUserInfoResult;
import org.tempuri.IsUserValidResponse;
import org.tempuri.ObjectFactory;
import org.w3c.dom.Element;
public class WsClient {
/**
* @param args
* @throws JAXBException
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Deawebsvc deaw=new Deawebsvc();
DeawebsvcSoap impl=deaw.getDeawebsvcSoap();
ObjectFactory of=new ObjectFactory();
DEAAppSearchResponse dsSearch=of.createDEAAppSearchResponse();
dsSearch.setDEAAppSearchResult(impl.deaAppSearch("deatest@ritwik.com"," deavalidation", "dea", "bac", "basc", "expirationFrom", "expirationTo", "company", "zip", "state", "pi", "maxRows"));
System.out.println(dsSearch.getDEAAppSearchResult().toString());
System.out.println(dsSearch.getDEAAppSearchResult().getAny());
}
}
Now the problem is I am unable to handle Result conet from "getDEAAppSearchResult().getAny()". Please suggest how to handle the content or unmarshal this.
org.tempuri.DEAAppSearchResponse$DEAAppSearchResult@7bc768 [diffgr:diffgram: null]
I had a similar problem, I used an Unmarshaller to unmarshal the detailed node to a meaningful object. In my problem, the detailed classes were generated (NewDataSet in your example). The following may work for you: