On Wed, 2004-07-14 at 00:09, robert burrell donkin wrote:
> On 13 Jul 2004, at 16:51, Henning P. Schmiedehausen wrote:
> 
> > Hi,
> 
> hi henning

Hi,


> XMLIntrospectorHelper is very limiting and will hopefully be completely  
> deprecated sometime soon. the primitives concept needs to be extended  
> into the more flexible concept of simple type. (the simple type concept  
> is more often used in the xml-object binding community.) the refactored  
> code with improved design has been merged into HEAD now and some of  
> these changes in this direction have been made (but i've lost track a  
> bit since i'm currently juggling a number of releases at the moment).  
> just FYI the plan is to cut a 1.6 based on the improved design very  
> soon.

This sounds nice. I felt that the XMLIntrospectionHelper is not flexible
enough to fit to all needs. Getting it pluggable through a strategy
object would help here.

> > 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.
> 
> i'm not sure i parse this correctly. (it's a little late, so it might  
> be me.) care to expand?

It's simple. With this patch, when you introspect a bean that contains
a byte [] array, you might end up with <foo bytes="random noise right
from the bean"> without any escaping or CDATA encapsulation. Most of the
times, this is not what the developer wants (and it might not be valid
XML). In my application I have a custom converter which does

import org.apache.commons.codec.binary.Base64;

public class CustomConverter
        extends DefaultObjectStringConverter
{
  public String objectToString(Object object, Class type, String flavour, Context 
context)
  {
     if (object instanceof byte[]) {
       return new String(Base64.encodeBase64Chunked(object), "ISO-8859-1");
     } else {
       return super.objectToString(object, type, flavour, context);
     }
  }

  public Object stringToObject(String value, Class type, String flavour, Context 
context)
  {
    if (type.equals(byte [].class)) {
      return Base64.decodeBase64(value.getBytes("ISO-8859-1"));
    } else {
      return super.stringToObject(value, type, flavour, context);
    }
  }
}

So I get my byte arrays converted into base64 Strings.

[...]

> > 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.
> 
> the answer is yes but the concept needs to move from a fixed list of  
> primitives to a flexible, configurable (with strategy plugin as well as  
> property) simple type binding. this is definitely on the to-do list but  
> i'm right in the middle of managing various release cycles so i'm not  
> sure when i'll get the chance to look at this.
> 
> it should be pretty straightforward and i'd be willing to help explain  
> the new design, so if you'd like to volunteer to take this on, that  
> would be great.

I will take a look. No promises, though. 

> 
> > 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.
> 
> there is every chance that a fix for this would get committed with a  
> unit test :)
> 
> i have an idea that the patch is against the 0.5 code base (but i could  
> be wrong since i haven't looked into this in detail). please set my  
> suspicious mind at rest by updating before you start getting into this.

Well, it is against CVS HEAD, which identifies itself as 0.6-dev in the
project.xml. Is there another version? 

        Regards
                Henning

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

Reply via email to