You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xmlrpc-dev@ws.apache.org by dl...@apache.org on 2004/06/30 20:49:36 UTC

cvs commit: ws-xmlrpc/src/java/org/apache/xmlrpc/util HttpUtil.java

dlr         2004/06/30 11:49:36

  Modified:    src/java/org/apache/xmlrpc/util HttpUtil.java
  Log:
  Work around method signature incompatibilities between version 1.1 and
  1.2 of Commons Codec's Base64.encode() and decode() methods.
  
  The 1.1 release had two encode() and decode() methods (each), one that
  accepted a byte[] and the other accepted an Object.  In both cases,
  Encoder/Decoder Exceptions were thrown if the argument wasn't a
  byte[].  In Codec 1.2, both methods still exist, but the one that
  accepts a byte[] no longer throws the exception (because the input is
  guaranteed to be of type byte[]).
  
  So, I have one option (which kind of sucks), I can cast the byte[] to an
  Object in the calls to encode/decode to retain compatibility between codec
  1.1 and 1.2.
  
  * src/java/org/apache/xmlrpc/DefaultTypeFactory.java
    createBase64(String): Cast input to the Base64.decode() method from
    byte[] to Object.
  
  * src/java/org/apache/xmlrpc/XmlWriter.java
    writeObject(Object): Cast return value of Base64.encode() from
    Object to byte[].
  
  * src/java/org/apache/xmlrpc/applet/SimpleXmlRpcClient.java
    writeObject(Object, XmlWriter): Cast return value of Base64.encode()
    from Object to byte[].
  
    Value.characterData(String): Cast input to the Base64.decode()
    method from byte[] to Object.
  
  * src/java/org/apache/xmlrpc/util/HttpUtil.java
    encodeBasicAuthentication(String, String): Cast return value of
    Base64.encode() from Object to byte[], and assure we call the Object
    overload.
  
  Submitted by: Jochen Wiedmann
  Reported by:  Ryan Bloom
  
  Revision  Changes    Path
  1.3       +11 -7     ws-xmlrpc/src/java/org/apache/xmlrpc/util/HttpUtil.java
  
  Index: HttpUtil.java
  ===================================================================
  RCS file: /home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/util/HttpUtil.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -u -r1.2 -r1.3
  --- HttpUtil.java	1 May 2003 16:53:16 -0000	1.2
  +++ HttpUtil.java	30 Jun 2004 18:49:36 -0000	1.3
  @@ -85,14 +85,18 @@
           }
           else
           {
  -            try {
  -                auth = new String(base64.encode((user + ':' + password)
  -                        .getBytes())).trim();
  +            try
  +            {
  +                Object bytes = (user + ':' + password).getBytes();
  +                auth = new String((byte[]) base64.encode(bytes)).trim();
               }
  -            catch (EncoderException e) {
  -                // EncoderException is never thrown in the body of Base64.encode(byte[]) in version 1.1
  -                // TODO: possibly throw an exception from this method or refactor this class
  -                throw new RuntimeException("Incompatible version of org.apache.commons.codec.binary.Base64 used, and an error condition was encountered.");
  +            catch (EncoderException e)
  +            {
  +                // EncoderException is never thrown in the body of
  +                // Base64.encode(byte[]) in Commons Codec 1.1.
  +                throw new RuntimeException("Possibly incompatible version of '"
  +                                           + Base64.class.getName() +
  +                                           "' used: " + e);
               }
           }
           return auth;