2017-07-17 4 views
2

J'utilise ksoap2 Bibliothèque pour analyser webserviceandroid ksoap2 java.lang.IllegalArgumentException: taille <= 0

URL: http://xx.xx.xx.xx/InquiryPenalty/InquiryPeernalty.svc

namespace: http://tempuri.org/

soap_action: http://tempuri.org/IInquiryPenalty/GetTraffics

METHOD_NAME: 'gettraffic'

C'est mon code:

try { 

     StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build()); 
     SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
     PropertyInfo propertyInfo = new PropertyInfo(); 
     propertyInfo.setName("City"); 
     propertyInfo.setValue(model.getCity()); 
     propertyInfo.setType(Integer.class); 
     propertyInfo.setName("Username"); 
     propertyInfo.setValue(model.getLetter()); 
     propertyInfo.setType(String.class); 
     propertyInfo.setName("SerialType"); 
     propertyInfo.setValue(model.getSeri()); 
     propertyInfo.setType(Integer.class); 
     propertyInfo.setName("Serial"); 
     propertyInfo.setValue(model.getSerial()); 
     propertyInfo.setType(Integer.class); 
     propertyInfo.setName("Date"); 
     propertyInfo.setValue(model.getDate()); 
     propertyInfo.setType(String.class); 
     request.addProperty(propertyInfo); 
     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12); 
     envelope.dotNet = true; 
     envelope.setOutputSoapObject(request); 
     HttpTransportSE httpTransportSE = new HttpTransportSE(URL); 
     // httpTransportSE.debug = true; 

     httpTransportSE.call(SOAP_ACTION, envelope); 

     // SoapPrimitive response = (SoapPrimitive) envelope.getResponse(); 

     SoapObject response = (SoapObject) envelope.getResponse(); 

     Log.i(TAG, "getSoapResponse: " + response.getPropertyCount()); 

     soapCallback.onCallback(response.toString()); 

    } catch (Exception e) { 
     Log.e(TAG, "getSoapResponse: " + e.getMessage(), e); 
     soapCallback.onCallback(e.getMessage()); 
     // e.printStackTrace(); 
    } 

Erreur:

E/Services_TAG: getSoapResponse: size <= 0 
java.lang.IllegalArgumentException: size <= 0 
at java.io.BufferedInputStream.<init>(BufferedInputStream.java:101) 
at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:251) 
at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:118) 
at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:113) 
at ir.aseman.app.soaptest.provider.Services.getSoapResponse(Services.java:58) 
at ir.aseman.app.soaptest.Activity.MainActivity.onCreate(MainActivity.java:40) 
at android.app.Activity.performCreate(Activity.java:5343) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2331) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2429) 
at android.app.ActivityThread.access$800(ActivityThread.java:151) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1342) 
at android.os.Handler.dispatchMessage(Handler.java:110) 
at android.os.Looper.loop(Looper.java:193) 
at android.app.ActivityThread.main(ActivityThread.java:5333) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:828) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644) 
at dalvik.system.NativeStart.main(Native Method) 

lorsqu'il est ouvert http://xx.xx.xx.xx/InquiryPenalty/InquiryPeernalty.svc?wsdl navigateur IIN il montre:

