2011-09-26 14 views
8

Sto usando un servizio Python che usa i messaggi decapitati come parte del suo protocollo. Mi piacerebbe interrogare questo servizio da Java, ma per farlo, ho bisogno di decollare il mio messaggio sul client (Java). Esistono implementazioni di pickle eseguite sulla JVM (idealmente con dipendenze minime)?Come serializzare un oggetto Java in modo che possa essere deserializzato da pickle (Python)?

Chiarimento: la modifica del lato server non è un'opzione, quindi mentre le serializzazioni alternative sono convenienti, non risolveranno il problema qui.

+2

Ahi, questo è brutto. Io non la penso così, c'è qualche possibilità di ottenere il servizio per produrre JSON o qualcosa del genere? A seconda dei dati serviti, può essere semplice come scambiare 'pickle.dumps' per' json.dumps'. I ragazzi che stanno dietro quel servizio dovrebbero assolutamente fare quel cambiamento se è possibile, pickle è una scelta davvero pessima per qualsiasi cosa a parte la prototipazione e i dati che sono garantiti per rimanere all'interno di Python (ad esempio perché non avrà mai importanza per nulla tranne la tua applicazione Pure Python). – delnan

+0

Dovrebbe essere semplice come serializzare una 'Mappa' di Java in un' Hash' di Python decapitato. Non ho bisogno di disimpegnare dal lato del cliente. Tirare Jython come dipendenza è comunque una grande pillola da ingoiare. –

+0

@SethFitzsimmons: Pickle è un protocollo specifico per Python, ed è solitamente considerato 'interno' - il protocollo stesso non è documentato e usiamo solo le implementazioni standard di pickle. Quindi, a meno che tu non voglia reimplementare il protocollo in java, dovrai fare affidamento su Python o Jython. –

risposta

7

Alcuni ulteriori indagini prodotto pyrolite, una libreria MIT-licenza che permette ai programmi Java e .NET per interfaccia con il mondo Python. Oltre alla funzionalità degli oggetti remoti, questo (più importante) include un serializzatore pickle e un serializzatore.

+2

Il link originale è rotto, quello attuale è 'https: // github.com/irmen/Pyrolite /' –

1

È possibile utilizzare un serializzatore Java JSON come GSON o Jackson a serilaise abbastanza facilmente e utilizzare una salamoia pitone JSON per deserializzare

+0

Certo, ma in questo caso non ho il lusso di modificare il server. –

Problemi correlati