something You put into the hashmap is using org.jcodings.specific.ASCIIEncoding
Caused by: java.io.NotSerializableException: org.jcodings.specific.ASCIIEncoding
and that's why empty map works.
> I'm using JRuby in a Rails application, which is supported by a Java
> backend. One of the Java Interface functions requires a hashmap be passed
> from the JRuby to the Ruby code, and I'm running into an unexpected
> RuntimeException in this case.
> The Hashmap construction is very straightforward:
> def java_map
> hash_map = ::Java::JavaUtil::HashMap.new
> hash_map[:original_document_uri] = "".to_s
> end
> This construction causes no errors in JRuby, and I can nicely access the map
> as expected.
> The trouble comes when I attempt to pass this map into Java:
> NativeException (java.lang.RuntimeException:
> org.jcodings.specific.ASCIIEncoding):
> org/apache/activemq/command/ActiveMQObjectMessage.java:111:in
> `storeContent'
> org/apache/activemq/command/ActiveMQObjectMessage.java:162:in `setObject'
> org/apache/activemq/ActiveMQSession.java:380:in `createObjectMessage'
> org/logicblaze/lingo/jms/marshall/DefaultMarshaller.java:60:in
> `createRequestMessage'
> org/logicblaze/lingo/jms/JmsClientInterceptor.java:131:in `invoke'
> net/zerofootprint/jms/JmsProxyFactoryBean.java:58:in `invoke'
> org/springframework/aop/framework/ReflectiveMethodInvocation.java:172:in
> `proceed'
> org/springframework/aop/framework/JdkDynamicAopProxy.java:202:in `invoke'
> $Proxy15:-1:in ...(I've removed my application specific details here, as
> they seem unimportant)
> That is the stacktrace that I get on my rails log, and in my java log I get:
> java.lang.RuntimeException: org.jcodings.specific.ASCIIEncoding
> ... (similar trace to above)
> Caused by: java.io.NotSerializableException:
> org.jcodings.specific.ASCIIEncoding
> at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1164)
> at
> java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518)
> at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483)
> at
> java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400 )
> at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
> at
> java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518)
> at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483)
> at
> java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400 )
> at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
> at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330)
> at java.util.HashMap.writeObject(HashMap.java:1000)
> ... (far too long for inclusion)
> As you can see, I am using ActiveMQ as my broker, and have the java running
> in a Tomcat instance, while the JRuby is running inside Trinidad.
> I'm not sure if the HashMap here is a red herring, but it seems that
> whatever I put into the hashmap causes this exception.
> Finally, I tried using an empty hashmap, and that seemed to work ok.
> I hope someone can lend me a bright Idea.
> --
> Ian Bentley