Title: [479] trunk/rails-integration/src/main/ruby/builtin/rails-integration/session/java_servlet_store.rb: Fix for string encoding on marshalled data
Revision
479
Author
tantalon
Date
2007-04-24 04:30:53 -0400 (Tue, 24 Apr 2007)

Log Message

Fix for string encoding on marshalled data

Modified Paths


Diff

Modified: trunk/rails-integration/src/main/ruby/builtin/rails-integration/session/java_servlet_store.rb (478 => 479)


--- trunk/rails-integration/src/main/ruby/builtin/rails-integration/session/java_servlet_store.rb	2007-04-24 06:32:12 UTC (rev 478)
+++ trunk/rails-integration/src/main/ruby/builtin/rails-integration/session/java_servlet_store.rb	2007-04-24 08:30:53 UTC (rev 479)
@@ -18,7 +18,11 @@
         @session_data = {}
         java_session = @java_request.getSession(false)
         if java_session
-          @session_data = Marshal.load(java_session.getAttribute("__current_rails_session"))
+          marshalled_bytes = java_session.getAttribute('__current_rails_session');
+          if marshalled_bytes
+          	marshalled_string = bytes_to_string(marshalled_bytes)
+          	@session_data = Marshal.load(marshalled_string)
+          end
         end
         @session_data
       end
@@ -26,7 +30,9 @@
       # Save session state to the Java session
       def update
         java_session = @java_request.getSession(true)
-        java_session.setAttribute("__current_rails_session", Marshal.dump(@session_data))
+        marshalled_string = Marshal.dump(@session_data)
+        marshalled_bytes = string_to_bytes(marshalled_string)
+        java_session.setAttribute('__current_rails_session', marshalled_bytes)
       end
 
       # Update and close the Java session entry
@@ -45,6 +51,26 @@
         @session_data
       end
 
+      private
+
+      def string_to_bytes(str)
+        bytes = Java::JavaClass.for_name("byte").new_array(str.length)
+        i = 0
+        str.each_byte do |b|
+          java.lang.reflect.Array.setByte(bytes, i, b)
+          i += 1
+        end
+        bytes
+      end
+
+      def bytes_to_string(bytes)
+        str = ''
+        for i in 0...bytes.length
+          str << java.lang.reflect.Array.getByte(bytes, i)
+        end
+        str
+      end
+
     end
   end
 end
_______________________________________________
Jruby-extras-devel mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/jruby-extras-devel

Reply via email to