ChatGPT解决这个技术问题 Extra ChatGPT

如何在 Android 上调用 SOAP Web 服务 [关闭]

关闭。此问题不符合 Stack Overflow 准则。它目前不接受答案。我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便可以用事实和引用来回答它。 4年前关闭。改进这个问题

我很难找到有关如何使用 Android 调用标准 SOAP/WSDL Web 服务的好信息。我所能找到的要么是非常复杂的文档和对“kSoap2”的引用,然后是一些关于使用 SAX 手动解析它们的内容。好的,那很好,但现在是 2008 年,所以我认为应该有一些好的库来调用标准 Web 服务。

Web 服务基本上是在 NetBeans 中创建的。我希望 IDE 支持生成管道类。我只需要通过基于 Android 的手机联系基于 WSDL 的网络服务的最简单/最优雅的方式。

这是在 android 中使用 SOAP 的非常好的链接:How to Call Web Service in Android Using SOAP
如果有人以前熟悉 MS VS,使用 Mono for Android 将解决数据服务和 Web 服务的许多问题,一切都是简单快速的开发。还有不熟悉C#的人(代码跟Java很像),所有的库方法都一样,属性上的一些函数被替换了,所以名字差不多,以前写过Java for android的人可以很容易地用自己的经验写c#代码。
看看下面的链接,它有一个关于使用 Ksoap2 在 Android 中访问 web 服务的详细示例 Accessing a Webservice from Android
我相信使用 .Net Core 的 Xamarin/C# 可以做到这一点。见blogs.msdn.microsoft.com/webdev/2016/05/25/…
Spring 的这个 tool 看起来很有希望。

f
foxxtrot

Android 不提供任何类型的 SOAP 库。您可以自己编写,也可以使用 kSOAP 2 之类的东西。正如您所注意到的,其他人已经能够在他们自己的项目中编译和使用 kSOAP2,但我不必这样做。

迄今为止,Google 对向 Android 添加 SOAP 库表示兴趣不大。我对此的怀疑是,他们宁愿支持 Web 服务的当前趋势,转向基于 REST 的服务,并使用 JSON 作为数据封装格式。或者,使用 XMPP 进行消息传递。但这只是猜测。

目前,基于 XML 的 Web 服务在 Android 上是一项非常重要的任务。不了解 NetBeans,我无法谈论那里可用的工具,但我同意应该提供更好的库。 XmlPullParser 有可能使您免于使用 SAX,但我对此知之甚少。


是的,我想我将不得不构建一个 REST 代理。 Google 对提供 SOAP 支持不感兴趣,这似乎很奇怪。我尝试了 kSoap 方法,它甚至不是一个严肃的选择。它充其量只是一个丑陋的东西,需要对新闻组进行大量搜索。
原因可能是 SOAP 非常冗长,不能很好地服务于移动计算的约束。
如果有人可以建议使用 Android 应用程序调用 Web 服务的最佳替代方案,那么这个答案将会得到改进。一旦人们找到并阅读了这个问题,这就是他们中的大多数人所要寻找的。
与 JSON 等更简洁的格式相比,SOAP 处理也是内存和处理器密集型的。
@MGOwen 我能看到的最好的选择是代理。实现一个通过 WSDL2Java 代理 SOAP 信封的 REST-ful 接口。
S
Sarah Vessels

org.apache.http.impl.client.DefaultHttpClient 默认包含在 Android SDK 中。这将使您连接到 WSDL。

HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet httpGet = new HttpGet("http://www.example.com/" + URL);
HttpResponse response = httpClient.execute(httpGet, localContext);

是的,这将是我必须手动解析所有内容的路径,我不会获得面向对象的方法。
你的意思是你不会得到免费的午餐。手动解析与 OO 没有任何关系。我可以用我最先进的工具是 HB1 铅笔来解析纸上的所有内容,它仍然是 OO。
我相信 OO 作者的意思是 Java-XML 绑定。在这种方法中解析响应的下一步是什么?如果它有数百个元素,以树状结构组织?
顺便说一句,如果您想对 SOAP 有任何好运,我希望至少有一个 HTTP POST 而不是 GET。另外,Accept 和 SOAPAction 标头在哪里?如果你真的想去突击队,那么使用 SOAP 服务将需要比这 4 行更多的内容。
@NeilD:如果您被迫使用 SOAP,例如网络服务器使用 SOAP 而您无法控制,该怎么办?
V
Viktor Brešan

