简体   繁体   English

将复杂参数从ksoap Android传递到WCF Web服务

[英]Pass complex parameter from ksoap Android to WCF Web-Service

I'm calling .NET WCF Web Service from ksoap my WebMethod take one complex parameter UpdatableCustomerInfo 我从ksoap调用.NET WCF Web服务我的WebMethod采用一个复杂的参数UpdatableCustomerInfo

public class UpdatableCustomerInfo implements KvmSerializable {

public String CustomerId;
public String Facebook;

@Override
public Object getProperty(int arg0) {
    String retVal = "";
     switch(arg0)
        {
        case 0:
            retVal = CustomerId;
            break;

        case 1:
            retVal = Facebook;
            break;
        }

        return retVal;
}

@Override
public int getPropertyCount() {
    return 2;
}

@Override
public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo arg2) {
     switch(arg0)
        {
        case 0:
            arg2.type = PropertyInfo.STRING_CLASS;
            arg2.name = "CustomerId";
            break;
        case 1:
            arg2.type = PropertyInfo.STRING_CLASS;
            arg2.name = "Facebook";
            break;

        default:break;
        }
}

@Override
public void setProperty(int arg0, Object arg1) {
    switch(arg0)
    {
    case 0:
        CustomerId = arg1.toString();
        break;
    case 1:
        Facebook = arg1.toString();
        break;

    default:
        break;
    }
}

} }

and this is my Web Service calling to the WebService 这是我的Web服务调用WebService

    UpdatableCustomerInfo ucInfo = new UpdatableCustomerInfo();
    ucInfo.CustomerId = "1f089071-c126-e211-9b2e-dca971c098f5";
    ucInfo.Facebook = "asdfqwer1234";

    PropertyInfo pInfo = new PropertyInfo();
    pInfo.setName("updatableInfo");
    pInfo.setValue(ucInfo);
    pInfo.setType(UpdatableCustomerInfo.class);

    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
    request.addProperty(pInfo);

    SoapSerializationEnvelope envelop = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelop.setOutputSoapObject(request);
    envelop.dotNet = true;

    HttpTransportSE hts = new HttpTransportSE(URL);
    hts.debug = true;

            try {
        hts.call(SOAP_ACTION, envelop);
    } catch (Exception ex) {
        ex.printStackTrace();
    }

but In fact I logged the web service method and the log tell me that the method is called but the parameter is came null. 但事实上我记录了Web服务方法,日志告诉我该方法被调用,但参数为null。

I tried to change SoapEnvelope version to SoapEnvelope.VER10 but that make the parameter on the method of web service came as not null but have no value of what i specified in the ucInfo 我试图将SoapEnvelope版本更改为SoapEnvelope.VER10但是这使得Web服务方法上的参数变为非null但没有我在ucInfo中指定的值

OK. 好。 you want to 'Pass complex parameter from ksoap2 Request.' 你想'从ksoap2请求中传递复杂参数。'

I have Faced the Exact Problem that you are Facing. 我已经面对你正面临的确切问题。

I have the AlertNative Way to get out of this Problem that i have Described as Below. 我有AlertNative方法来摆脱我在下面描述的这个问题。

First, Let Me Know what i had Search HERE , HERE , HERE , HERE and Many More SO Link. 首先,让我知道我有搜索这里这里这里这里 ,还有更多SO链接。 but Not Found the Solution to this Problem . 但没有找到解决这个问题的方法。

Finally I come to the Link How to send a soap request in android? 最后我来到链接如何在android中发送一个soap请求? as my first step to this Solution. 作为我解决这个问题的第一步。

Solution is : Solution is

I have finally manually construct the request XML, and send it to kSOAP for sending and response processing 我最后手动构造请求XML,并将其发送到 kSOAP进行发送和响应处理

Question is How? By Below Way 通过以下方式

What Problem I was Facing : Here is My SO Question that i have put here as Question but could not able to get Solution for it. 遇到了什么问题:这是我的问题 ,我把这里作为问题,但无法得到它的解决方案。

