Module: Java

Defined in:
lib/javaobs.rb

Overview

Java Objects namespace to read and write Java serialized objects to streams. Any Java serialized object can be read from a stream. To write a Java object, the meta class must be primed with a sample input serialized object. The is required because Java uses a UUID to identify classes and it is generated using a complex hashing scheme of data and method signatures. Since this system does not have access to that information, it needs to get it from a serialized object.

Objects that have custom serialization methods can be read and written by creating a class as we have for the Date class:

class Date < SimpleDelegator
extend JavaObject

def initialize
 super(Time)
end

def time=(time)
  case time
  when Time
    __setobj__(time)
  
  when String
    t, = time.unpack("Q")
    __setobj__(Time.at(t / 1000, (t % 1000) * 1000))
  end
end

def data
  t = __getobj__.tv_sec * 1000 + __getobj__.tv_usec / 1000
  [t].pack("Q")
end
end

The important methods are the data method that is used for writing the the object to a stream.

All other classes will be auto-generated when the stream is read and persisted. A Java Meta Class is added to the Ruby Class that contains all the Java field information needed to serialize the objects.

Defined Under Namespace

Modules: JavaObject, ObjectStream Classes: Date, JavaArray, JavaClass, JavaField, ObjectInputStream, ObjectOutputStream, SerializationError