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:[EMAIL PROTECTED] Sent: Tuesday, July 13, 2004 11:51 AM To: [EMAIL PROTECTED] 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 [EMAIL PROTECTED] +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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]