I have this string representing a XML:
String soapCall=\"
Solution:
private byte[] callSOAPServer() {
byte[] result = null;
HttpParams httpParameters = new BasicHttpParams();
// Set the timeout in milliseconds until a connection is established.
int timeoutConnection = 15000;
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
// Set the default socket timeout (SO_TIMEOUT)
// in milliseconds which is the timeout for waiting for data.
int timeoutSocket = 35000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
DefaultHttpClient httpclient = new DefaultHttpClient(httpParameters);
/*
* httpclient.getCredentialsProvider().setCredentials( new
* AuthScope("os.icloud.com", 80, null, "Digest"), new
* UsernamePasswordCredentials(username, password));
*/
HttpPost httppost = new HttpPost(SERVER_URL );
httppost.setHeader("soapaction", SOAP_ACTION);
httppost.setHeader("Content-Type", "text/xml; charset=utf-8");
System.out.println("executing request" + httppost.getRequestLine());
//now create a soap request message as follows:
final StringBuffer soap = new StringBuffer();
soap.append("\n");
soap.append("");
// this is a sample data..you have create your own required data BEGIN
soap.append(" \n");
soap.append(" \n");
soap.append("" + body);
soap.append(" \n");
soap.append(" \n");
/* soap.append(body); */
// END of MEssage Body
soap.append("");
Log.i("SOAP Request", ""+soap.toString());
// END of full SOAP request message
try {
HttpEntity entity = new StringEntity(soap.toString(),HTTP.UTF_8);
httppost.setEntity(entity);
HttpResponse response = httpclient.execute(httppost);// calling server
HttpEntity r_entity = response.getEntity(); //get response
Log.i("Reponse Header", "Begin..."); // response headers
Log.i("Reponse Header", "StatusLine:"+response.getStatusLine());
Header[] headers = response.getAllHeaders();
for(Header h:headers){
Log.i("Reponse Header",h.getName() + ": " + h.getValue());
}
Log.i("Reponse Header", "END...");
if (r_entity != null) {
result = new byte[(int) r_entity.getContentLength()];
if (r_entity.isStreaming()) {
DataInputStream is = new DataInputStream(
r_entity.getContent());
is.readFully(result);
}
}
} catch (Exception E) {
Log.i("Exception While Connecting", ""+E.getMessage());
E.printStackTrace();
}
httpclient.getConnectionManager().shutdown(); //shut down the connection
return result;
}
2) You have to parse the output of above function returned byteArray. For example:
byte[] initReqrepsonse = callSOAPServer(soapBodymessage );
ByteArrayInputStream bais=new ByteArrayInputStream(initReqrepsonse);
// now parse the xml as
/** Handling XML */
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
/** Create handler to handle XML Tags ( extends DefaultHandler ) */
// ResponseParser is XML parser class which will parse the XML output.
ResponseParser myXMLHandler = new ResponseParser();
xr.setContentHandler(myXMLHandler);
Log.i("XML data", bais.toString());
xr.parse(new InputSource(bais));
This way,you can access Any SOAP webservice methods without third-party libraries. Please let me know if any corrections are required.
Formatted answer :
import java.io.BufferedReader;
import java.io.InputStreamReader;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.PostMethod;
/**
* * This program demonstrates consuming web service using Apache HTTPClient and
* SOAP message. * Reference:
* http://www.webservicex.net/stockquote.asmx?op=GetQuote * ClassPath: Keep these
* two files in class path: commons-httpclient-3.0.1.jar, commons-codec-1.4.jar * @author
* Bhavani P Polimetla * @since April-27-2011
*/
public class WSClient {
public static void main(String args[]) {
HttpClient httpClient = new HttpClient();
httpClient.getParams().setParameter("http.useragent",
"Web Service Test Client");
BufferedReader br = null;
String data = "<?xml version=\"1.0\" encoding=\"utf-8\"?> "
+ "<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\"> "
+ "<soap12:Body> "
+ "<GetQuote xmlns=\"http://www.webserviceX.NET/\"> "
+ "<symbol>INFY</symbol> " + "</GetQuote> "
+ "</soap12:Body> </soap12:Envelope>";
PostMethod methodPost = new PostMethod(
"http://www.webservicex.net/stockquote.asmx?op=GetQuote");
methodPost.setRequestBody(data);
methodPost.setRequestHeader("Content-Type", "text/xml");
try {
int returnCode = httpClient.executeMethod(methodPost);
if (returnCode == HttpStatus.SC_NOT_IMPLEMENTED) {
System.out
.println("The Post method is not implemented by this URI");
methodPost.getResponseBodyAsString();
} else {
br = new BufferedReader(new InputStreamReader(
methodPost.getResponseBodyAsStream()));
String readLine;
while (((readLine = br.readLine()) != null)) {
System.out.println(readLine);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
methodPost.releaseConnection();
if (br != null) try {
br.close();
} catch (Exception fe) {
fe.printStackTrace();
}
}
}
}
package ProductVerificationCard.in;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.app.Activity;
import android.content.Intent;``
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class AdminLogin extends Activity {
/** Called when the activity is first created. */
Button btn_ok;
TextView textView;
private static final String SOAP_ACTION = "http://tempuri.org/Login";
private static final String OPERATION_NAME = "Login";
private static final String WSDL_TARGET_NAMESPACE = "http://tempuri.org/";
private static final String SOAP_ADDRESS = "http://10.0.2.2/new/WebService.asmx";
String s;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn_ok=(Button) findViewById(R.id.btn_login);
textView=(TextView) findViewById(R.id.tv_error);
btn_ok.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,
OPERATION_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS);
try
{
httpTransport.call(SOAP_ACTION, envelope);
Object response = envelope.getResponse();
//textView.setText(response.toString());
s=response.toString();
if(s=="true")
{
Intent intent=new Intent(AdminLogin.this,MenuForm.class);
startActivity(intent);
}
else
{
textView.setText("Enter Valid Username or Password");
}
}
catch (Exception exception)
{
textView.setText(exception.toString());
}
// TODO Auto-generated method stub
}
});
}
}