2009-05-04 17 views
5

Ho due applicazioni che devono comunicare tra loro. App1 deve essere in grado di serializzare un oggetto che App2 può quindi deserializzare. Facilmente fatto, giusto? Ecco il problema; App1 è basato su C#, App2 è basato su Java. Quindi App1 deve scrivere il file nel formato di file binario Java. Come si può fare?Utilizzo di C# per serializzare un oggetto deserializzabile Java

Il modo in cui lo vedo, ho due opzioni. Il primo è trovare un modo per serializzare un oggetto Java in C#, in modo che App1 crei solo il file appropriato. La mia altra opzione sarebbe scrivere un convertitore in Java che legge in un file e popola l'oggetto di conseguenza e serializza l'oggetto appena popolato. In questo modo l'app C# dovrebbe solo scrivere una sorta di file di testo formattato che il convertitore interpreta.

Non è possibile apportare modifiche all'applicazione Java.

Come dovrebbe essere fatto?

Aggiornamento:

L'applicazione Java è già nelle mani dei clienti in modo da modificare lo schema di serializzazione causerebbe i clienti dati esistenti per essere incompatibili. L'app Java utilizza la serializzazione java nativa quando si ha a che fare con questo oggetto. Le modifiche all'app Java non possono avvenire.

L'app C# utilizza buffer di protocollo per serializzare i propri dati.

+1

Deve essere utilizzato un formato binario? Java supporta la serializzazione XML. – Steve

+1

Credo che, sì, deve essere in formato binario, dal momento che non gli è permesso di cambiarlo. – mmr

risposta

7

La risposta migliore è l'opzione 3: utilizzare uno schema di serializzazione neutro rispetto alla lingua.

Uso JavaScript. Il risparmio è un'altra opzione, i buffer di protocollo credo siano più focalizzati su RPC, ma dovrebbero essere utilizzabili anche per la serializzazione. XML o un formato binario personalizzato sarebbero altre opzioni.

Modifica: Spiacente, non ho notato che non è possibile apportare modifiche all'applicazione Java. Detto questo, il modo migliore per farlo sarebbe probabilmente quello di creare il tuo formato ben definito, scrivere un'app java in grado di leggere quel formato, quindi generare un oggetto java serializzato per l'app legacy.

+2

Forse sì, ma il risultato deve essere ancora nel formato Java. La domanda dice: "Non posso apportare modifiche all'applicazione Java". –

+0

Sono d'accordo con la soluzione di modifica. Se riesci a controllare l'app C#, potresti semplicemente scrivere un piccolo programma java che leggerebbe il tuo oggetto serializzato xml dal C# e sputerebbe i file serializzati java nativi. La tua app C# potrebbe generare l'app java quando sei pronto per "esportare" o qualunque sia il tuo processo. – digitaljoel

1

"IKVM" potrebbe essere qualcosa che è possibile utilizzare. Questo prodotto consente di convertire il bytecode java compilato (.jar, ecc.) In una DLL .NET. È super facile da usare e potrebbe fornirti l'intervallo di cui hai bisogno.

Oltre a ciò, il modo più semplice per eseguire questa operazione senza un'interoperabilità a livello binario è utilizzare semplicemente un formato di testo normale, ad esempio CSV o XML.

1

Basta usare la serializzazione XML. Entrambi i framework hanno un buon supporto e la semplicità renderà più facile il debug/maintain. Scrivi un piccolo programma in Java che importa solo l'XML e scrive il file binario.

1

La soluzione migliore sarebbe scrivere qualcosa che utilizzi l'interfaccia nativa Java. Non è divertente, ma funzionerà.

È possibile farlo direttamente usando JNI (non divertente, ma fattibile) o ci possono essere alcuni strumenti là fuori che genererà il codice per voi - dare un'occhiata a SWIG: http://www.swig.org/

Si potrebbe chiamare Java da C# per fare la persistenza per te.

Problemi correlati