commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Inger, Matthew" <In...@Synygy.com>
Subject RE: [BETWIXT] Array of bytes anyone?
Date Wed, 14 Jul 2004 13:53:39 GMT
If you're going to put something like <binary>, I would encourage
you to put an encoding style there:

<foo>
  <bar encoding="base64">...</bar>
</foo>

This would give people other methods of encoding in the future.  As
for the mapping, I think something like:

<element name="foo">
   <element name="bar"
            property="bar"
            binary="true"
            encoding="base64" />
   </element>
</element>

In this way, it would become abundtantly clear exactly what is going on
from the mapping.  These properties could potentially be ignored if you
weren't dealing with a type which could be converted to binary (byte[],
String)


-----Original Message-----
From: Henning P. Schmiedehausen [mailto:hps@intermeta.de]
Sent: Tuesday, July 13, 2004 11:51 AM
To: commons-dev@jakarta.apache.org
Subject: [BETWIXT] Array of bytes anyone?


Hi,

for a project, I need Betwixt to convert a special sort of beans into
XML. Beans, which contain a byte [] property (They come from Hibernate
which maps BINARY and TEXT onto these types, which is fine).

Regular Betwixt builds something like

<foo>
  <byte>0</byte>
  <byte>1</byte>
  <byte>2</byte>
  <byte>3</byte>
</foo>

for propery foo, which is not exactly the most efficient way to
express this array of bytes. Especially if it has about 5 MBytes
size. ;-) 

I was wondering whether I could get this done with regular betwixt but
the isPrimitive() in XMLIntrospectorHelp always bite me. In the end I
came up with the attached patch, which works fine for me (it might not
be ideal, because the resulting XML contains the raw sew^Wbinary data
if you write the bean out.

For my application I extend the DefaultObjectStringConverter to do
base64 encoding on the fly and end up with nice looking XML like this:

<foo attr1="1" attr2="2" attr3="3">
  <binary>
xCHPdC7mAlirPoYY8dZr1fACaXAqpW83BKOz//yCMWUkzgtkvkMhD0MwQpclKdsOhHB1PbaRzbxA
5KmsIprAxtG5Vkm2ze5jRUPY+og3Rqq5ccj19BL6joB0PKQmnJRlU0bw9ZGJntrIVH4g9Lq1E4Sx
bquW8iIOBGvsE3kYaW0bbf1mdPT2ubNnW2+fbm17wnhQxw9Ertbz1M69Mdp649/TZ//64WVw6Gg5
aLwq2161CMeKB0glbtMXxpNGASDG4G42q16YDtOIbJwRF429GLfpc+OJAI7UkHhGvx+cDcHYbTUC
YoSnsRNN+jn9AfcogqRDz/SfejeSC8FY0WQzggCCM8LT2BdjNs3T9fNEgCzWMyXRTRSCofdVFiD2
L1cSbZxSgQAAAABJRU5ErkJggg==
  </binary>
</foo>

which is exactly what I need. 

I was wondering if it would be more clever to allow the user to
explicitly set the primitiveType property of the element descriptor
from the .betwixt file. I found no way to do so, though and I already
had this patch which works for me.

Anyway, here is the patch, discussions welcome. ;-) This is against
CVS HEAD. I would volunteer to write an Unit test for it if has a
chance to get applied.

	Regards
		Henning

--- cut ---
Index:
src/java/org/apache/commons/betwixt/digester/XMLIntrospectorHelper.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/digest
er/XMLIntrospectorHelper.java,v
retrieving revision 1.31
diff -u -r1.31 XMLIntrospectorHelper.java
--- src/java/org/apache/commons/betwixt/digester/XMLIntrospectorHelper.java
4 Jul 2004 16:40:49 -0000	1.31
+++ src/java/org/apache/commons/betwixt/digester/XMLIntrospectorHelper.java
13 Jul 2004 15:39:37 -0000
@@ -583,6 +583,8 @@
             
         } else if ( type.equals( Object.class ) ) {
             return false;
+        } else if (type.equals ( byte [].class) ) {
+            return true;
         }
         return type.getName().startsWith( "java.lang." )
             || Number.class.isAssignableFrom( type ) 
Index:
src/java/org/apache/commons/betwixt/strategy/DefaultObjectStringConverter.ja
va
===================================================================
RCS file:
/home/cvs/jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/strate
gy/DefaultObjectStringConverter.java,v
retrieving revision 1.10
diff -u -r1.10 DefaultObjectStringConverter.java
---
src/java/org/apache/commons/betwixt/strategy/DefaultObjectStringConverter.ja
va	4 Jul 2004 16:57:05 -0000	1.10
+++
src/java/org/apache/commons/betwixt/strategy/DefaultObjectStringConverter.ja
va	13 Jul 2004 15:39:37 -0000
@@ -66,7 +66,8 @@
             if ( object instanceof java.util.Date && isUtilDate( type ) ) {
                 
                 return formatter.format( (java.util.Date) object );
-                
+            } else if ( object instanceof byte[]) {
+                return new String((byte []) object);
             } else {
                 // use ConvertUtils implementation
                 return super.objectToString( object, type, flavour, context
);
@@ -98,6 +99,8 @@
                     // but never mind
                     return value;
                 }
+            } else if (type.equals(byte [].class)) {
+                return value.getBytes();
             } else {
                 // use ConvertUtils implementation
                 return super.stringToObject( value, type, flavour, context
);
--- cut ---

-- 
Dipl.-Inf. (Univ.) Henning P. Schmiedehausen          INTERMETA GmbH
hps@intermeta.de        +49 9131 50 654 0   http://www.intermeta.de/

RedHat Certified Engineer -- Jakarta Turbine Development  -- hero for hire
   Linux, Java, perl, Solaris -- Consulting, Training, Development

"Fighting for one's political stand is an honorable action, but re-
 fusing to acknowledge that there might be weaknesses in one's
 position - in order to identify them so that they can be remedied -
 is a large enough problem with the Open Source movement that it
 deserves to be on this list of the top five problems."
                       -- Michelle Levesque, "Fundamental Issues with
                                    Open Source Software Development"

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org


Mime
View raw message