Eliminación del campo i: type en la solicitud SOAP generada por kSoap2 en Android

Ya he intentado leer el internet sobre mi problema, pero no pude encontrar la información correcta que necesito, así que trato de explicar mi problema:

Estoy usando kSoap2 para "hablar" a un servicio web sobre SOAP. Para generar mi solicitud SOAP, utilizo el código siguiente:

// Generate SOAP request XML SoapObject request = new SoapObject(PUB_NAMESPACE, "testSoapInterface"); // Add request header PropertyInfo requestHeader = new PropertyInfo(); requestHeader.setNamespace(PUB_NAMESPACE); requestHeader.setName("requestheader"); // Generate username property PropertyInfo usernameProp = new PropertyInfo(); usernameProp.setNamespace(BASE_NAMESPACE); usernameProp.setName("username"); usernameProp.setValue(username); // Generate applicationId property PropertyInfo applicationIdProp = new PropertyInfo(); applicationIdProp.setNamespace(BASE_NAMESPACE); applicationIdProp.setName("applicationId"); applicationIdProp.setValue("test"); // Add properties to requestHeader (nested) requestHeader.setValue(new SoapObject(PUB_NAMESPACE, "requestheader") .addProperty(usernameProp) .addProperty(applicationIdProp)); request.addProperty(requestHeader); 

Ahora, para serializar esto, uso lo siguiente:

 // Serialize SOAP request to the non .NET based SOAP server SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); soapEnvelope.dotNet = false; soapEnvelope.implicitTypes = true; soapEnvelope.setAddAdornments(false); soapEnvelope.setOutputSoapObject(request); 

Porque estoy usando el jabón anidado (el requestheader consiste en applicationId y username) puedo imaginarme que esto podría ser la causa. También tengo que utilizar diferentes espacios de nombres para las diferentes líneas, que también puede ser una causa.

¿¿Puede alguien ayudarme con esto?? ¡Gracias!

Puede utilizar la propiedad implicitTypes de su sobre:

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

De esta manera el xml generado no contendrá i: type.

Tenía el mismo problema, parece ser imposible usar PropertyInfo sin generar ningún i: tipo con él. Una buena solución sería reemplazar AddProperty (PropertyInfo pi) para que funcione en cualquier caso sin i: Type.

Tengo tres soluciones para ofrecer:

1

Si u no necesita el espacio de nombres entonces request.AddProperty (nombre, valor) lo hace!

2

U podría hacer su cabecera de la solicitud un SoapObject propio, no usará el "i: tipo".

 SoapObject requestHeader = new SoapObject(NAMESPACE,"requestheader"); 

Y en la última línea

 request.AddSoapObject(requestHeader); 

3

Para mí trabajó para fijar la versión del SoapEnvelope a "VER10" puesto que los tipos son ignorados entonces. Todavía están en su solicitud, pero ignorado. Reemplazar: SoapEnvelope.VER11 con: SoapEnvelope.VER10

Dondequiera que estés creando

  SoapSerializationEnvelope sEnvelop; 

Sólo asignar sEnvelop.implicitTypes = true;

No creará "i: type =" d: string "" o "i: type =" d: long "" la etiqueta de tipo de datos interna y el servicio web pueden ejecutarse correctamente

  • Cómo autenticar servicio web sap con ksoap2
  • "AndroidHttpTransport no se puede resolver a un tipo" error en ksoap2
  • Cómo configurar jabón Header usando ksoap2 - android
  • Consumir un servicio WCF localhost utilizando kSOAP2 en el emulador
  • KSoap2 SoapObject Object Reference no establecido en una instancia
  • KSOAP2: Cómo utilizar HttpsTransportSE?
  • Cuándo usar Soapobject y SoapPrimitive
  • Android ksoap llamada xmlpullparser excepción
  • Android, KSoap2 y .NET Web Service w / parameters = Resultado NULL
  • Ksoap2 Android tipo inesperado en respuesta
  • .net servicio web que returing NULL objetos en el inicio de datos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.