Now as you have see my SOAP Request inside SoapUI was : 现在,您已经看到我在SoapUI中的SOAP请求是:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:test="http://test.login/">
   <soapenv:Header/>
   <soapenv:Body>
      <test:Login>
         <!--Optional:-->
         <arg0>best_buyer_editor</arg0>
         <!--Optional:-->
         <arg1>welcome</arg1>
         <!--Optional:-->
         <arg2>Mobile</arg2>
      </test:Login>
   </soapenv:Body>
</soapenv:Envelope>

My SOAP Response inside soapUI was : 我在SOAPUI中的SOAP响应是:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:LoginResponse xmlns:ns2="http://test.login/">
         <return>{"LoginDetails":{"Result":"Success","UserName":"Best Buyer Editor","token":"M7M5RMQU6","rolelist":["buyer_editor","admin_role"],"parties":[{"partynumber":"BEST","type":"self","sites":[{"companyname":"www.bestmanufacture.com","sitecode":"BESTTXUSA-1","siteaddress":"225 E Industrial Blvd Waco USA"},{"companyname":"www.bestmanufacture.com","sitecode":"BESTNYUSA-5","siteaddress":"20 Milburn St Buffalo USA"},{"companyname":"Best Engineers Manufacturing USA Inc","sitecode":"BESTHQ","siteaddress":"8976, Hope vision Lane Simple City USA"},{"companyname":"www.bestmanufacture.com","sitecode":"BESTNYUSA-6","siteaddress":"Cedar &amp; Ellicott Sts Batavia USA"},{"companyname":"www.bestmanufacture.com","sitecode":"BESTTXUSA-2","siteaddress":"9700 Richmond Ave Ste 201 Houston USA"},{"companyname":"www.bestmanufacture.com","sitecode":"BESTTXUSA-4","siteaddress":"3315 Ashlock Dr Houston USA"},{"companyname":"Best Engineers Manufacturing USA Inc","sitecode":"BESTWH","siteaddress":"1021, Industrial Bolevar San Macros City USA"},{"companyname":"www.bestmanufacture.com","sitecode":"BESTNYMEX-10","siteaddress":"271 Madison Ave Ste 1003 New York USA"},{"companyname":"www.bestmanufacture.com","sitecode":"BESTNYUSA-8","siteaddress":"271 Madison Ave Ste 1003 New York USA"},{"companyname":"Best Engineers Manufacturing Europe Inc","sitecode":"BESTMO","siteaddress":"789,Future Vision Towers London GBR"},{"companyname":"www.bestmanufacture.com","sitecode":"BESTNYUSA-7","siteaddress":"1580 Columbia Tpke Ste 5 Castleton On Hudson USA"},{"companyname":"www.bestmanufacture.com","sitecode":"BESTNYMEX-9","siteaddress":"271 Madison Ave Ste 1003 New York USA"},{"companyname":"www.bestmanufacture.com","sitecode":"BESTTXUSA-3","siteaddress":"2821 Lackland Rd Ste 340 Fort Worth USA"}]},{"partynumber":"DHL","type":"sponsors","sites":[{"companyname":"www.dhl.com","sitecode":"DHLTXUSA-2","siteaddress":"11311 N Central Expy Dallas USA"},{"companyname":"www.dhl.com","sitecode":"DHLNYUSA-7","siteaddress":"150 W 22nd St Fl 5 New York USA"},{"companyname":"www.dhl.com","sitecode":"DHLNYMEX-9","siteaddress":"One Markin Lane Wyoming USA"},{"companyname":"www.dhl.com","sitecode":"DHLNYUSA-6","siteaddress":"12685 State Route 38 Berkshire USA"},{"companyname":"www.dhl.com","sitecode":"DHLTXUSA-4","siteaddress":"2221 Canada Dry St Houston USA"},{"companyname":"www.dhl.com","sitecode":"DHLNYUSA-5","siteaddress":"521 5th Ave Rm 2130 New York USA"},{"companyname":"www.dhl.com","sitecode":"DHLTXUSA-1","siteaddress":"6505 N Houston Rosslyn Rd Houston USA"},{"companyname":"www.dhl.com","sitecode":"DHLTXUSA-3","siteaddress":"9405 N County Road 2000 Lubbock USA"},{"companyname":"www.dhl.com","sitecode":"DHLNYMEX-10","siteaddress":"One Markin Lane Wyoming USA"},{"companyname":"www.dhl.com","sitecode":"DHLNYUSA-8","siteaddress":"One Markin Lane Wyoming USA"}]},{"partynumber":"UPS","type":"sponsors","sites":[{"companyname":"www.ups.com","sitecode":"UPSTXUSA-3","siteaddress":"1455 West Loop S Houston USA"},{"companyname":"www.ups.com","sitecode":"UPSNYUSA-8","siteaddress":"1050 Hook Rd Farmington USA"},{"companyname":"www.ups.com","sitecode":"UPSNYMEX-10","siteaddress":"1050 Hook Rd Farmington USA"},{"companyname":"www.ups.com","sitecode":"UPSNYUSA-7","siteaddress":"1400 Broadway Fl 2 New York USA"},{"companyname":"www.ups.com","sitecode":"UPSTXUSA-4","siteaddress":"14902 Sommermeyer St Ste 100 Houston USA"},{"companyname":"www.ups.com","sitecode":"UPSNYMEX-9","siteaddress":"1050 Hook Rd Farmington USA"},{"companyname":"www.ups.com","sitecode":"UPSNYUSA-6","siteaddress":"101 Cranbrook Ext Tonawanda USA"},{"companyname":"www.ups.com","sitecode":"UPSNYUSA-5","siteaddress":"290 Barrett Hill Rd Mahopac USA"},{"companyname":"www.ups.com","sitecode":"UPSTXUSA-2","siteaddress":"11308 Midmorning Dr Austin USA"},{"companyname":"www.ups.com","sitecode":"UPSTXUSA-1","siteaddress":"3900 Harrisburg Blvd Houston USA"}]},{"partynumber":"HDEPO","type":"sponsors","sites":[{"companyname":"Home Depot USA.","sitecode":"HDEPOWH","siteaddress":"55031 Hdepo WH Road Bossier City USA"},{"companyname":"www.homeDepot.com","sitecode":"HDEPONYUSA-8","siteaddress":"166 Haverford Rd Hicksville USA"},{"companyname":"www.homeDepot.com","sitecode":"HDEPOTXUSA-4","siteaddress":"4901 Blaffer St Houston USA"},{"companyname":"Home Depot USA.","sitecode":"HDEPOHQ","siteaddress":"5031 Hdepo HQ Road Bossier City USA"},{"companyname":"www.homeDepot.com","sitecode":"HDEPONYMEX-9","siteaddress":"166 Haverford Rd Hicksville USA"},{"companyname":"www.homeDepot.com","sitecode":"HDEPONYUSA-6","siteaddress":"1790 Broadway Ste 702 New York USA"},{"companyname":"www.homeDepot.com","sitecode":"HDEPOTXUSA-3","siteaddress":"2203 Timberloch Pl Ste 252 The Woodlands USA"},{"companyname":"www.homeDepot.com","sitecode":"HDEPONYMEX-10","siteaddress":"166 Haverford Rd Hicksville USA"},{"companyname":"www.homeDepot.com","sitecode":"HDEPONYUSA-5","siteaddress":"1040 Avenue Of The Americas New York USA"},{"companyname":"Home Depot USA.","sitecode":"HDEPOMO","siteaddress":"5031 Hdepo MO Road Bossier City USA"},{"companyname":"www.homeDepot.com","sitecode":"HDEPOTXUSA-1","siteaddress":"14603 Chrisman Rd Houston USA"},{"companyname":"www.homeDepot.com","sitecode":"HDEPOTXUSA-2","siteaddress":"16103 University Oak San Antonio USA"},{"companyname":"www.homeDepot.com","sitecode":"HDEPONYUSA-7","siteaddress":"392 Pulteney St Corning USA"}]},{"partynumber":"GWILL","type":"sponsors","sites":[{"companyname":"www.goodwillconstruct.com","sitecode":"GWILLNYMEX-9","siteaddress":"3300 Northern Blvd Fl 2 Long Island City USA"},{"companyname":"GoodWill Supplies and Construction","sitecode":"GWILLHQ","siteaddress":"543, Light Ray Street Wellknown city In"},{"companyname":"www.goodwillconstruct.com","sitecode":"GWILLNYMEX-10","siteaddress":"3300 Northern Blvd Fl 2 Long Island City USA"},{"companyname":"www.goodwillconstruct.com","sitecode":"GWILLNYUSA-7","siteaddress":"1800 New Hwy Farmingdale USA"},{"companyname":"www.goodwillconstruct.com","sitecode":"GWILLNYUSA-8","siteaddress":"3300 Northern Blvd Fl 2 Long Island City USA"},{"companyname":"GoodWill Supplies and Construction","sitecode":"GWILLMO","siteaddress":"6789, Engineering Laner Large city GBR"},{"companyname":"www.goodwillconstruct.com","sitecode":"GWILLTXUSA-2","siteaddress":"945 McKinney St # 237 Houston USA"},{"companyname":"www.goodwillconstruct.com","sitecode":"GWILLNYUSA-6","siteaddress":"580 Broadway Menands USA"},{"companyname":"www.goodwillconstruct.com","sitecode":"GWILLTXUSA-3","siteaddress":"6921 Olson Ln Pasadena USA"},{"companyname":"www.goodwillconstruct.com","sitecode":"GWILLTXUSA-1","siteaddress":"7075 Ranch Road 2338 Georgetown USA"},{"companyname":"www.goodwillconstruct.com","sitecode":"GWILLTXUSA-4","siteaddress":"3839 Dilido Rd Dallas USA"},{"companyname":"www.goodwillconstruct.com","sitecode":"GWILLNYUSA-5","siteaddress":"1 Radisson Plz Ste 803 New Rochelle USA"},{"companyname":"GoodWill Supplies and Construction","sitecode":"GWILLHQ","siteaddress":"543, Light Ray Street Wellknown city USA"},{"companyname":"GoodWill Supplies and Construction","sitecode":"GWILLWH","siteaddress":"2345, Well formed lane Hope in city USA"}]},{"partynumber":"FEDEX","type":"sponsors","sites":[{"companyname":"www.fedex.com","sitecode":"FEDEXTXUSA-2","siteaddress":"400 Langford St Clint USA"},{"companyname":"www.fedex.com","sitecode":"FEDEXNYUSA-8","siteaddress":"3736 Kellogg Rd Cortland USA"},{"companyname":"www.fedex.com","sitecode":"FEDEXTXUSA-4","siteaddress":"5025 East Business 20 Abilene USA"},{"companyname":"www.fedex.com","sitecode":"FEDEXNYUSA-5","siteaddress":"637 New Loudon Rd Ste 2 Latham USA"},{"companyname":"Fedex USA.","sitecode":"FEDEXWH","siteaddress":"6754 Fedex WH  Road Fedex  City USA"},{"companyname":"www.fedex.com","sitecode":"FEDEXTXUSA-1","siteaddress":"4305 N Interstate 35 Denton USA"},{"companyname":"Fedex USA.","sitecode":"FEDEXHQ","siteaddress":"7800 Fedex HQ  Road Bossier City USA"},{"companyname":"www.fedex.com","sitecode":"FEDEXTXUSA-3","siteaddress":"14444 Stuebner Airline Rd Houston USA"},{"companyname":"www.fedex.com","sitecode":"FEDEXNYMEX-10","siteaddress":"3736 Kellogg Rd Cortland USA"},{"companyname":"www.fedex.com","sitecode":"FEDEXNYUSA-7","siteaddress":"65 Old Indian Rd Milton USA"},{"companyname":"www.fedex.com","sitecode":"FEDEXNYMEX-9","siteaddress":"3736 Kellogg Rd Cortland USA"},{"companyname":"Fedex USA.","sitecode":"FEDEXMO","siteaddress":"9600 Fedex MO Road Bossier City USA"},{"companyname":"www.fedex.com","sitecode":"FEDEXNYUSA-6","siteaddress":"1254 Erie Ave North Tonawanda USA"}]}]}}</return>
      </ns2:LoginResponse>
   </soap:Body>
