Hola compañeros:
Me pongo otra vez en vuestras manos por una duda: para envíar imágenes desde mi aplicación al servidor de mi empresa hemos creado un servicio web. El caso es que yo me he encargado de la parte del móvil y la empresa que gestiona el servidor ha hecho su parte de recibir por lo que sólo manejo la parte cliente.
Pues bien, para envíar los datos codifico una imagen a String64 y la envío por SOAP al servidor, allí la función espera un archivo con unos parámetros donde se debe procesar la información. Pero nunca llega a procesarlo ¿Porqué? Por que lo que envío y lo que espera es distinto.
Esto es lo que espera recibir:
spoiler<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.prueba.es">
<soapenv:Header/>
<soapenv:Body>
<ws:subirImagen>
<!--Optional:-->
<ws:strImg>imagen</ws:strImg>
<!--Optional:-->
<ws:password>password</ws:password>
</ws:subirImagen>
</soapenv:Body>
</soapenv:Envelope>
Y esto es lo que recibe:
spoiler<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>
<subirImagen xmlns="http://ws.prueba.es/">
<strImg>imagen</strImg>
<password>password</password>
</subirImagen>
</v:Body>
</v:Envelope>
La diferencia está en los prefijos (espacio de nombres), pero llevo varios días probando y cambiando cosas del código y no he conseguido nada.
Así que tengo dos preguntas. La primera es obvia ¿sabéis como puedo hacer que envíe exactamente lo que se espera? Y la segunda, si en el servidor reciben la información tal como muestro ¿no podrían también modificar alguna parte de su código para leerlo, o depende exclusivamente de lo que yo envío? Gracias de antemano.
Adjunto la llamada de mi código para más informacion.
spoiler
//Namespace y method_name están declarados antes con la información del servicio web.
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setAddAdornments(false);
envelope.implicitTypes = true;
//encodedImage es la imagen pasada a string64.
request.addProperty("strImg", encodedImage);
request.addProperty("password","password");
envelope.setOutputSoapObject(request);
HttpTransportSE transporte = new HttpTransportSE(URL);
try
{
transporte.debug = true;
transporte.call(SOAP_ACTION, envelope);
SoapObject resSoap =(SoapObject)envelope.bodyIn;
SoapObject respuesta = (SoapObject) resSoap.getProperty(0);
mensaje = respuesta.getProperty(0).toString();
mensaje = mensaje + " - ";
mensaje = mensaje + respuesta.getProperty(1).toString();
}
catch(Exception ex)
{
OK = false;
ex.printStackTrace();
}