Tenemos una situación increíblemente frustrante con una API basada en CF Web Services que escribimos y mantenemos. Durante años, teníamos una API estable y que funcionaba bien con los clientes de Ruby, PHP y ColdFusion. Luego, este año apareció un cliente .NET, y descubrimos que nuestro servicio web no era interoperable con los lenguajes de tipo estático debido a nuestro uso extensivo de las estructuras.Errores serios e intermitentes con CF Web Service
Finalmente nos dimos cuenta de que teníamos que volver a escribir la API sin estructuras, y lo hemos hecho. Ahora usa valores escalares, matrices y CFC (que se traducen a SOAP complexTypes). El cliente de .NET está contento, y escribimos clientes de prueba de concepto en aproximadamente 6 idiomas diferentes para asegurarnos de que pudiéramos ser interoperables esta vez.
Para nuestra gran consternación, parece que nuestros servidores ColdFusion 7 no pueden servir a la nueva API de manera confiable. Funciona por alrededor de un día o dos después de reiniciar, a continuación, los clientes empiezan a ponerse errores como:
error: coldfusion.xml.rpc.CFCInvocationException [java.lang.ClassNotFoundException: tafkan.remote_api.pfapi.v.trunk. rsp_pf_survey_status_array]
y
java.lang.NoClassDefFoundError: tafkan/remote_api/pfapi/v/trunk/pf_unit
Reinicio de las instancias CF es la única manera de hacer que el problema desaparezca. Se invirtió mucho tiempo y dinero en la reconstrucción de la API, por lo que todo el mundo está realmente al borde de esto.
Hemos notado que los directorios de WEB-INF/cfc-skeletons de nuestras instancias CF eventualmente parecen tener dos copias de las clases para cada uno de los CFC utilizados por la API. Por ejemplo:
-rw-r--r-- Feb 17 09:15 remote_api.pfapi.v.trunk.pf_datum.class
-rw-r--r-- Feb 3 12:20 tafkan.remote_api.pfapi.v.trunk.pf_datum.class
Parece que los errores vienen de un problema del camino espacio de nombres o de búsqueda de clases, por lo que trató de cambiar todas las referencias de CFC a ser completamente calificado (notación de puntos a partir de un mapeo) en lugar de una simple referencias a CFC en el directorio actual. Esto parecía prometedor, pero el problema volvió en 24 horas.
Medio Ambiente:
- ColdFusion 7,0,2,142559 con hf702-70523, el grupo 2-instancia
- Sun Java 1.4.2_13
- Apache 2.0.52
- Centos 4.5 32 -bit
Tal vez la actualización de uno de estos venerables software ayudaría? ¿Tal vez actualizar solo AXIS?
El soporte de Adobe no parece ser una opción, ya que CF7 está EOL'ed y en soporte de extensión extendida (y eso solo por unos días más).
Actualización:
Gracias a todos los que he unido a esta discusión! Aquí hay una actualización de dónde están las cosas en este momento.
El servicio acaba de cagar por primera vez hoy.Una de las instancias de clúster todavía era capaz de generar el WSDL, mientras que la otra instancia dijo:
AXIS error
Sorry, something seems to have gone wrong... here are the details:
Exception - java.lang.NoClassDefFoundError: tafkan/remote_api/pfapi/v/trunk/rsp_pf_numeric_array
Ambos CFC-esqueletos directorios contienen un archivo llamado tafkan.remote_api.pfapi.v.trunk.rsp_pf_numeric_array.class, y no parece contener los archivos de otro nombre que hemos visto algunas veces (remote_api.pfapi.v.trunk.rsp_pf_numeric_array.class). Los archivos en cfc-skeletons no parecen haber sido modificados desde que los servidores se iniciaron ayer.
El tiempo de actividad en ambas instancias fue de aproximadamente 21.5 horas. Me estaba ejecutando sin JIT (-Xint).
He reiniciado ambas instancias. Ahora se están ejecutando en Sun Java 1.4.2_19 (en lugar de _13), y JIT se ha vuelto a habilitar ya que claramente no estaba causando este error y las cosas eran mucho más lentas sin él. También borré las casillas de verificación "guardar archivos de clase".
Y ahora, esperamos de nuevo ...
Actualización 2 El problema persiste. No estoy seguro de qué más probar en este momento. Arg!
FYI, esto es cruzada publicada en http://www.houseoffusion.com/groups/cf-talk/thread.cfm/threadid:60922
Empezaría por saltar a una JVM mucho más nueva y considerar romper el clúster (simplemente haga un ciclo completo de la solicitud si puede). También recuerde que puede configurar un par de servidores CF8 o CF9 para una prueba interna gratuita si puede acceder a ellos desde solo 1 o 2 direcciones IP – kevink
Tuve un problema similar con los espacios de nombres WSDL. La solución consistía en utilizar el contenedor .cfm para generar la información de servicio web adecuada. Quizás esto también puede funcionar para ti, consulta este control de calidad http://stackoverflow.com/questions/1119721/duplicate-file-name-for-same-wsdl-namespace-when-using-web-service-from-differe/1126143 # 1126143 – Sergii
uh, ColdFusion solo usa Apache Axis en el fondo (Java .... totalmente tipeado por última vez que revisé) .NET no debería tener problemas para consumir las estructuras. Lo hago todo el tiempo. Creo que se trata de algunos desarrolladores de .net por debajo del par y debería volver a las estructuras – ryber