确实,由于它的开销,SOAP 并不是与移动设备进行数据交换的最佳选择。但是,您可能会发现自己无法控制服务器输出的格式。

因此,如果您必须坚持使用 SOAP,这里有一个为 Android 打补丁的 kSOAP2 库:
http://code.google.com/p/ksoap2-android/


P
Priyanjan

要从移动设备(尤其是 Android 手机)调用 Web 服务,我使用了一种非常简单的方法。我没有使用任何 Web 服务客户端 API 来尝试调用 Web 服务。我的方法如下拨打电话。

使用 Java 标准 API HttpURLConnection 创建一个简单的 HTTP 连接。形成一个 SOAP 请求。 (您可以借助 SOAPUI 来发出 SOAP 请求。)将 doOutPut 标志设置为 true。设置 HTTP 标头值,例如内容长度、内容类型和用户代理。不要忘记设置 Content-length 值,因为它是强制性的。将整个 SOAP 请求写入输出流。调用该方法建立连接并接收响应(在我的例子中,我使用了 getResonseCode)。如果您收到的响应码为 则表示您已成功调用 Web 服务。现在在同一个 HTTP 连接上获取一个输入流并接收字符串对象。此字符串对象是一个 SOAP 响应。如果响应代码不是 200,则在同一 HTTP 对象上获取 ErrorInput 流并接收错误(如果有)。使用 SAXParser(在我的例子中)或 DOMParaser 或任何其他解析机制解析收到的响应。

我已经为安卓手机实现了这个程序,并且运行成功。即使响应超过 700 KB,我也能够解析它。


j
jasonhudgins

SOAP 是一种不适合在 Android(或一般的移动设备)上使用的技术,因为它需要处理/解析开销。 REST 服务是一种更轻量级的解决方案,这就是我的建议。 Android 带有一个 SAX 解析器,使用起来相当简单。如果您绝对需要在移动设备上处理/解析 SOAP,那么我为您感到抱歉,我能提供的最佳建议就是不要使用 SOAP。


对于那些强迫开发人员使用 SOAP 服务而不是 REST API 的人来说,地狱里有一个特殊的地方。
E
ESala

大约一年前,我正在阅读这个线程,试图弄清楚如何在 Android 上进行 SOAP 调用 - 使用 HttpClient 构建我自己的建议导致我为 Android 构建了自己的 SOAP 库:

IceSoap

基本上,它允许您构建信封以通过简单的 Java API 发送,然后自动将它们解析为您通过 XPath 定义的对象......例如:

<Dictionary>
    <Id></Id>
    <Name></Name>
</Dictionary>

变成:

@XMLObject("//Dictionary")
public class Dictionary {
    @XMLField("Id")
    private String id;

    @XMLField("Name")
    private String name;
}

我将它用于我自己的项目,但我认为它可能对其他人有所帮助,因此我花了一些时间将其分离出来并记录下来。如果你的一些可怜的灵魂在谷歌搜索“SOAP Android”时偶然发现了这个线程,我真的很喜欢它,他们可以试一试并获得一些好处。


你在 IceSoap 上使用过会话身份验证吗?
d
diegueus9

不要忘记在您的项目中添加 ksoap2.jar 并在 AndroidManifest 文件中添加 INTERNET 权限

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class WebserviceActivity extends Activity {

    private static final String NAMESPACE = "https://api.authorize.net/soap/v1/";
    private static final String URL ="https://apitest.authorize.net/soap/v1/Service.asmx?wsdl"; 
    private static final String SOAP_ACTION = "https://api.authorize.net/soap/v1/AuthenticateTest";
    private static final String METHOD_NAME = "AuthenticateTest";
    private TextView lblResult;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        lblResult = (TextView) findViewById(R.id.tv);

        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
        request.addProperty("name","44vmMAYrhjfhj66fhJN");
        request.addProperty("transactionKey","9MDQ7fghjghjh53H48k7e7n");
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
        envelope.setOutputSoapObject(request);
        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
        try {
            androidHttpTransport.call(SOAP_ACTION, envelope);

            //SoapPrimitive  resultsRequestSOAP = (SoapPrimitive) envelope.getResponse();
            // SoapPrimitive  resultsRequestSOAP = (SoapPrimitive) envelope.getResponse();
            SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn;


            lblResult.setText(resultsRequestSOAP.toString());
            System.out.println("Response::"+resultsRequestSOAP.toString());


        } catch (Exception e) {
            System.out.println("Error"+e);
        }

    }
}

