tutorial servicios services libreria herramientas crear cliente java c++ soap

java - servicios - tutorial soap



C++ y SOAP (6)

Tengo una aplicación C ++ que necesita conectarse a una aplicación web de JAVA, ¿hay algún buen paquete SOAP de código abierto para esto o sería más fácil crear mi propia cuenta?


Aquí hay otro problema con gSOAP que acabamos de descubrir de la manera más difícil: utiliza select () para todas las encuestas, por lo que una vez que haya 1024 descriptores de archivos abiertos (64 en Windows?) Se eliminará la pila. Eso da como resultado errores espurios en los que no puede enviar mensajes, para completar bloqueos de la aplicación.

La solución alternativa, a menos que esté preparado para parchear gSOAP, es escribir su propio código de red y conectarlo con soap-> fconnect, -> fsend, -> frecv, etc.


Cuando vi el código generado de gSOAP, tuve un ataque al corazón.

El hecho de que el usuario deba hacer toda la gestión de la memoria para cada objeto me dejó boquiabierto. Entonces, me senté e hice algo probablemente estúpido a largo plazo, pero bastante satisfactorio a corto plazo ...

Escribí un programa que envuelve el código gSOAP con mis propias clases de CPP que hacen que la interfaz se parezca más a lo que me gustaría que pareciera.

Usé Scoped Guards dentro de cada método de servicio para mantener la memoria, y como estoy tratando con todo tipo de tipos diferentes, utilicé una std::list<boost::any> para hacerlo. Tengo funciones que hacen que cada tipo de objeto que necesito, y ponen la memoria real en mi list<any> . Ha tenido algunos problemas, principalmente cambios de configuración. Ahora estoy generando miles de clases, hablando con docenas de servicios web.

No estoy seguro de que recomiende el mismo camino a nadie más ... Probablemente debería ir al grano y comenzar a intentar contribuir con gSOAP, en lugar de mantener mi propia herramienta, que depende de la salida de gSOAP ...


Eche un vistazo al proyecto Axis de Apache. Está bien soportado en C ++ (y Java) y si tienes la buena suerte de comenzar con un buen WSDL para el servicio objetivo, estarás en casa.


Fuimos con gSOAP en lugar de Axis para evitar tener una dependencia de JRE y Axis solo para construir un proyecto de C ++. Ha funcionado bien, lo cual es bueno ya que el código gSOAP es horrible y hace que sea muy desalentador arreglar cualquier error en él.

Sin embargo, una advertencia acerca de los enlaces gSOAP: nunca se puede usar más de un WSDL en un solo objeto de enlace (ejecutable, dll, objeto compartido). Esto se debe a que algunas de las funciones específicas de WSDL generadas tienen nombres generales (por ejemplo, soap_getfault ()).

Peor aún, con el enlace Unix ELF, estos nombres causarán enlaces cruzados entre objetos compartidos, por lo que un error de FooService podría ser procesado por soap_getfault () para BarService, corrompiendo la memoria si las estructuras de detalles de fallas son diferentes.

La solución para eso es asegurarse de que nada relacionado con SOPS esté expuesto fuera del SO al que están vinculados. Esto puede resolverse dando a gcc estas definiciones, tanto al vincular la biblioteca gSOAP como a su código:

#define SOAP_FMAC2 __attribute__ ((visibility ("hidden"))) #define SOAP_FMAC4 __attribute__ ((visibility ("hidden"))) #define SOAP_FMAC6 __attribute__ ((visibility ("hidden"))) #define SOAP_NMAC __attribute__ ((visibility ("hidden")))

Lo resolví colocándolos en un archivo de cabecera y forzando a gcc a incluir eso antes que cualquier otra cosa con -include fixsoaplink.h .

Una forma mejor si puede hacer el esfuerzo podría cambiar la visibilidad ELF predeterminada a oculta, y solo exportar los símbolos que desee (como dllimport / dllexport en VC).


Un Google rápido apareció esto para un kit de herramientas. Si bien nunca lo he usado, parece ser bastante popular y sólido. No es exactamente un paquete, y realmente no funciona, pero está en el medio.


Voy a votar por darkhelmet ya que gSoap también sería mi recomendación. Principalmente somos una tienda de Java pero con algunos bits C ++ y gSoap ha sido nuestra forma de integración SOAP preferida. De hecho, es más trabajo que las típicas acumulaciones de Java, pero parece sólido.