commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Henning P. Schmiedehausen" <...@intermeta.de>
Subject Re: [BETWIXT] Array of bytes anyone?
Date Thu, 15 Jul 2004 08:16:22 GMT
"Inger, Matthew" <Inger@Synygy.com> writes:

>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:

That's a nice idea. I'm a little unsure about introducing a fixed
dependency on commons codec, though.

But we could make the "encoding" attribute optional and pass it
through to the Converter which might use it to select an encoding.

Robert, what do you think?

	Regards
		Henning




><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

-- 
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


Mime
View raw message