Java 使用KSoap2的Android上拒绝传递字符串的Web服务

Java 使用KSoap2的Android上拒绝传递字符串的Web服务,java,android,soap,ksoap2,Java,Android,Soap,Ksoap2,我正在创建一个与SOAP web服务通信的Android应用程序,并使用KSoap2来实现。KSOAP2对我所拨打的电话一直很有效(尽管有时有点不可靠),除了一个。我正在拨打的特定服务电话是注册一个帐户,其中包含一些用户信息以及一个“注册码”。此代码用于确保用户在向应用程序注册帐户之前是学校成员。问题在于:假设web服务期望的注册码是“student123”。无论我将什么字符串传递到web服务调用中,我都会收到一个响应,说代码无效 我可以肯定的是,web服务不是问题所在,因为我可以手动调用该方法

我正在创建一个与SOAP web服务通信的Android应用程序,并使用KSoap2来实现。KSOAP2对我所拨打的电话一直很有效(尽管有时有点不可靠),除了一个。我正在拨打的特定服务电话是注册一个帐户,其中包含一些用户信息以及一个“注册码”。此代码用于确保用户在向应用程序注册帐户之前是学校成员。问题在于:假设web服务期望的注册码是“student123”。无论我将什么字符串传递到web服务调用中,我都会收到一个响应,说代码无效

我可以肯定的是,web服务不是问题所在,因为我可以手动调用该方法,它工作得很好,我甚至可以从iPhone应用程序中调用相同的SOAP方法,该应用程序是我为与Android应用程序相同的目的开发的

所以我的问题是:KSoap2在调用web服务时是否会更改字符串?我试着将注册码改为像“a”这样的单个字符,但它仍然返回无效的代码响应。这是我的一些代码。这在扩展AsyncTask的类中:

protected Object doInBackground(UserProfile...profiles) 
    {
        SoapObject request = new SoapObject(NAMESPACE, REGISTER);

        Vector<PropertyInfo> properties = makeProperties(ServiceCall.REGISTER, profiles[0]);

        for(int i = 0; i < properties.size(); ++i)
        {
            request.addProperty(properties.get(i));
        }

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

        try
        {
            HttpTransportSE transport = new HttpTransportSE(URL);
            transport.debug = true;

            transport.call(SOAP_NAMESPACE + REGISTER, envelope);
            Log.d("REGREQUEST", transport.requestDump);
            Log.d("REGRESPONSE", transport.responseDump);
            Log.d("EXECUTE", "In Register Execute");

            Object result = (Object)envelope.getResponse();
            //Log.d("Result", "Register result: " + result.toString());

            return result;          
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

        return null;
web服务所期望的值的名称是“registrationCode”,正如我所说的,我已经尝试过使用字段的值。这个电话的一个例子是

PropertyInfo regCode = makeProperty("registrationCode", "student123");
web服务显然得到了与registrationCode字段匹配的内容,因为它响应说它收到的值无效。不幸的是,在测试的这个阶段,这是唯一一个需要我可以使用的参数的web服务调用,因此我无法真正测试是否有其他服务调用存在相同的错误。有人有什么建议吗

让我知道如果有任何更多的信息,任何帮助将不胜感激

编辑:这是requestDump的打印输出:

05-04 12:59:51.434: D/REGREQUEST(17492): <v:Envelope
xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
xmlns:d="http://www.w3.org/2001/XMLSchema"
xmlns:c="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:v="http://schemas.xmlsoap.org/soap/envelope/">
<v:Header /><v:Body>
<createStudentAccount xmlns="http://URL/" id="o0" c:root="1">
<fName i:type="d:string">Chandler</fName>
<lName i:type="d:string">Bing</lName>
<middleName i:type="d:string">M</middleName>
<userName i:type="d:string">lulz</userName>
<registrationCode i:type="d:string">student123</registrationCode>
<password i:type="d:string">pass</password>
<instructorName i:type="d:string">Instructor1</instructorName>
<schoolLocation i:type="d:string">Location1</schoolLocation>
</createStudentAccount></v:Body></v:Envelope>
05-04 12:59:51.434:D/重新请求(17492):
经销商
宾
M
卢兹
学生123
通过
讲师1
地点1

我以前从未见过这种“I:type=“d:string”的东西,这可能与问题有关吗

我建议您尝试通过web代理运行服务器调用。这将使您有机会检查原始请求和响应。然后,如果您将iOS应用程序的成功请求与Android上的失败尝试进行比较,您应该能够推断出更多关于何时何地出错的信息。我已使用requestDump的打印输出编辑了帖子,iOS应用程序的请求与此请求之间唯一不同的是I:type=“d:string”和id=“o0”c:root=“1”的东西。
PropertyInfo regCode = makeProperty("registrationCode", "student123");
05-04 12:59:51.434: D/REGREQUEST(17492): <v:Envelope
xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
xmlns:d="http://www.w3.org/2001/XMLSchema"
xmlns:c="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:v="http://schemas.xmlsoap.org/soap/envelope/">
<v:Header /><v:Body>
<createStudentAccount xmlns="http://URL/" id="o0" c:root="1">
<fName i:type="d:string">Chandler</fName>
<lName i:type="d:string">Bing</lName>
<middleName i:type="d:string">M</middleName>
<userName i:type="d:string">lulz</userName>
<registrationCode i:type="d:string">student123</registrationCode>
<password i:type="d:string">pass</password>
<instructorName i:type="d:string">Instructor1</instructorName>
<schoolLocation i:type="d:string">Location1</schoolLocation>
</createStudentAccount></v:Body></v:Envelope>