2012-06-21 13 views
9

Estoy investigando una solución para un problema con GWT and OSGi+PAX-Web. El problema concreto es que GWT no puede cargar el archivo de política de serialización, dando el siguiente error:¿Cómo carga GWT RPC los archivos de política de serialización?

ERROR: The serialization policy file '/ctx/ctx/6ExxxxxxxxxxxxxxxxF.gwt.rpc' was not found; did you forget to include it in this deployment?

El problema está en algún lugar entre Equinox OSGi y Pax-WEB.

Para encontrar una solución, me gustaría entender mejor cómo GWT-RPC está cargando los archivos de política de serialización.

  • ¿Cuál es su ciclo de vida? ¿Cuándo están cargados? (Veo que está en el inicio del servidor. ¿Hay alguna particularidad en el ciclo de vida? ¿Volver a cargar?)
  • ¿Cómo carga GWT este archivo en su pila? ¿En qué punto de la pila de llamadas de una solicitud? ¿Cómo sabe GWT de dónde cargarlos? ¿Puedo decirle a GWT dónde debería buscar este archivo?

(exención de responsabilidad: He leído los documentos GWT en los archivos generados [2] estoy en busca de más detalles de bajo nivel:. Tengo las impresiones que el error que estamos teniendo tiene que tratar HttpContext. getResource())

Respuesta

11

Todo está en RemoteServiceServlet.

What is their lifecycle? When are they loaded? (I see it's on server startup. Any particularities in the lifecycle? Reload?)

Están cargados en el primer uso (primera solicitud recibida) y almacenan en caché en un campo del servlet, por lo que su ciclo de vida está ligada a la de la propia servlet.

How GWT loads this file in its stack? At what point in the call stack of a request? How does GWT knows where to load them from? Can I tell GWT where it should look for this file?

servlet.getServletContext().getResourceAsStream. Puede personalizar esto anulando doGetSerializationPolicy (como se dice en JavaDoc).
El nombre del archivo (URL del recurso) se genera a partir de la ruta de la solicitud y el encabezado de solicitud X-GWT-Permutation.

+1

gracias por los indicadores. Buen material. Para el registro, aquí está el enlace a la fuente. Podría ser útil como referencia: http://code.google.com/p/google-web-toolkit/source/browse/trunk/user/src/com/google/gwt/user/server/rpc/RemoteServiceServlet.java? spec = svn5045 & r = 5045 – maasg

+0

¿Cómo funciona esto con GWT-PhoneGap? registro remoto? https://code.google.com/p/gwt-phonegap/wiki/LoggingModule el '' .gwt.rpc'' solicitado está en el teléfono. ¿Tengo que copiarlo en el servidor o GWT lo enviará en cualquier momento? – confile

4

Busqué el archivo .rpc en mi archivo EAR y encontré que el nombre del archivo era diferente al error.

Solución: borró la memoria caché del navegador y la actualizó.

+0

, entonces probablemente tengas un problema diferente. – maasg

+0

Sospecho que esta es la solución para la mayoría de las personas que tienen este problema. –

+0

+1 aquí Para mí, parece que deberíamos encontrar la forma de pedirle al cliente que obtenga recursos nuevos después de la actualización de la aplicación. –

4

Respuesta proporcionada mi Nick trabajó para mí.

Tengo mi aplicación web ejecutándose con algunas clases durante mucho tiempo.

Más tarde he añadido nuevas clases en el servidor y cuando trato de iniciar la aplicación web, que me estaba dando el siguiente error:

ERROR: El archivo de política serialización '/ newapp/C3055CD048198D732D03CA6901E503 86.gwt .rpc 'no fue encontrado; ¿Olvidaste incluirlo en esta implementación?

ADVERTENCIA: No se pudo obtener el SerializationPolicy 'C3055CD048198D732D03CA6901E5038 6' para el módulo 'http: //10.10.1.23: 9200/newapp /'; se usará una política de serialización heredada, 1.3.3 compatible. Puede experimentar SerializationExceptions como resultado.

Luego, comencé la aplicación en la ventana de incógnito, que borra la caché y me funcionó.

Cuestiones relacionadas