This XML file does not appear to have any style information associated with it. The document tree is shown below. 
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://tempuri.org/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" name="InquiryPenalty" targetNamespace="http://tempuri.org/"> 
<wsdl:types> 
<xsd:schema targetNamespace="http://tempuri.org/Imports"> 
<xsd:import schemaLocation="http://xx.xx.xx.xx/InquiryPenalty/InquiryPenalty.svc?xsd=xsd0" namespace="http://tempuri.org/"/> 
<xsd:import schemaLocation="http://xx.xx.xx.xx/InquiryPenalty/InquiryPenalty.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/"/> 
<xsd:import schemaLocation="http://xx.xx.xx.xx/InquiryPenalty/InquiryPenalty.svc?xsd=xsd2" namespace="http://schemas.datacontract.org/2004/07/TTO.InquiryPenalty.Models"/> 
</xsd:schema> 
</wsdl:types> 
<wsdl:message name="IInquiryPenalty_GetTraffics_InputMessage"> 
<wsdl:part name="parameters" element="tns:GetTraffics"/> 
</wsdl:message> 
<wsdl:message name="IInquiryPenalty_GetTraffics_OutputMessage"> 
<wsdl:part name="parameters" element="tns:GetTrafficsResponse"/> 
</wsdl:message> 
<wsdl:portType name="IInquiryPenalty"> 
<wsdl:operation name="GetTraffics"> 
<wsdl:input wsaw:Action="http://tempuri.org/IInquiryPenalty/GetTraffics" message="tns:IInquiryPenalty_GetTraffics_InputMessage"/> 
<wsdl:output wsaw:Action="http://tempuri.org/IInquiryPenalty/GetTrafficsResponse" message="tns:IInquiryPenalty_GetTraffics_OutputMessage"/> 
</wsdl:operation> 
</wsdl:portType> 
<wsdl:binding name="BasicHttpBinding_IInquiryPenalty" type="tns:IInquiryPenalty"> 
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/> 
<wsdl:operation name="GetTraffics"> 
<soap:operation soapAction="http://tempuri.org/IInquiryPenalty/GetTraffics" style="document"/> 
<wsdl:input> 
<soap:body use="literal"/> 
</wsdl:input> 
<wsdl:output> 
<soap:body use="literal"/> 
</wsdl:output> 
</wsdl:operation> 
</wsdl:binding> 
<wsdl:service name="InquiryPenalty"> 
<wsdl:port name="BasicHttpBinding_IInquiryPenalty" binding="tns:BasicHttpBinding_IInquiryPenalty"> 
<soap:address location="http://xx.xx.xx.xx/InquiryPenalty/InquiryPenalty.svc"/> 
</wsdl:port> 
</wsdl:service> 
</wsdl:definitions> 

sortie est: size <= 0

Comment résoudre?

+0

chèque namespace, soap_action Et METHOD_NAME avec côté serveur – HK1988

Répondre

1

Essayez de cette façon

try { 

     StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build()); 
     SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
     PropertyInfo propertyInfo = new PropertyInfo(); 
     propertyInfo.setName("City"); 
     propertyInfo.setValue(model.getCity()); 
     propertyInfo.setType(Integer.class); 
     propertyInfo.setName("Username"); 
     propertyInfo.setValue(model.getLetter()); 
     propertyInfo.setType(String.class); 
     propertyInfo.setName("SerialType"); 
     propertyInfo.setValue(model.getSeri()); 
     propertyInfo.setType(Integer.class); 
     propertyInfo.setName("Serial"); 
     propertyInfo.setValue(model.getSerial()); 
     propertyInfo.setType(Integer.class); 
     propertyInfo.setName("Date"); 
     propertyInfo.setValue(model.getDate()); 
     propertyInfo.setType(String.class); 
     request.addProperty(propertyInfo); 
     SoapSerializationEnvelope envelope = new 
     SoapSerializationEnvelope(SoapEnvelope.VER12); 

     envelope.setOutputSoapObject(request); 
     envelope.dotNet = true; 
     HttpTransportSE httpTransportSE = new HttpTransportSE(URL); 
     httpTransportSE.debug = true; 

     httpTransportSE.call(SOAP_ACTION, envelope); 
     SoapObject response = (SoapObject) envelope.bodyIn; 
     SoapPrimitive response = (SoapPrimitive) envelope.getResponse(); 
     String responsesuccess = response.toString(); 
     // SoapObject response = (SoapObject) envelope.getResponse(); 

     Log.i(TAG, "getSoapResponse: " + responsesuccess); 

     //soapCallback.onCallback(response.toString()); 

    } catch (Exception e) { 
     Log.e(TAG, "getSoapResponse: " + e.getMessage(), e); 
     soapCallback.onCallback(e.getMessage()); 
     // e.printStackTrace(); 
    } 
+0

est SoapObject inexploitable ou SoapPrimitive? l'un ou l'autre a le même nom – HK1988

+0

Pour obtenir une réponse du serveur, utilisez SoapPrimitive. éviter SoapObject pour l'instant –

+0

Erreur est arrivé sur httpTransportSE.call : java.lang.IllegalArgumentException: taille <= 0 – AndroSco

1
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12); 

Au lieu de

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
+0

Il vous aidera avec espoir. –

+0

ce n'était pas mon problème, vérifié avant – AndroSco