CharlesO
Reading files / data structures from other platforms into Elixir/Erlang
I’ve built and Elixir application that needs to read files produced by a Legacy Java platform.
Looking at the Java source shows clearly how the files are being constructed:
HashMap localHashMap = null;
List localList1 = null;
...
ByteArrayOutputStream localByteArrayOutputStream = null;
ObjectOutputStream localObjectOutputStream = null;
localByteArrayOutputStream = new ByteArrayOutputStream();
localObjectOutputStream = new ObjectOutputStream(localByteArrayOutputStream);
localObjectOutputStream.flush();
localHashMap = new HashMap();
localHashMap.put("SecretKey", someBytes);
localHashMap.put("EncryptedData", localList1);
localHashMap.put("IVSpec", someMoreBytes);
localObjectOutputStream.writeObject(localHashMap);
arrayOfByte3 = localByteArrayOutputStream.toByteArray();
At the end of the day it’s really just a Java HashMap with known string keys that’s being written to file…
I tried to grok this link below, but i feel there’s got to be a much simpler way to interop common data structures from other platforms
https://medium.com/@mr.anmolsehgal/java-hashmap-internal-implementation-21597e1efec3
Any suggestions please?
Samples:
http://paperlesssolutionsltd.com.ng/sample1.zip
http://paperlesssolutionsltd.com.ng/sample2.zip
Marked As Solved
dimitarvp
Let’s see if actual code and working tool will help. I made a quick repo:
https://github.com/dimitarvp/java_serialized_hashmap_to_json
Compile and run instructions are in the README file.
After compilation I ran this:
java -cp gson-2.8.5.jar:. MapToJson ~/Downloads/sample1.zip
And voila, minified JSON on the standard output.
Also Liked
tcoopman
Also, by googling a bit I found: InfoWorld | Technology insight for the enterprise and this indeed matches the binary format of the sample1.zip file provided.
You could have a look at this site to check how to reverse engineer the binary format. But I still think it would be simpler to write a basic java utility that reads the sample1.zip file and writes it to json/…
tcoopman
Wouldn’t it be easier to read them back in a java application and save them as json or an other interop format?
There is no magical solution to read files from an internal java binary format. You could always try to understand and parse the java binary format but that sounds like something that will be a lot of work and possible error prone.
NobbZ
And I never told you to change that. I have understood that you can not change the legacy system.
What we are suggesting is that you write a “third” program in Java, that does the conversion, depending on the type of the value in the map, either write out JSON or XML or BERT (aka Erlang External Term Format).
You have already Java code that shows you how to load the dump. Therefore loading and converting from there is probably the easiest thing to do.
Trying to load the unknown encoding in elixir/erlang code will be a lot of pain. We are just suggesting the easier ways. The BEAM is good in letting other programs work. Use it!
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #hex
- #security