HttpTransportSE 我在哪里可以得到这个类??
您好,我正在使用您的代码,但出现以下错误,Response::AuthenticateTestResponse{AuthenticateTestResult=anyType{resultCode=Error;消息=anyType{MessagesTypeMessage=anyType{code=E00014; text=需要商户身份验证。; }; }; }; } 你能帮我吗?
嗨阿米特我也阿米特.....你能告诉我当我们得到响应成功与否时我们如何比较响应那么如何以及什么条件来检查响应......
如何在请求属性的 xml 中添加数组?
S
Samuh

我与 KSOAP 幽会;我选择了一种更简单的方法。

给定一个 WSDL 文件,为每个请求创建 SOAP 请求模板(例如:使用 SOAP UI),然后替换要在代码中传递的值。使用 DefaultHttpClient 实例将此数据发布到服务端点并获取响应流。使用 XML Pull 解析器解析响应流。


A
Akash Kava

你可以看看WSClient++


最后是重复 kSoap 或 SAX 后的第一个有用答案
我尝试了演示版。没有为我提供简单的服务。不值得花这么多$$$$。
P
Peter Mortensen

我为 Android 平台创建了一个新的 SOAP 客户端。它使用的是 JAX-WS 生成的接口,但到目前为止它只是一个概念验证。

如果您有兴趣,请尝试该示例和/或观看 AndroidSOAP 上的源代码。


我很高兴参加您在 JUM XVII 的演讲。布达佩斯关于这个 Android 的东西。保持良好的工作!
Y
Yves

如果可以,请选择 JSON。 Android 自带完整的 org.json 包


u
user370305

调用 ksoap2 方法。它工作得很好。

设置详细信息,例如

private static String mNAMESPACE=null;
private static String mURL=null;
public static Context context=null;
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(Request);

envelope.addMapping(mNAMESPACE, "UserCredentials",new UserCredendtials().getClass());
AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(mURL);

然后得到结果

androidHttpTransport.call(SOAP_ACTION, envelope);
result = (SoapPrimitive)envelope.getResponse();

P
Peter Mortensen

我希望 Calling a web service from Android 有所帮助。


J
Jared Burrows

几个月前,我在 j2ee 应用程序中使用 jax-ws Web 服务,我们使用 CXF wsdl2java 从 WSDL 文件生成 WS 客户端存根,并使用这些客户端存根使用 Web 服务。几周前,当我尝试在 android 平台上以相同的方式使用 web 服务时,我做不到,因为 android jar 中没有所有的“jax-ws”支持类。那个时候我没有找到任何这样的工具(如果我没有有效地用谷歌搜索的话)来满足我的要求——

从 WSDL 获取客户端存根。

并使用一些参数(java 业务请求对象)调用服务。

获取响应业务对象。

因此,我开发了自己的 Android SOAP Client Generation Tool。您必须按照以下步骤操作:

从 WSDL 获取 WS Client Stub,把它放到你的项目中。

说一些服务“ComplexOperationService”,实例化服务,获取端点端口并调用服务方法,并从 Web 服务获取响应:

例如:

ComplexOperationService service = new ComplexOperationService( );
ComplexOperation port= service.getComplexOperationPort();    
SomeComplexRequest request = --Get some complex request----;    
SomeComplexResp resp = port.operate( request  );

您不需要关心服务类/请求/响应类或任何其他类和方法,因为您知道它们都是从 WSDL 生成的。

当然,您不需要知道肥皂动作/信封/命名空间等。只需像我们开发人员一样调用该方法即可。


你知道如何处理日期吗? Apache CXF 将其转换为我无法在 Android 中创建的 XMLGregorianCalendar。
P
Peter Mortensen

我相信您可以使用 Axis 制作一个小 SOAP 客户端。 Axis installation instructions


仅当轴与 Android 兼容时才有效。它不是(关于轴依赖项中的 javax.* 包的东西)。
P
Peter Mortensen

我认为 Call SOAP Web Service from Android application 会对您有很大帮助。


M
Manick

按照 SOAP 方法执行这些步骤

从 WSDL 文件中,

为每个请求创建 SOAP 请求模板。

然后替换要在代码中传递的值。

使用 DefaultHttpClient 实例将此数据发布到服务端点。

获取响应流,最后

使用 XML Pull 解析器解析响应流。


D
Daniele Teti

如果您可以使用 JSON,Developing Application Services with PHP Servers and Android Phone Clients 中有一份白皮书、一个视频和 sample.code。


r
robocik

