Java Objects serialization corruption


I'm trying to serialize a Java Object from a Java client application toward a JIRA plugin (servlet) and in the reverse direction too.

Whereas the serialization works from the client to the server, it looks like corrupted when serialized from the plugin toward the client application:


invalid stream header: 3F3F0005


This is the code at the servlet:

OutputStream os = httpServletResponse.getOutputStream();
                oos = new ObjectOutputStream(os);


And this is the code at the client:


// ... This works ...
            oos = new ObjectOutputStream(conn.getOutputStream());
            // Connect ...

            // This does NOT work
            ois = new ObjectInputStream(conn.getInputStream());
            Object result = ois.readObject();


The "Hello" object sent from the client is properly read from the plugin, whereas the "World" object sent by the plugin is not read by the client app.


Note: conn is an HttpClient (3.x) connection object. The example code works fine when used in an standard web app on Tomcat rather on a JIRA plugin.


The error occurs just in the line below:

ois = new ObjectInputStream(conn.getInputStream());


which verifies some special headers at the beginning. As I saw some Atlassian's Java classes wrapping the servlet output, I wonder whether that code might impact on this.


Any suggestion?




1 answer

0 votes
Daniel Wester Community Champion Apr 04, 2015

More than likely it's the osgi container that's causing your headaches. Whenever you need to do stuff with class loading in p2 - you're asking for a lot of pain (personal experience here wink ). Don't know if this helps or not:

I would probably suggest stepping back and see if you can't get away from the serialization/deserialization and maybe using json or other language neutral transport mechanism. It will be more code to write, but I suspect you'll not be banging your head against a wall as much.

@Danie, thanks for the answer. Unfortunately, due the nature of the project, any alternative serialization is not an option :(. I would say the OSGi environment is not a problem (yet) because the serialized objects were Java's basic types (java.lang.String) which are available in any JVM and therefore no problem with packages visibility. I found this post: pointing to an outputstream related issue (just the same raised error: "invalid stream header"). While debugging, I saw some Atlassian's wrapper classes for the plugin servlet outputstream channel furthermore some sanitize tasks removing '/r' and '/n' characters. Perhaps (this is my guess) the Atlassian's Plugin Framework makes some http header manipulation, i.e: by adding some custom or "inoffensive" header in any servlet response. This would cause the "invalid stream header" error as the ObjectInputStream would read the Atlassian's injected header rather than the expected one.

Suggest an answer

Log in or Sign up to answer
Community showcase
Published Feb 07, 2019 in Marketplace Apps

A Timeless Love Story

It started as any story starts, on a normal, rainy day.   Admin meets App, and her name was Klok2, and like any first relationship we were both trying to make it work but neither one knew what...

457 views 8 27
Read article

Atlassian User Groups

Connect with like-minded Atlassian users at free events near you!

Find a group

Connect with like-minded Atlassian users at free events near you!

Find my local user group

Unfortunately there are no AUG chapters near you at the moment.

Start an AUG

You're one step closer to meeting fellow Atlassian users at your local meet up. Learn more about AUGs

Groups near you