diff --git a/javaobj.py b/javaobj.py index 9fec6f4..891ee80 100644 --- a/javaobj.py +++ b/javaobj.py @@ -368,6 +368,7 @@ def __iter__(self): def __len__(self): return len(self._data) + # ------------------------------------------------------------------------------ @@ -1199,7 +1200,7 @@ def writeObject(self, obj): :raise RuntimeError: Unsupported type """ log_debug("Writing object of type {0}".format(type(obj).__name__)) - if isinstance(obj, JavaArray): + if isinstance(obj, (JavaArray, JavaByteArray)): # Deserialized Java array self.write_array(obj) elif isinstance(obj, JavaEnum): @@ -1627,3 +1628,14 @@ def create(self, classdesc): log_debug(">>> java_object: {0}".format(java_object)) return java_object + + +class ByteArrayDesc(object): + + def __init__(self): + self.name = JavaObjectConstants.TYPE_ARRAY + JavaObjectConstants.TYPE_BYTE + self.serialVersionUID = -5984413125824719648 + self.fields_names = [] + self.fields_types = [] + self.flags = JavaObjectConstants.SC_SERIALIZABLE + self.superclass = None diff --git a/tests/bom.ser b/tests/bom.ser new file mode 100644 index 0000000..a8a0d6c Binary files /dev/null and b/tests/bom.ser differ diff --git a/tests/bom.zip b/tests/bom.zip new file mode 100644 index 0000000..f2e0212 Binary files /dev/null and b/tests/bom.zip differ diff --git a/tests/test_zip.py b/tests/test_zip.py new file mode 100644 index 0000000..9313b3a --- /dev/null +++ b/tests/test_zip.py @@ -0,0 +1,19 @@ +import javaobj +import logging +import time + +def main(): + logging.basicConfig(level=logging.DEBUG) + logging.debug('--- %s ---', time.strftime("%H:%M:%S")) + filename = 'bom.zip' + output = 'bom.ser' + marshaller = javaobj.JavaObjectMarshaller() + with open(filename, 'rb') as zip_file: + data = zip_file.read() + javaarray = javaobj.JavaByteArray(data, classdesc=javaobj.ByteArrayDesc()) + java_data = marshaller.dump(javaarray) + with open(output, 'wb') as writefile: + writefile.write(java_data) + +if __name__ == '__main__': + main()