对我来说,最简单的方法是使用好的工具来生成所有必需的类。我个人使用这个网站:

http://easywsdl.com/

它支持相当复杂的 Web 服务并使用 ksoap2。


m
miroslavign

我建议查看一个对我有很大帮助的非常有用的工具。负责那个项目的人也非常乐于助人。 www.wsdl2code.com/


S
Sachin D

如果您在调用 android 中的 Web 服务时遇到问题,那么您可以使用下面的代码来调用 Web 服务并获得响应。确保您的 Web 服务以 Data Table Format 格式返回响应。如果您使用来自 SQL Server 数据库的数据,此代码将为您提供帮助。如果您使用 MYSQL,您需要更改一件事,只需将句子 obj2=(SoapObject) obj1.getProperty("NewDataSet"); 中的单词 NewDataSet 替换为 DocumentElement

void callWebService(){ 

private static final String NAMESPACE = "http://tempuri.org/"; // for wsdl it may be package name i.e http://package_name
private static final String URL = "http://localhost/sample/services/MyService?wsdl";
// you can use IP address instead of localhost
private static final String METHOD_NAME = "Function_Name";
private static final String SOAP_ACTION = "urn:" + METHOD_NAME;

    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
    request.addProperty("parm_name", prm_value);// Parameter for Method
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true;// **If your Webservice in .net otherwise remove it**
    envelope.setOutputSoapObject(request);
    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

    try {
        androidHttpTransport.call(SOAP_ACTION, envelope);// call the eb service
                                                                                                         // Method
    } catch (Exception e) {
        e.printStackTrace();
    }

    // Next task is to get Response and format that response
    SoapObject obj, obj1, obj2, obj3;
    obj = (SoapObject) envelope.getResponse();
    obj1 = (SoapObject) obj.getProperty("diffgram");
    obj2 = (SoapObject) obj1.getProperty("NewDataSet");

    for (int i = 0; i < obj2.getPropertyCount(); i++) { 
// the method getPropertyCount() and  return the number of rows
            obj3 = (SoapObject) obj2.getProperty(i);
            obj3.getProperty(0).toString();// value of column 1
            obj3.getProperty(1).toString();// value of column 2
            // like that you will get value from each column
        }
    }

如果您对此有任何问题,可以写信给我。


K
Kishore Kumar

这是一个在 android 中使用 SOAP Web 服务的工作示例。

**注意 ::***不要忘记在您的项目中添加 ksoap2.jar 并在 AndroidManifest 文件中添加 INTERNET 权限*

public final String WSDL_TARGET_NAMESPACE = "http://tempuri.org/";
public final String METHOD_NAME = "FahrenheitToCelsius";
public final String PROPERTY_NAME = "Fahrenheit";
public final String SOAP_ACTION = "http://tempuri.org/FahrenheitToCelsius";
public final String SOAP_ADDRESS = "http://www.w3schools.com/webservices/tempconvert.asmx";


private class TestAsynk extends AsyncTask<String, Void, String> {

    @Override
    protected void onPostExecute(String result) {

        super.onPostExecute(result);
        Toast.makeText(getApplicationContext(),
                String.format("%.2f", Float.parseFloat(result)),
                Toast.LENGTH_SHORT).show();
    }

    @Override
    protected String doInBackground(String... params) {
        SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,
                METHOD_NAME);
        request.addProperty(PROPERTY_NAME, params[0]);

        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                SoapEnvelope.VER11);
        envelope.dotNet = true;

        envelope.setOutputSoapObject(request);

        HttpTransportSE androidHttpTransport = new HttpTransportSE(
                SOAP_ADDRESS);
        Object response = null;
        try {

            androidHttpTransport.call(SOAP_ACTION, envelope);
            response = envelope.getResponse();
            Log.e("Object response", response.toString());

        } catch (Exception e) {
            e.printStackTrace();
        }
        return response.toString();
    }
}

请在这个问题上帮助我stackoverflow.com/questions/41573829/…
l
lokesh s

请下载并使用您的项目添加 SOAP 库文件文件名:ksoap2-android-assembly-3.4.0-jar-with-dependencies

清理应用程序,然后启动程序

