aevers      2003/09/12 02:44:07

  Modified:    src/java/org/apache/xmlrpc XmlWriter.java
  Added:       src/java/org/apache/xmlrpc TypeDecoder.java
                        DefaultTypeDecoder.java
  Log:
  Allow more Java types to be encoded as <i4> and <double>. Default implementation
  works as specified. Developers can override the behaviour of the DefaultTypeEncoder
  and specify other Java types to be encoded as these tags.
  
  Revision  Changes    Path
  1.9       +13 -2     xml-rpc/src/java/org/apache/xmlrpc/XmlWriter.java
  
  Index: XmlWriter.java
  ===================================================================
  RCS file: /home/cvs/xml-rpc/src/java/org/apache/xmlrpc/XmlWriter.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- XmlWriter.java    1 May 2003 16:53:15 -0000       1.8
  +++ XmlWriter.java    12 Sep 2003 09:44:06 -0000      1.9
  @@ -104,6 +104,11 @@
       protected static final Base64 base64Codec = new Base64();
   
       /**
  +     * Class to delegate type decoding to.
  +     */
  +    protected static TypeDecoder typeDecoder;
  +
  +    /**
        * Mapping between Java encoding names and "real" names used in
        * XML prolog.
        */
  @@ -113,6 +118,7 @@
       {
           encodings.put(UTF8, "UTF-8");
           encodings.put(ISO8859_1, "ISO-8859-1");
  +        typeDecoder = new DefaultTypeDecoder();
       }
   
       /**
  @@ -177,7 +183,7 @@
           {
               chardata(obj.toString());
           }
  -        else if (obj instanceof Integer)
  +        else if (typeDecoder.isXmlRpcI4(obj))
           {
               startElement("int");
               write(obj.toString());
  @@ -189,7 +195,7 @@
               write(((Boolean) obj).booleanValue() ? "1" : "0");
               endElement("boolean");
           }
  -        else if (obj instanceof Double || obj instanceof Float)
  +        else if (typeDecoder.isXmlRpcDouble(obj))
           {
               startElement("double");
               write(obj.toString());
  @@ -358,5 +364,10 @@
                   }
               }
           }
  +    }
  +
  +    protected static void setTypeDecoder(TypeDecoder newTypeDecoder)
  +    {
  +        typeDecoder = newTypeDecoder;
       }
   }
  
  
  
  1.1                  xml-rpc/src/java/org/apache/xmlrpc/TypeDecoder.java
  
  Index: TypeDecoder.java
  ===================================================================
  package org.apache.xmlrpc;
  
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2003 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "XML-RPC" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  
  /**
   * Allows developers to customize the types translated to the XML-RPC
   * &lt;i4&gt; and &lt;double&gt .
   *
   * @author <a href="mailto:[EMAIL PROTECTED]">Andrew Evers</a>
   * @see org.apache.xmlrpc.DefaultTypeDecoder
   * @since 1.2
   */
  public interface TypeDecoder
  {
      /**
       * Test if a local object translates to an &lt;i4&gt; tag.
       */
      public boolean isXmlRpcI4(Object o);
  
      /**
       * Test if a local object translates to a &lt;double&gt; tag.
       */
      public boolean isXmlRpcDouble(Object o);
  }
  
  
  
  1.1                  xml-rpc/src/java/org/apache/xmlrpc/DefaultTypeDecoder.java
  
  Index: DefaultTypeDecoder.java
  ===================================================================
  package org.apache.xmlrpc;
  
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2003 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "XML-RPC" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  /**
   * The default implementation of the <code>TypeDecoder</code>
   * interface.  Provides the following mappings:
   *
   * <table cellpadding="3" cellspacing="2" border="1" width="100%">
   *   <tr><th>XML-RPC data type</th>         <th>Java class</th></tr>
   *   <tr><td>&lt;i4&gt; or &lt;int&gt;</td> <td>java.lang.Integer</td></tr>
   *   <tr><td>&lt;double&gt;</td>            <td>java.lang.Double, 
java.lang.Float</td></tr>
   * </table>
   *
   * @author <a href="mailto:[EMAIL PROTECTED]">Andrew Evers</a>
   * @see org.apache.xmlrpc.TypeDecoder
   * @since 1.2
   */
  public class DefaultTypeDecoder
      implements TypeDecoder
  {
      /**
       * Creates a new instance.
       */
      public DefaultTypeDecoder()
      {
      }
  
      public boolean isXmlRpcI4(Object o)
      {
          return (o instanceof Integer);
      }
  
      public boolean isXmlRpcDouble(Object o)
      {
          return (o instanceof Float || o instanceof Double);
      }
  }
  
  
  

Reply via email to