1

I am working on a project where i have to make a SOAP Request object from the following code:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mod="http://www.tmforum.org/xml/tip/model" xmlns:prob="http://www.tmforum.org/xml/tip/cbe/problem" xmlns:geo="http://www.tmforum.org/xml/tip/cbe/loc/geo" xmlns:loc="http://www.tmforum.org/xml/tip/cbe/loc" xmlns:tt="http://www.tmforum.org/xml/tip/cbe/tt" xmlns:ent="http://www.tmforum.org/xml/tip/internal/entity" xmlns:ext="http://www.tmforum.org/xml/tip/cbe/problem/extensions">
   <soapenv:Header/>
   <soapenv:Body>
      <mod:retrieveProblemRequest>
         <!--Optional:-->
         <mod:customerProblem>
            <!--Optional:-->
            <prob:problemId>0005004426</prob:problemId>

         </mod:customerProblem>
      </mod:retrieveProblemRequest>
   </soapenv:Body>
</soapenv:Envelope>

I am using KSOAP2 to make request object but suffereing a problem in assigning namespaces, so the request sent is always incorrect.

Kindly provide me the Code to convert this SoapRequest into SoapObject in android..

EDIT: my code is as follows:

private static String SOAP_ACTION1 = "/BusinessServices/Inbound/TIP_R4GCanonicalModel_model_problemservicev1dot3-service0.serviceagent/ProblemServiceV1dot3Endpoint0/retrieveProblem";
    private static String REQUEST_TARGET_NAMESAPCE="http://xmlns.example.com/1362214927265/";
    private static String TARGET_NAMESPACE_MOD = "http://www.tmforum.org/xml/tip/model/";
    private static String NAMESPACE_PROB="http://www.tmforum.org/xml/tip/cbe/problem/";
    private static String METHOD_NAME = "retrieveProblem";
    private static String URL = "http://10.128.28.44:10005/BusinessServices/Inbound/ProblemService_proxy.serviceagent/ProblemServiceV1dot3Endpoint0";
public static String LOG_TAG = "SOAPRequestResponseActivity";


    @Override
    public void onCreate(Bundle savedInstanceState)

    {

        super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            btnFar = (Button) findViewById(R.id.btnFar);
        btnFar.setOnClickListener(new View.OnClickListener()

        {
            @Override
            public void onClick(View v)

            {

                // Initialize soap request + add parameters

                SoapObject request = new SoapObject(REQUEST_TARGET_NAMESAPCE,METHOD_NAME);

                SoapObject retrieveInfo=new SoapObject(TARGET_NAMESPACE_MOD,"retrieveProblemRequest");

                SoapObject customerObject=new SoapObject(TARGET_NAMESPACE_MOD, "customerProblem");

                PropertyInfo info=new PropertyInfo();
                info.setNamespace(NAMESPACE_PROB);
                info.setName("problemId");
                info.setValue("0005004426");

                customerObject.addProperty(info);
                retrieveInfo.addSoapObject(customerObject);
                request.addSoapObject(retrieveInfo);

   Log.i(LOG_TAG, "===Request soap object after params=="
                        + request.toString());

                // Declare the version of the SOAP request

                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                        SoapEnvelope.VER11);


                envelope.implicitTypes=true;
                envelope.setOutputSoapObject(request);

                try {

                    HttpTransportSE androidHttpTransport = new HttpTransportSE(
                            URL);



                    ArrayList<HeaderProperty> headerProperty = new ArrayList<HeaderProperty>();

                    headerProperty.add(new HeaderProperty("SOAPAction", "/BusinessServices/Inbound/TIP_R4GCanonicalModel_model_problemservicev1dot3-service0.serviceagent/ProblemServiceV1dot3Endpoint0/retrieveProblem"));

                    androidHttpTransport.call(SOAP_ACTION1, envelope,headerProperty);

As Soon As Call methode is called it throws Exception HttpRequestFailed with error code 500.Since the request is incorrect somewhere server is not able to parse it.

Kindly provide me appropriate solution.

Amritpal Singh
  • 984
  • 2
  • 14
  • 33
  • 1
    http://androidtestexample.blogspot.in/2012/02/soap.html – Raghunandan Apr 02 '13 at 06:09
  • @Raghunandan Thanks for the reply..I have gone through a large number of such links..but couldnt find solution that includes this much namespaces.. i request you if you could devote some time and write Code for the above SOAP Body...I shall be highly thankful to you.. – Amritpal Singh Apr 02 '13 at 06:24

1 Answers1

1

I came across a library named ksoap2-android which is very helpful you can try this .Here is the class file i used to call web methods

 public class CallSOAP {

private String SOAP_ACTION="your action url";
private String OPERATION_NAME="";//The web method OR web service you are going to call
private final String WSDL_TARGET_NAMESPACE=SOAP_ACTION;
private  final String SOAP_ADDRESS=Configuration.WEB_SERVICE_URL;//ip-address of serever where you host your service 
private Exception exception;
private String ErrorMsg="";
private String TERST_URL="" ;
public Object call(String MethodeName,ArrayList<PropertyInfo> Parameters){

  this.OPERATION_NAME=MethodeName;
  SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE, OPERATION_NAME);
 if(Parameters != null && Parameters.size()>0){
   for(PropertyInfo propertyInfo : Parameters){
      request.addProperty(propertyInfo);
 }
}

SoapSerializationEnvelope  envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet= true;
envelope.setOutputSoapObject(request);
HttpTransportSE httpTransport =null;
if(!this.TERST_URL.equals(""))
  httpTransport = new HttpTransportSE(this.TERST_URL);
else
  httpTransport = new HttpTransportSE(SOAP_ADDRESS);
 Object Response =null;
 try{
    httpTransport.call(SOAP_ACTION+OPERATION_NAME, envelope);
    Response=envelope.getResponse();
  }
 catch (SocketTimeoutException ex) {
     this.ErrorMsg="Unable to connect";
      Response=null;
     this.exception=ex;
  }
  catch (IOException ie) {
   this.ErrorMsg="Unable to connect";
  Response=null;
   this.exception=ie;
  }
   catch (Exception e) {
    this.ErrorMsg="Unable to connect";
    Response=null;
    this.exception=e;
 }
      return Response;
   }
}

Please note that i was using web-service written in ASP.NET frame work .That's why i provide

envelope.dotNet= true;

For reference :See this tutorial

and See this Question

Community
  • 1
  • 1
edwin
  • 7,985
  • 10
  • 51
  • 82
  • 1
    @edwin.. Thankx for ur reply i tried your answer but it didnt work either.. The problem is I have too much of namspces in my request and I cant figure out which namespace to be used where..? i am posting my code in EDIT Section see if you could figure out the error..please..! – Amritpal Singh Apr 03 '13 at 07:49