这是 SOAP 服务调用的代码

    String SOAP_ACTION = "YOUR_ACTION_NAME";
    String METHOD_NAME = "YOUR_METHOD_NAME";
    String NAMESPACE = "YOUR_NAME_SPACE";
    String URL = "YOUR_URL";
    SoapPrimitive resultString = null;

    try {
        SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
        addPropertyForSOAP(Request);

        SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        soapEnvelope.dotNet = true;
        soapEnvelope.setOutputSoapObject(Request);

        HttpTransportSE transport = new HttpTransportSE(URL);

        transport.call(SOAP_ACTION, soapEnvelope);
        resultString = (SoapPrimitive) soapEnvelope.getResponse();

        Log.i("SOAP Result", "Result Celsius: " + resultString);
    } catch (Exception ex) {
        Log.e("SOAP Result", "Error: " + ex.getMessage());
    }
    if(resultString != null) {
        return resultString.toString();
    }
    else{
        return "error";
    }

结果可能是 JSONObject 或 JSONArray 或 String

为了您更好的参考,https://trinitytuts.com/load-data-from-soap-web-service-in-android-application/

谢谢。


L
Lapenkov Vladimir

您可以使用某些标头通过 http 执行肥皂调用作为 post。我在没有像 ksoap2 这样的额外库的情况下解决了这个问题 这是从肥皂服务获取订单的实时代码

private static HashMap<String,String> mHeaders = new HashMap<>();

static {
    mHeaders.put("Accept-Encoding","gzip,deflate");
    mHeaders.put("Content-Type", "application/soap+xml");
    mHeaders.put("Host", "35.15.85.55:8080");
    mHeaders.put("Connection", "Keep-Alive");
    mHeaders.put("User-Agent","AndroidApp");
    mHeaders.put("Authorization","Basic Q2xpZW50NTkzMzppMjR3s2U="); // optional
}public final static InputStream receiveCurrentShipments(String stringUrlShipments)
{
    int status=0;
    String xmlstring= "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:ser=\"http://35.15.85.55:8080/ServiceTransfer\">\n" +
            "   <soap:Header/>\n" +
            "   <soap:Body>\n" +
            "      <ser:GetAllOrdersOfShipment>\n" +
            "         <ser:CodeOfBranch></ser:CodeOfBranch>\n" +
            "      </ser:GetAllOrdersOfShipment>\n" +
            "   </soap:Body>\n" +
            "</soap:Envelope>";
    StringBuffer chaine = new StringBuffer("");

    HttpURLConnection connection = null;
    try {
        URL url = new URL(stringUrlShipments);
        connection = (HttpURLConnection) url.openConnection();
        connection.setRequestProperty("Content-Length", xmlstring.getBytes().length + "");
        connection.setRequestProperty("SOAPAction", "http://35.15.85.55:8080/ServiceTransfer/GetAllOrdersOfShipment");

        for(Map.Entry<String, String> entry : mHeaders.entrySet()) {
            String key = entry.getKey();
            String value = entry.getValue();
            connection.setRequestProperty(key,value);

        }

        connection.setRequestMethod("POST");
        connection.setDoInput(true);

        OutputStream outputStream = connection.getOutputStream();
        outputStream.write(xmlstring.getBytes("UTF-8"));
        outputStream.close();

        connection.connect();
        status = connection.getResponseCode();
    } catch (ProtocolException e) {
        e.printStackTrace();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {

        Log.i("HTTP Client", "HTTP status code : " + status);
    }

    InputStream inputStream = null;
    try {
        inputStream = connection.getInputStream();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return inputStream;
}

关于此的两个问题:1.如何从主要活动中调用它? 2. 作为参数传递的 StringUrlShipment 的值应该是多少?
在上述评论中,忽略问题 #1。
从主要活动中,您应该使用 AsyncTask 来调用此代码。在此 AsyncTask 类中实现 doInBackground 以启动此代码
N
Nhan Nguyen

要从 android 调用 SOAP Web 服务,请尝试使用此客户端

不要忘记在您的 java 构建路径中添加 ksoap2-android.jar

public class WsClient {
    private static final String SOAP_ACTION = "somme";
    private static final String OPERATION_NAME = "somme";
    private static final String WSDL_TARGET_NAMESPACE = "http://example.ws";
    private static final String SOAP_ADDRESS = "http://192.168.1.2:8080/axis2/services/Calculatrice?wsdl";

    public String caclculerSomme() {

        String res = null;
        SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,
                OPERATION_NAME);
        request.addProperty("a", "5");
        request.addProperty("b", "2");

        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                SoapEnvelope.VER11);
        envelope.dotNet = true;
        envelope.setOutputSoapObject(request);
        HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS);

        try {
            httpTransport.call(SOAP_ACTION, envelope);
            String result = envelope.getResponse().toString();
            res = result;
            System.out.println("############# resull is :" + result);
        } catch (Exception exception) {
            System.out.println("########### ERRER" + exception.getMessage());
        }

        return res;
    }
}