</soap:Envelope>

but Not Able to Got Correct Response with the Code that i have done Before and Was getting Errors as i have described in My Question. 但是不能像我在“我的问题”中描述的那样,使用我之前完成的代码得到了正确的响应并且得到了错误。

My Solution for Above Problem : 我对上述问题的解决方案:

Firstly i have made an txt file same like SOAP Request with {%key%} wherever you want to add the Parameters Dynamically. 首先,我已经使用{%key%}创建了一个与SOAP Request相同的txt file ,无论您想在哪里动态添加参数。 make this txt file and put it into raw folder created res folder. 制作这个txt文件并将其放入raw文件夹创建的res文件夹中。 Now you will have the yourfilename.txt as looks like below : 现在您将拥有yourfilename.txt ,如下所示:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:test="http://test.login/">
   <soapenv:Header/>
   <soapenv:Body>
      <test:Login>
         <!--Optional:-->
         <arg0>{%arg0%}</arg0>
         <!--Optional:-->
         <arg1>{%arg1%}</arg1>
         <!--Optional:-->
         <arg2>{%arg2%}</arg2>
      </test:Login>
   </soapenv:Body>
</soapenv:Envelope>

And Now you will do Code as like Below inside your java file to access the Right Response : 现在,您将在Java文件中执行类似下面的代码以访问正确的响应:

