studio - ¿Genera Java desde WSDL para usar en Android con el cliente SOAP ksoap2-android?
consumir web service android studio (6)
Encontré esta herramienta para generar automáticamente wsdl en código Android,
http://www.wsdl2code.com/example.aspx
Aquí está el código:
public void callWebService() {
SampleService srv1 = new SampleService();
Request req = new Request();
req.companyId = "1";
req.userName = "userName";
req.password = "pas";
Response response = srv1.ServiceSample(req);
}
Tengo que acceder a un servicio web SOAP existente desde una aplicación de Android. Me han proporcionado algunos archivos WSDL que describen el servicio web. Leyendo algunas otras respuestas aquí en SO , parece que ksoap2-android es el camino a seguir, con respecto a qué cliente SOAP usar.
El siguiente problema es cómo generar las clases Java necesarias de los archivos WSDL, y aquí es donde me estoy quedando corto. Por lo que puedo ver, hay las siguientes opciones:
Intenté inicialmente el # 1, con el complemento AXIS2 eclipse para el generador wsdl2code. El asistente generó con éxito una gran cantidad de código Java, sin embargo, también cambió mi proyecto de Android a algún tipo de proyecto de servicio web, y nunca pude obtener nada que se haya generado para compilar, y mucho menos trabajar con ksoap2-android. Alguien tiene éxito con esto?
No puedo ejecutar wsdl2ksoap correctamente, ya que parece requerir un servicio web en ejecución, y todo lo que tengo en el momento actual son los archivos WSDL. Del mismo modo, al leer la página web, parece ser un proyecto en sus etapas iniciales, y no está realmente listo para el horario de máxima audiencia.
JAX-WS wsimport No he tenido oportunidad de probarlo todavía. Sin embargo, no estoy seguro si lo que genera funcionará con ksoap2-android?
Pregunta: ¿Cómo puedo generar archivos Java a partir de archivos WSDL para su uso en Android con la biblioteca de cliente SOAP ksoap2-android?
Muchas gracias por adelantado.
(PD: Sí, la opción es SOAP, no es óptima para Android, pero no puedo cambiar eso).
Mi conclusión después de un poco de investigación es que desafortunadamente no hay tal herramienta (madura) disponible. Ni AXIS2 ni JAX-WS funcionarán en Android, y WSDL2ksoap es simplemente demasiado inmaduro para cualquier uso real.
Sin embargo, hay una herramienta propietaria llamada wsclient++ que hará el trabajo realmente bien. (Lea la actualización a continuación, cuando se usa en forma real, no resiste la distancia). No usa la biblioteca del cliente ksoap2-android, sino que es suya.
La biblioteca del cliente es un tanto tosca, ya que tiene una fuerte dependencia del transporte http, lo que hace que las pruebas (de la unidad) sean un poco complicadas. Pero se puede modificar con bastante facilidad para permitir DI, ya que la fuente está disponible en el archivo jar distribuido.
Sin embargo, el generador de wsdl a java funciona perfectamente, y nos ahorrará toneladas de tiempo.
Actualización Después de trabajar con wsclient++
por un tiempo, está claro que las clases generadas son realmente rudimentarias y no manejan ningún caso de error. (Todos los métodos declaran throws Exception
).
Ya no usamos wsclient ++, ¡y no recomendaría a nadie que lo use! Realmente no hemos encontrado ninguna alternativa de trabajo, desafortunadamente. : /
Al final convertimos nuestros archivos WSDL usando AXIS2, y luego escribimos un montón de secuencias de comandos personalizadas para pelar y transformar los archivos java generados en algo que se compilará en Android usando la biblioteca ksoap2-android. Muy hackish, y necesita toneladas de mano de obra para ejecutar. Desafortunadamente. Si encuentra una mejor manera, o aparece una, por favor proporcione una nueva respuesta.
También he utilizado algunas clases autogeneradas para iPhone que quería ver aquí.
wsdl2code es uno de los similares que he usado en iPhone. Proporcione una url con el archivo wsdl y obtendrá algunas clases para descargar. Para mí, la parte más difícil fue descargar las piezas necesarias. Tomó más de 2 minutos de búsqueda :) ksoap2-android-assembly-3.0.0-jar-with-dependencies.jar
necesario para descargar el anuncio arrastrar y soltar en ADT (Eclipse). Es súper fácil, especialmente si ha usado la contraparte en iPhone. - una herramienta similar que he usado.
Sin embargo, en mi caso, no estoy contento con la solución, porque veo que estoy usando un cañón, un conjunto de cañones para disparar a un gorrión. En mi caso, se debe utilizar una Publicación HTTP y no incluir dependencias de otras bibliotecas.
Para ser sincero, no me importa demasiado, porque una vez que el lado del servidor cree que tenemos capacidad de batería ilimitada y plan de datos ilimitado, entonces cierro los ojos y no me importa ordenar-eliminar los gastos generales, que usan la CPU (batería ) aumentar los datos transmitidos a través de la red.
En el peor de los casos, debería ser JSON + HTTP POST no SOAP para móviles ...
Sugeriría hablar con los chicos del lado del servidor y explicarles por qué no sería bueno si lo hacen 2 haga clic en los asistentes y hagamos otro clic en los formularios para obtener el código generado. Al menos mientras la aplicación no es enorme, incluso debe ser un presupuesto para optimizar algunas implementaciones de interfaces para dispositivos móviles.
Tuve una situación similar (solo tenía el archivo wsdl sin servicio web). he usado
para generar clases para Android sin ningún problema. Esta herramienta usa la biblioteca ksoap. Lo mejor de esta herramienta es que admite extensiones y tipos de WCF, como el contrato de datos con el atributo IsReference o Guid.
Un poco tarde en esto, pero hay un generador de stub ksoap2 en desarrollo, y lo utilicé con éxito para crear los stubs.
http://ksoap2-stub-gen.sourceforge.net/
También alguien lo puso a disposición como un servicio en línea (es decir, le da su URL WSDL y el servicio devolverá un archivo zip que contiene los talones).
http://www.davidgouveia.net/2011/04/online-stub-generator-for-android-applications-using-ksoap2/
Utilizo la herramienta Apache CXF solo para crear dto, y escribí una clase para realizar un desasignamiento básico basado en el nombre de los elementos