Wajdi hh 如何比较来自给予者响应结果的响应资源:-成功.....“响应 =1~Successfull”.... 那么我们如何比较来自服务器端的条件的结果...... ..
S
Sundararaj Govindasamy

添加肥皂 Libaray(ksoap2-android-assembly-3.2.0-jar-with-dependencies.jar):

公共静态字符串 Fn_Confirm_CollectMoney_Approval(

        HashMap < String, String > str1,
        HashMap < String, String > str2,
        HashMap < String, String > str3) {

    Object response = null;
    String METHOD_NAME = "CollectMoney";
    String NAMESPACE = "http://xxx/yyy/xxx";
    String URL = "http://www.w3schools.com/webservices/tempconvert.asmx";
    String SOAP_ACTION = "";

    try {

        SoapObject RequestParent = new SoapObject(NAMESPACE, METHOD_NAME);

        SoapObject Request1 = new SoapObject(NAMESPACE, "req");

        PropertyInfo pi = new PropertyInfo();

        Set mapSet1 = (Set) str1.entrySet();

        Iterator mapIterator1 = mapSet1.iterator();

        while (mapIterator1.hasNext()) {

            Map.Entry mapEntry = (Map.Entry) mapIterator1.next();

            String keyValue = (String) mapEntry.getKey();

            String value = (String) mapEntry.getValue();

            pi = new PropertyInfo();

            pi.setNamespace("java:com.xxx");

            pi.setName(keyValue);

            pi.setValue(value);

            Request1.addProperty(pi);
        }

        mapSet1 = (Set) str3.entrySet();

        mapIterator1 = mapSet1.iterator();

        while (mapIterator1.hasNext()) {

            Map.Entry mapEntry = (Map.Entry) mapIterator1.next();

            // getKey Method of HashMap access a key of map
            String keyValue = (String) mapEntry.getKey();

            // getValue method returns corresponding key's value
            String value = (String) mapEntry.getValue();

            pi = new PropertyInfo();

            pi.setNamespace("java:com.xxx");

            pi.setName(keyValue);

            pi.setValue(value);

            Request1.addProperty(pi);
        }

        SoapObject HeaderRequest = new SoapObject(NAMESPACE, "XXX");

        Set mapSet = (Set) str2.entrySet();

        Iterator mapIterator = mapSet.iterator();

        while (mapIterator.hasNext()) {

            Map.Entry mapEntry = (Map.Entry) mapIterator.next();

            // getKey Method of HashMap access a key of map
            String keyValue = (String) mapEntry.getKey();

            // getValue method returns corresponding key's value
            String value = (String) mapEntry.getValue();

            pi = new PropertyInfo();

            pi.setNamespace("java:com.xxx");

            pi.setName(keyValue);

            pi.setValue(value);

            HeaderRequest.addProperty(pi);
        }

        Request1.addSoapObject(HeaderRequest);

        RequestParent.addSoapObject(Request1);

        SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(
                SoapEnvelope.VER10);

        soapEnvelope.dotNet = false;

        soapEnvelope.setOutputSoapObject(RequestParent);

        HttpTransportSE transport = new HttpTransportSE(URL, 120000);

        transport.debug = true;

        transport.call(SOAP_ACTION, soapEnvelope);

        response = (Object) soapEnvelope.getResponse();

        int cols = ((SoapObject) response).getPropertyCount();

        Object objectResponse = (Object) ((SoapObject) response)
                .getProperty("Resp");

        SoapObject subObject_Resp = (SoapObject) objectResponse;


        modelObject = new ResposeXmlModel();

        String MsgId = subObject_Resp.getProperty("MsgId").toString();


        modelObject.setMsgId(MsgId);

        String OrgId = subObject_Resp.getProperty("OrgId").toString();


        modelObject.setOrgId(OrgId);

        String ResCode = subObject_Resp.getProperty("ResCode").toString();


        modelObject.setResCode(ResCode);

        String ResDesc = subObject_Resp.getProperty("ResDesc").toString();


        modelObject.setResDesc(ResDesc);

        String TimeStamp = subObject_Resp.getProperty("TimeStamp")
                .toString();


        modelObject.setTimestamp(ResDesc);

        return response.toString();

    } catch (Exception ex) {

        ex.printStackTrace();

        return null;
    }

}