you will get response with Calling the Below Method : 您将通过调用以下方法获得响应:

response = new sendSoapRequest(
                        getApplicationContext(), yourargument1, yourargument2, yourargument3);

with Below Included Method : 使用以下方法:

/**
     * Sends SOAP request to the web service.
     * 
     * @param requestContent
     *            the SOAP request XML
     * @return KvmSerializable object generated from the SOAP response XML
     * @throws Exception
     *             if the web service can not be reached, or the response data
     *             can not be processed.
     */
    public String sendSoapRequest(Context c, String arg0, String arg1,
            String arg2) throws Exception {


 URL = "PASTE YOUR WS URL";//"http://test.tpsynergy.com:8080/tpsynergy/services/login";
        String FinalString = getStringFromRaw(c);
        Log.i("TAG", "*********************** FinalString Before "
                + FinalString);

        FinalString = getFinalString(FinalString, arg0, arg1, arg2);

        Log.i("TAG", "***********************After Finallyyy   :  FinalString "
                + FinalString);

        // send SOAP request
        InputStream responseIs = sendRequest(FinalString);

        // create the response SOAP envelope
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                SoapEnvelope.VER11);

        // process SOAP response
        parseResponse(responseIs, envelope);

        Object bodyIn = envelope.bodyIn;

        SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn;
        String response = resultsRequestSOAP.getProperty(0).toString();

        Log.i(" Login Webservice Response",
                "Responce ---->" + response.toString());

        //

        if (bodyIn instanceof SoapFault) {
            throw (SoapFault) bodyIn;
        }

        return response.toString();
    }

    public String getFinalString(String ABC, String arg0, String arg1,
            String arg2) {
        // parse the template and replace all keywords

        HashMap<String, String> hashMap = new HashMap<String, String>();

        hashMap.put("arg0", arg0);
        hashMap.put("arg1", arg1);
        hashMap.put("arg2", arg2);

        StringBuffer sb = new StringBuffer();
        try {
            // find all keywords
            Pattern patern = Pattern.compile("\\{%(.*?)%\\}");
            Matcher matcher = patern.matcher(ABC);

            while (matcher.find()) {
                String keyName = matcher.group(1);

                Log.i("LOG_TAG", "Key Name" + keyName);
                String keyValue = hashMap.get(keyName);
                if (keyValue == null) {
                    keyValue = "";
                }
                // replace the key with value
                matcher.appendReplacement(sb, keyValue);
            }
            matcher.appendTail(sb);

            // return the final string
            return sb.toString();
        } catch (Throwable e) {
            Log.e("LOG_TAG", "Error parsing template", e);
            return null;
        }
    }

    private String getStringFromRaw(Context c) throws IOException {
        Resources r = c.getResources();
        InputStream is;
        if (MainActivity.PRODUCTION) {
            Log.i(TAG, "Inside Production Raw File");
            is = r.openRawResource(R.raw.logininfoproduction);
        } else {
            Log.i(TAG, "Inside Test Raw File");
            is = r.openRawResource(R.raw.logininfotest);
        }

        String statesText = convertStreamToString(is);
        is.close();
        return statesText;
    }

    private String convertStreamToString(InputStream is) throws IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        int i = is.read();
        while (i != -1) {
            baos.write(i);
            i = is.read();
        }
        return baos.toString();
    }

    /**
     * Sends SOAP request to the web service.
     * 
     * @param requestContent
     *            the content of the request
     * @return {@link InputStream} containing the response content
     * @throws Exception
     *             if communication with the web service can not be established,
     *             or when the response from the service can not be processed.
     */
    private InputStream sendRequest(String requestContent) throws Exception {

        // initialize HTTP post
        HttpPost httpPost = null;

        try {
            httpPost = new HttpPost(URL);
            httpPost.addHeader("Accept-Encoding", "gzip,deflate");
            httpPost.addHeader("Content-Type", "text/xml;charset=UTF-8");
            httpPost.addHeader("SOAPAction", "\"\"");
        } catch (Throwable e) {
            Log.e("LOG_TAG", "Error initializing HTTP post for SOAP request", e);
            // throw e;
        }

        // load content to be sent
        try {
            HttpEntity postEntity = new StringEntity(requestContent);
            httpPost.setEntity(postEntity);
        } catch (UnsupportedEncodingException e) {
            Log.e("LOG_TAG",
                    "Unsupported ensoding of content for SOAP request", e);
            throw e;
        }

        // send request
        HttpResponse httpResponse = null;
        HttpClient httpClient = new DefaultHttpClient();
        try {
            httpResponse = httpClient.execute(httpPost);
        } catch (Throwable e) {
            Log.e("LOG_TAG", "Error sending SOAP request", e);
            // throw e;
        }

        // get SOAP response
        try {
            // get response code
            int responseStatusCode = httpResponse.getStatusLine()
                    .getStatusCode();

            // if the response code is not 200 - OK, or 500 - Internal error,
            // then communication error occurred
            if (responseStatusCode != 200 && responseStatusCode != 500) {
                String errorMsg = "Got SOAP response code "
                        + responseStatusCode + " "
                        + httpResponse.getStatusLine().getReasonPhrase();
                // ...
            }

            // get the response content
            HttpEntity httpEntity = httpResponse.getEntity();
            InputStream is = httpEntity.getContent();
            return is;
        } catch (Throwable e) {
            Log.e("LOG_TAG", "Error getting SOAP response", e);
            // throw e;
        }
        return null;
    }

    /**
     * Parses the input stream from the response into SoapEnvelope object.
     */
    private void parseResponse(InputStream is, SoapEnvelope envelope)
            throws Exception {
        try {
            XmlPullParser xp = new KXmlParser();
            xp.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true);
            xp.setInput(is, "UTF-8");
            envelope.parse(xp);
        } catch (Throwable e) {
            Log.e("LOG_TAG", "Error reading/parsing SOAP response", e);

        }

    }

