I have a web application that uses the elasticsearch official java client. When using that web application on Websphere 8.5.5 using IBM JVM Java 7, I get the error below. I tried using Transport Client and Node Client. Also tried using Oracle JavaSE 7 and 8 as the JVM for Elasticsearch. But nothing worked out. Elasticsearch does not run on IBM JVM and Websphere only runs on IBM JVM.
Does anyone know a way to use the elasticsearch official java client from an application on Websphere?
Below is the error stack trace:
Caused by: org.elasticsearch.transport.TransportSerializationException: Failed to deserialize exception response from stream
at org.elasticsearch.transport.netty.MessageChannelHandler.handlerResponseError(MessageChannelHandler.java:178)
at org.elasticsearch.transport.netty.MessageChannelHandler.messageReceived(MessageChannelHandler.java:130)
at org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
at org.elasticsearch.common.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:296)
at org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:462)
at org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:443)
at org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:303)
at org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:268)
at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:255)
at org.elasticsearch.common.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88)
at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108)
at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:337)
at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89)
at org.elasticsearch.common.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178)
at org.elasticsearch.common.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
at org.elasticsearch.common.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:626)
at java.lang.Thread.run(Thread.java:780)
Caused by: java.io.StreamCorruptedException: unexpected end of block data
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1438)
at java.io.ObjectInputStream.access$400(ObjectInputStream.java:217)
at java.io.ObjectInputStream$GetFieldImpl.readFields(ObjectInputStream.java:2201)
at java.io.ObjectInputStream.readFields(ObjectInputStream.java:603)
at java.net.InetSocketAddress.readObject(InetSocketAddress.java:293)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:88)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
at java.lang.reflect.Method.invoke(Method.java:613)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1076)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1941)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1846)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1416)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2039)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1963)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1846)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1416)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2039)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1963)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1846)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1416)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:419)
at org.elasticsearch.transport.netty.MessageChannelHandler.handlerResponseError(MessageChannelHandler.java:176)
... 23 more
The only workaround to this problem is to use the same JVM for both Java applications. Serialization of Java exceptions can be inconsistent between the same JVM using different update versions, and clearly it's a problem between IBM's JVM and the one that you are running with Elasticsearch.
Specifically, Elasticsearch does not run on the IBM JVM because the IBM JVM has bugs in it that prevent it from working correctly.
Fortunately the outlook is getting much better here. IBM is working with Elasticsearch to get it working properly and Elasticsearch is removing serialization in Elasticsearch 2.0.