Woof!

I'm about to starting using JAXB 2.0 annotations in my rework of sipXivr  
reading/writing mailboxprefs.xml.

Anyone have any good reasons why I should NOT do that?  My investigations  
so far seem to show that this is nice tech, already part of Java 6, so no  
extra libraries or Eclipse plugins required.

Some examples:

To parse a line like this (from mailboxprefs.xml):

    <contact type="email" attachments="yes" synchronize="no"  
password="ABCD">[email protected]</contact>

All that is needed is a class to hold the values, and in this case a  
special adapter to convert "yes|no" into boolean.  The annotations do all  
the work defining the mapping 'tween member variables and  
attributes/values.  It's even easier if the names of the member variables  
match the XML, but our naming conventions get in the way.

/**
  * XmlAdaptor to allow JAXB to parse booleans as "yes|no"
  * (should be subclass of MailboxPrefereces, but JAXB 2.0 doesn't allow  
that.)
  */
class MailboxPreferencesYesNoAdaptor extends XmlAdapter<String, Boolean> {

     @Override
     public String marshal(Boolean v) throws Exception {
         if (v != null) {
             return v.booleanValue() ? "yes" : "no";
         } else return "no";
     }

     @Override
     public Boolean unmarshal(String v) throws Exception {
         return v.toLowerCase().equals("yes") ||  
v.toLowerCase().equals("true");
     }

}


/**
  * Holds the Mailbox Preferences Contact information.
  * (should be a subclass of MailboxPreferences, but JAXB 2.0 doesn't allow  
that.)
  */
class MailboxPreferencesContact {
     @XmlAttribute( name = "type")  String m_type = "email";
     @XmlAttribute( name = "attachments")  
@XmlJavaTypeAdapter(MailboxPreferencesYesNoAdaptor.class) Boolean  
m_attachments = false;
     @XmlAttribute( name = "synchronize")  
@XmlJavaTypeAdapter(MailboxPreferencesYesNoAdaptor.class) Boolean  
m_synchronize = false;
     @XmlAttribute( name = "password") String m_password;
     @XmlValue String m_emailAddress;

     @XmlTransient
     public String getPassword() {
         if (m_password != null) {
             return new String(Base64.decodeBase64(m_password.getBytes()));
         }
         return null;
     }
}

So far it's been straight forward and simple, so I'm looking for the  
downside before continuing down this path.

Comments?

--Woof!
_______________________________________________
sipx-dev mailing list [email protected]
List Archive: http://list.sipfoundry.org/archive/sipx-dev
Unsubscribe: http://list.sipfoundry.org/mailman/listinfo/sipx-dev
sipXecs IP PBX -- http://www.sipfoundry.org/

Reply via email to