Now you will not have to worry about the ComplexType Request parameter or Any other thing. 现在您不必担心ComplexType Request参数或任何其他事情。 Because you are passing the Same formate with XML as Request as Like SOAPUI tool is Passing. 因为您使用XML传递Same formate作为Request,就像SOAPUI工具是Passing一样。

Now you have the correct Response that you want. 现在您拥有所需的正确响应。

Hope it will Work. 希望它能奏效。

Why dont you use this function to call the SOAP webservice ? 为什么不使用此函数来调用SOAP Web服务?

// Register User By Facebook
public static String RegisterUserByFacebook(String FBIDValue, String FBMailIDValue,String UserNameValue, String RegisterChipsValue) {

    String responce = null;

    SoapObject request = new SoapObject(SOAP_NAMESPACE, SOAP_METHOD_RegisterUserByFacebook);

    PropertyInfo FBID = new PropertyInfo();
    PropertyInfo FBMailID = new PropertyInfo();
    PropertyInfo UserName = new PropertyInfo();
    PropertyInfo DeviceType = new PropertyInfo();
    PropertyInfo RegisterChips = new PropertyInfo();

    FBID.setName("fbid");
    FBID.setValue(FBIDValue);

    FBMailID.setName("fbmailid");
    FBMailID.setValue(FBMailIDValue);

    UserName.setName("name");
    UserName.setValue(UserNameValue);

    DeviceType.setName("devicetype");
    DeviceType.setValue("android");

    RegisterChips.setName("Regchips");
    RegisterChips.setValue(RegisterChipsValue);

    request.addProperty(FBID);
    request.addProperty(FBMailID);
    request.addProperty(UserName);
    request.addProperty(DeviceType);
    request.addProperty(RegisterChips);

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true;
    envelope.setOutputSoapObject(request);
    HttpTransportSE aht = new HttpTransportSE(SOAP_URL);
    try {
        aht.call(SOAP_ACTION_RegisterUserByFacebook, envelope);
        SoapPrimitive LoginResult;
        LoginResult = (SoapPrimitive)envelope.getResponse();
        System.out.println("=================Register User Results: "+LoginResult.toString());
        //System.out.println(LoginResult.toString());
        responce = LoginResult.toString();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (XmlPullParserException e) {
            e.printStackTrace();
    }

    return responce;
}

Just replace my parameter, Property and URL to your parameter, Property and URL and you will get the result. 只需将我的参数,属性和URL替换为您的参数,属性和URL,您就会得到结果。

Above method works perfect in my case. 以上方法在我的情况下完美无缺。

feel free to comment. 随意评论。

Try with this. 试试这个。

SoapObject respuesta = new SoapObject(NAMESPACE, METHOD_NAME);
Registro registro = new Registro();
registro.nombre = txtprod.getText().toString();
registro.codigo = txtcod.getText().toString();
respuesta.addProperty("cadena", "si llega");

PropertyInfo pi = new PropertyInfo();
pi.setName("registro");
pi.setValue(registro);
pi.setType(registro.getClass());
respuesta.addProperty(pi);

final SoapSerializationEnvelope sobre = new SoapSerializationEnvelope(
        SoapEnvelope.VER11);
//sobre.bodyOut;``
//sobre.implicitTypes=true;
sobre.dotNet = true;
//sobre.setAddAdornments(false);
sobre.setOutputSoapObject(respuesta);
//sobre.bodyIn=respuesta;
sobre.addMapping(NAMESPACE, "Registro", registro.getClass());
try
{
    HttpTransportSE transporte = new HttpTransportSE(URL, timeout);
    //transporte.debug = true;
    transporte.call(SOAP_ACTION, sobre);


        SoapPrimitive resultado_xml = (SoapPrimitive)sobre.getResponse();
        Log.e("valor de response", resultado_xml.toString());
                   int res = Integer.parseInt(resultado_xml.toString());

    if(res == 1)

    {
        Log.e("entra al if", "lelel");

    }
}
catch(IOException e)
{
    e.printStackTrace();
    result = false;
}catch(XmlPullParserException e)
{
    e.printStackTrace();
    result = false;
}
return result;

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM