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:
- Android kSOAP2 Certificados SSL auto-firmados "Requisitos de seguridad no cumplidos - No hay cabecera de seguridad en el mensaje"
- Excepción al usar la biblioteca ksoap2 para android
- Usando addMapping sin el atributo "i: type =" en ksoap2 para android
- Java.io.IOException: Error en la solicitud HTTP, estado HTTP: 500 (ksoap2)
- Llame al servicio web .NET en Android
// 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!
- Ksoap2 org.xmlpull.v1.xmlpullparserexception error start_tag esperado
- Pasar objetos al servicio de jabón wcf desde android usando ksoap2; Envía y recibe 0
- Cómo llamar a un servicio WCF usando ksoap2 en android?
- Android, Ksoap, webService
- Ksoap2 Android - ¿cómo especificar un espacio de nombres para las propiedades secundarias de un objeto complejo?
- Android KSoap2: cómo obtener el nombre de la propiedad
- Android Ksoap2 SoapFault - código de error: 'soap: Client' faultstring: 'El servidor no pudo leer la solicitud
- Ksoap2 casting getResponse ()
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 puede una aplicación de Android tener cero actividades
- Android: permite que un contacto no se edite en el teléfono