2011-09-26 26 views
8

Estoy usando un servicio de Python que usa mensajes encurtidos como parte de su protocolo. Me gustaría consultar este servicio desde Java, pero para hacerlo, tengo que resumir mi mensaje en el cliente (Java). ¿Hay implementaciones de pickle que se ejecutan en la JVM (idealmente con dependencias mínimas)?¿Cómo serializo un objeto Java de modo que pueda ser deserializado por pickle (Python)?

Aclaración: Modificar el lado del servidor no es una opción, por lo que si bien las serializaciones alternativas serían convenientes, no resolverán el problema aquí.

+2

Ouch, esto es feo. No lo creo, ¿hay alguna posibilidad de que el servicio produzca JSON o algo así? Dependiendo de los datos servidos, puede ser tan simple como intercambiar 'pickle.dumps' por' json.dumps'. Los chicos detrás de ese servicio definitivamente deberían cambiar eso si es posible, Pickle es una opción realmente mala para algo aparte de la creación de prototipos y datos que permanezcan dentro de Python (por ejemplo, porque nunca importará nada excepto tu aplicación Python pura) – delnan

+0

Debe ser tan simple como serializar un 'Mapa' Java en un Python' Hash' en escabeche. No necesito desordenar en el lado del cliente. Sin embargo, incorporar a Jython como una dependencia es una gran píldora para tragar. –

+0

@SethFitzsimmons: Pickle es un protocolo específico de Python, y generalmente se considera 'interno'; el protocolo en sí no está documentado, y solo usamos las implementaciones pickle estándar. Entonces, a menos que desee volver a implementar el protocolo en Java, tendrá que depender de Python o Jython. –

Respuesta

7

Algunas investigaciones adicionales produjo pyrolite, una biblioteca con licencia del MIT que permite que los programas Java y .NET a interfaz con el mundo de Python. Además de la funcionalidad de objetos remotos, (más importante) incluye un serializador y un serializador pickle.

+2

El enlace original está roto, el actual es 'https: // github.com/irmen/Pyrolite /' –

1

Puede utilizar un serializador Java JSON como GSON o Jackson a serilaise con bastante facilidad y usar una salmuera pitón JSON deserializar

+0

Claro, pero en este caso no tengo el lujo de modificar el servidor. –

Cuestiones relacionadas