owenb       2002/12/04 09:27:01

  Modified:    java/src/org/apache/wsif/providers/ejb
                        WSIFOperation_EJB.java
               java/src/org/apache/wsif/providers/java
                        WSIFOperation_Java.java
  Added:       java/src/org/apache/wsif/providers ProviderUtils.java
  Log:
  Updates to compatibility methods so that the Java and EJB providers better 
interoperate with the SOAP providers:
  - Allow arrays of Strings* to be passed as part values when the method argument is 
an array of chars or Characters
    * All the Strings must have length 1
  - Convert all return values of type Character (char) to Strings
  - Move common methods to a new ProviderUtils class
  
  These conversions are useful because the XML schema does not define a char type
  
  Revision  Changes    Path
  1.1                  
xml-axis-wsif/java/src/org/apache/wsif/providers/ProviderUtils.java
  
  Index: ProviderUtils.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2002 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 "WSIF" 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 and was
   * originally based on software copyright (c) 2001, 2002, International
   * Business Machines, Inc., http://www.apache.org.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package org.apache.wsif.providers;
  
  import java.lang.reflect.Array;
  
  import org.apache.wsif.WSIFException;
  
  /**
   * A class of static utility methods for use across multiple providers
   * 
   * @author Owen Burroughs <[EMAIL PROTECTED]>
   */
  public class ProviderUtils {
        
        /**
         * Convert an array of any dimensions containing only Strings of length 1, to 
an array
         * of java.lang.Characters which has the same dimensions.
         * @param obj The array of Strings
         * @return The Character array
         * @exception A WSIFException thrown if the conversion fails for any reason.
         */
        public static Object stringArrayToCharacterArray(Object obj) throws 
WSIFException {
                return stringArrayToCharacterArray(obj, null);
        }
        
        /**
         * Convert an array of any dimensions containing only Strings of length 1, to 
an array
         * of java.lang.Characters which has the same dimensions.
         * @param obj The array of Strings
         * @param ret temporary array used in rescursion. The first call should be 
passed null.
         * @return The Character array
         * @exception A WSIFException thrown if the conversion fails for any reason.
         */
      protected static Object stringArrayToCharacterArray(Object obj, Object ret) 
throws WSIFException {
        if (obj.getClass().isArray()) {                 
                Object[] objs = (Object[]) obj;
                ret = new Object[objs.length];
                for (int i=0; i<objs.length; i++) {
                        Object temp = stringArrayToCharacterArray(objs[i], ((Object[]) 
ret)[i]);
                        if (i == 0) {
                                Class tempc = temp.getClass();
                                ret = Array.newInstance(tempc, objs.length);           
                         
                        }
                        ((Object[]) ret)[i] = temp;
                }
                return ret;
        } else if (obj instanceof String) {
                String s = (String) obj;
                if (s.length() == 1) {
                        ret = new Character(s.charAt(0));
                        return ret;
                } else {
                        throw new WSIFException("String is longer than 1 character");
                }
        } else {
                throw new WSIFException("Array entry is not a String or another 
array");
        }
      }
  
        /**
         * Convert an array of any dimensions containing only Strings of length 1, to 
an array
         * of chars which has the same dimensions.
         * @param obj The array of Strings
         * @return The char array
         * @exception A WSIFException thrown if the conversion fails for any reason.
         */
        public static Object stringArrayToCharArray(Object obj) throws WSIFException {
                return stringArrayToCharArray(obj, null);
        }
  
        /**
         * Convert an array of any dimensions containing only Strings of length 1, to 
an array
         * of chars which has the same dimensions.
         * @param obj The array of Strings
         * @param ret temporary array used in rescursion. The first call should be 
passed null.
         * @return The char array
         * @exception A WSIFException thrown if the conversion fails for any reason.
         */     
      protected static Object stringArrayToCharArray(Object obj, Object ret) throws 
WSIFException {
        if (obj.getClass().isArray()) {                 
                Object[] objs = (Object[]) obj;
                ret = new Object[objs.length];
                for (int i=0; i<objs.length; i++) {
                        Object temp = stringArrayToCharArray(objs[i], ((Object[]) 
ret)[i]);
                        if (i == 0) {
                                Class tempc = temp.getClass();
                                ret = Array.newInstance(tempc, objs.length);           
                         
                        }
                        ((Object[]) ret)[i] = temp;
                        if (temp instanceof Character && (i == objs.length - 1)) {
                                        char[] tempca = new char[objs.length];
                                        for (int j=0; j<objs.length; j++) {
                                                tempca[j] = ((Character[]) 
ret)[j].charValue();
                                        }
                                        ret = tempca;                                  
         
                        }
                }
                return ret;
        } else if (obj instanceof String) {
                String s = (String) obj;
                if (s.length() == 1) {
                        ret = new Character(s.charAt(0));
                        return ret;
                } else {
                        throw new WSIFException("String is longer than 1 character");
                }
        } else {
                throw new WSIFException("Array entry is not a String or another 
array");
        }
      }
  
        /**
         * Convert an array of java.lang.Characters of any dimensions to an equivalent 
array 
         * of java.lang.Strings which has the same dimensions.
         * @param obj The array of Characters
         * @return The array of Strings
         * @exception A WSIFException thrown if the conversion fails for any reason.
         */
        public static Object characterArrayToStringArray(Object obj) throws 
WSIFException {
                return characterArrayToStringArray(obj, null);
        }
  
        /**
         * Convert an array of java.lang.Characters of any dimensions to an equivalent 
array 
         * of java.lang.Strings which has the same dimensions.
         * @param obj The array of Characters
         * @param ret temporary array used in rescursion. The first call should be 
passed null.
         * @return The array of Strings
         * @exception A WSIFException thrown if the conversion fails for any reason.
         */
      protected static Object characterArrayToStringArray(Object obj, Object ret) 
throws WSIFException {
        if (obj.getClass().isArray()) {                 
                Object[] objs = (Object[]) obj;
                ret = new Object[objs.length];
                for (int i=0; i<objs.length; i++) {
                        Object temp = characterArrayToStringArray(objs[i], ((Object[]) 
ret)[i]);
                        if (i == 0) {
                                Class tempc = temp.getClass();
                                ret = Array.newInstance(tempc, objs.length);           
                         
                        }
                        ((Object[]) ret)[i] = temp;
                }
                return ret;
        } else if (obj instanceof Character) {
                String s = obj.toString();
                        return s;
        } else {
                throw new WSIFException("Array entry is not a Character or another 
array");
        }
      }
  
        /**
         * Convert an array of chars of any dimensions to an equivalent array 
         * of java.lang.Strings which has the same dimensions.
         * @param obj The array of chars
         * @return The array of Strings
         * @exception A WSIFException thrown if the conversion fails for any reason.
         */
        public static Object charArrayToStringArray(Object obj) throws WSIFException {
                return charArrayToStringArray(obj, null);
        }
  
        /**
         * Convert an array of chars of any dimensions to an equivalent array 
         * of java.lang.Strings which has the same dimensions.
         * @param obj The array of chars
         * @param ret temporary array used in rescursion. The first call should be 
passed null.
         * @return The array of Strings
         * @exception A WSIFException thrown if the conversion fails for any reason.
         */
      protected static Object charArrayToStringArray(Object obj, Object ret) throws 
WSIFException {
        if (obj.getClass().isArray()) {
                if (obj instanceof char[]) {
                        char[] ca = (char[]) obj;
                        Character[] chra = new Character[ca.length];
                        for (int j=0; j<ca.length; j++) {
                                chra[j] = new Character(ca[j]);
                        }
                        obj = chra;
                }               
                Object[] objs = (Object[]) obj;
                ret = new Object[objs.length];
                for (int i=0; i<objs.length; i++) {
                        Object temp = charArrayToStringArray(objs[i], ((Object[]) 
ret)[i]);
                        if (i == 0) {
                                Class tempc = temp.getClass();
                                ret = Array.newInstance(tempc, objs.length);           
                         
                        }
                        ((Object[]) ret)[i] = temp;
                }
                return ret;
        } else if (obj instanceof Character) {
                String s = obj.toString();
                        return s;
        } else {
                throw new WSIFException("Array entry is not a char or another array");
        }
      }
  
        /**
         * Convert a String to a Character. If the String is longer than one character
         * this method will return null;
         * @param str The String
         * @return The Character or null if the String was longer than one character   
  
         */
      public static Character stringToCharacter(String str) {
          if (str.length() != 1)
              return null;
          return new Character(str.charAt(0));
      }
  
        /**
         * Returns a default Object value for a given Class. If the Class is a 
primitive type
         * the method will return the default value for that primitive type wrapped up 
in its
         * object form. For example, invoking the method with int.class will return a 
new 
         * java.lang.Integer with an int value of 0. If the Class does not represent a
         * primitive type then null will be returned.
         * @param cls The Class
         * @return The default object value
         */
        public static Object getDefaultObject(Class cls) {
                if (cls == null) {
                        return null;
                } else if (cls.isPrimitive()) {
                        if (cls.getName().equals("int")) {
                                return new Integer(0);
                        } else if (cls.getName().equals("char")) {
                                return new Character('0');
                        } else if (cls.getName().equals("long")) {
                                return new Long(0);
                        } else if (cls.getName().equals("short")) {
                                short s = 0;
                                return new Short(s);
                        } else if (cls.getName().equals("double")) {
                                return new Double(0);
                        } else if (cls.getName().equals("boolean")) {
                                return new Boolean(false);
                        } else if (cls.getName().equals("byte")) {
                                byte b = 0;
                                return new Byte(b);
                        } else {
                                return new Float(0);
                        }
                } else {
                        return null;
                }
        }       
  }
  
  
  
  1.23      +85 -85    
xml-axis-wsif/java/src/org/apache/wsif/providers/ejb/WSIFOperation_EJB.java
  
  Index: WSIFOperation_EJB.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis-wsif/java/src/org/apache/wsif/providers/ejb/WSIFOperation_EJB.java,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- WSIFOperation_EJB.java    22 Nov 2002 15:56:36 -0000      1.22
  +++ WSIFOperation_EJB.java    4 Dec 2002 17:27:00 -0000       1.23
  @@ -88,6 +88,7 @@
   import org.apache.wsif.base.WSIFDefaultOperation;
   import org.apache.wsif.logging.MessageLogger;
   import org.apache.wsif.logging.Trc;
  +import org.apache.wsif.providers.ProviderUtils;
   import org.apache.wsif.wsdl.extensions.ejb.EJBOperation;
   import org.apache.wsif.wsdl.extensions.format.TypeMap;
   import org.apache.wsif.wsdl.extensions.format.TypeMapping;
  @@ -777,7 +778,7 @@
           for (int i = 0; i < parmTypes.length; i++) {
               // If the arg is a null then skip it
               if (args[i] == null) {
  -                compatibleArgs[i] = getDefaultObject(parmTypes[i]);
  +                compatibleArgs[i] = ProviderUtils.getDefaultObject(parmTypes[i]);
                   continue;
               }
               // Consider the special cas, squeezing a String into a Character
  @@ -796,10 +797,33 @@
       }
   
       protected Object getCompatibleReturn(Method method, Object returnObj) {
  -        Trc.entry(this,method,returnObj);
  -        Object o = null;
  -        if (method.getReturnType().equals(java.lang.Character.class)) {
  +     Trc.entry(this,method,returnObj);
  +     Object o = null;
  +     Class rt = method.getReturnType();
  +     Class ct = null;
  +     int dims = 0;
  +     if (rt.isArray()) {
  +             ct = rt.getComponentType();
  +             dims++;
  +             while (ct.isArray()) {
  +                     ct = ct.getComponentType();
  +                     dims++;
  +             }
  +     }
  +        if (returnObj instanceof java.lang.Character) {
               o = getCompatibleObject(java.lang.String.class, returnObj);
  +        } else if (ct != null && (ct.equals(java.lang.Character.class) || 
ct.equals(char.class))) {
  +             String stringArrayClassName = "[Ljava.lang.String;";
  +             for (int d=1; d<dims; d++) {
  +                     stringArrayClassName = "["+stringArrayClassName;
  +             }
  +             try {
  +                     Class stringArrayClass = Class.forName(stringArrayClassName, 
true, Thread.currentThread().getContextClassLoader());
  +                     o = getCompatibleObject(stringArrayClass, returnObj);
  +             } catch(ClassNotFoundException cnf) {
  +                     Trc.ignoredException(cnf);
  +                     o = returnObj;
  +             }
           } else {
               o = returnObj;
           }
  @@ -818,10 +842,13 @@
       //       this conversion may be needed on method args AND returns
       protected Object getCompatibleObject(Class cls, Object obj) {
           Trc.entry(this,cls,obj);
  +
  +     if (cls.getName().equals(obj.getClass().getName())) return obj;
  +             
           // String -> Character
           if ((cls.equals(java.lang.Character.class) || cls.equals(char.class))
               && obj.getClass().equals(java.lang.String.class)) {
  -            Character charArg = stringToCharacter((String) obj);
  +            Character charArg = ProviderUtils.stringToCharacter((String) obj);
               if (charArg == null) {
                   // Can't convert this string to character so return null
                   Trc.exit(null);
  @@ -830,6 +857,59 @@
               Trc.exit(charArg);
               return charArg;
           }
  +        
  +        // String arrays -> char/Character arrays and Character arrays -> String 
arrays
  +        if (cls.isArray() && obj.getClass().isArray()) {
  +             Class cct = cls.getComponentType();
  +             Class objct = obj.getClass().getComponentType();
  +             while (cct.isArray()) {
  +                     cct = cct.getComponentType();
  +             }
  +             while (objct.isArray()) {
  +                     objct = objct.getComponentType();
  +             }               
  +             if (objct.equals(java.lang.String.class) && cct.equals(char.class)) {
  +                     try {
  +                             Object charArray = 
ProviderUtils.stringArrayToCharArray(obj);
  +                             Trc.exit(charArray);
  +                             return charArray;
  +                     } catch (Exception e) {
  +                             Trc.ignoredException(e);
  +                     Trc.exit(null);
  +                     return null;
  +                     }
  +             } else if (objct.equals(java.lang.String.class) && 
cct.equals(java.lang.Character.class)) {
  +                     try {
  +                             Object charArray = 
ProviderUtils.stringArrayToCharacterArray(obj);
  +                             Trc.exit(charArray);
  +                             return charArray;
  +                     } catch (Exception e) {
  +                             Trc.ignoredException(e);
  +                     Trc.exit(null);
  +                     return null;
  +                     }
  +             } else if (objct.equals(java.lang.Character.class) && 
cct.equals(java.lang.String.class)) {
  +                     try {
  +                             Object charArray = 
ProviderUtils.characterArrayToStringArray(obj);
  +                             Trc.exit(charArray);
  +                             return charArray;
  +                     } catch (Exception e) {
  +                             Trc.ignoredException(e);
  +                     Trc.exit(null);
  +                     return null;
  +                     }
  +             } else if (objct.equals(char.class) && 
cct.equals(java.lang.String.class)) {
  +                     try {
  +                             Object charArray = 
ProviderUtils.charArrayToStringArray(obj);
  +                             Trc.exit(charArray);
  +                             return charArray;
  +                     } catch (Exception e) {
  +                             Trc.ignoredException(e);
  +                     Trc.exit(null);
  +                     return null;
  +                     }
  +             }
  +        }
   
           if (cls.equals(java.lang.String.class)
               && obj.getClass().equals(java.lang.Character.class)) {
  @@ -841,40 +921,6 @@
           return obj;
       }
   
  -    protected Character stringToCharacter(String str) {
  -        if (str.length() != 1)
  -            return null;
  -        return new Character(str.charAt(0));
  -    }
  -
  -     protected Object getDefaultObject(Class cls) {
  -             if (cls == null) {
  -                     return null;
  -             } else if (cls.isPrimitive()) {
  -                     if (cls.getName().equals("int")) {
  -                             return new Integer(0);
  -                     } else if (cls.getName().equals("char")) {
  -                             return new Character('0');
  -                     } else if (cls.getName().equals("long")) {
  -                             return new Long(0);
  -                     } else if (cls.getName().equals("short")) {
  -                             short s = 0;
  -                             return new Short(s);
  -                     } else if (cls.getName().equals("double")) {
  -                             return new Double(0);
  -                     } else if (cls.getName().equals("boolean")) {
  -                             return new Boolean(false);
  -                     } else if (cls.getName().equals("byte")) {
  -                             byte b = 0;
  -                             return new Byte(b);
  -                     } else {
  -                             return new Float(0);
  -                     }
  -             } else {
  -                     return null;
  -             }
  -     }
  -
       protected String getOutputMessageName() throws WSIFException {
           Trc.entry(this);
           if (fieldOutputMessageName == null) {
  @@ -1339,52 +1385,6 @@
   
           Trc.exit();
       }
  -
  -    /**
  -     * Creates a new input WSIFMessage. This overrides the 
  -     * WSIFDefaultOperation method to enable the use of 
  -     * compiled WSIFMessages by using a WSIFMessageFactory
  -     * to create the message.
  -     * 
  -     * @param name   the name of the message
  -     * @return a WSIFMessage instance
  -     * @see WSIFOperation#createInputMessage(String)
  -     */
  -    // defect 131672 and disable compiled msg support for now
  -    //    public WSIFMessage createInputMessage(String name) {
  -    //        Tr.entry(this, name);
  -    //        Definition d = (fieldPort == null) ? null : fieldPort.getDefinition();
  -    //        String ns = (d == null) ? "" : d.getTargetNamespace();
  -    //        WSIFMessageFactory mf = WSIFServiceImpl.getMessageFactory();
  -    //        WSIFMessage msg = mf.createMessage(ns, name + "Message");
  -    //        if (msg != null)
  -    //            msg.setName(name);
  -    //        Tr.exit(msg);
  -    //        return msg;
  -    //    }
  -
  -    /**
  -     * Creates a new input WSIFMessage. This overrides the 
  -     * WSIFDefaultOperation method to enable the use of 
  -     * compiled WSIFMessages by using a WSIFMessageFactory
  -     * to create the message.
  -     * 
  -     * @param name   the name of the message
  -     * @return a WSIFMessage instance
  -     * @see WSIFOperation#createInputMessage(String)
  -     */
  -    // defect 131672 and disable compiled msg support for now
  -    //    public WSIFMessage createOutputMessage(String name) {
  -    //        Tr.entry(this, name);
  -    //        Definition d = (fieldPort == null) ? null : fieldPort.getDefinition();
  -    //        String ns = (d == null) ? "" : d.getTargetNamespace();
  -    //        WSIFMessageFactory mf = WSIFServiceImpl.getMessageFactory();
  -    //        WSIFMessage msg = mf.createMessage(ns, name + "Message");
  -    //        if (msg != null)
  -    //            msg.setName(name);
  -    //        Tr.exit(msg);
  -    //        return msg;
  -    //    }
   
       public String deep() {
           String buff = "";
  
  
  
  1.25      +84 -88    
xml-axis-wsif/java/src/org/apache/wsif/providers/java/WSIFOperation_Java.java
  
  Index: WSIFOperation_Java.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis-wsif/java/src/org/apache/wsif/providers/java/WSIFOperation_Java.java,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- WSIFOperation_Java.java   22 Nov 2002 15:56:36 -0000      1.24
  +++ WSIFOperation_Java.java   4 Dec 2002 17:27:01 -0000       1.25
  @@ -90,6 +90,7 @@
   import org.apache.wsif.base.WSIFServiceImpl;
   import org.apache.wsif.logging.MessageLogger;
   import org.apache.wsif.logging.Trc;
  +import org.apache.wsif.providers.ProviderUtils;
   import org.apache.wsif.wsdl.extensions.java.JavaOperation;
   
   /**
  @@ -751,7 +752,7 @@
           for (int i = 0; i < parmTypes.length; i++) {
               // If the arg is a null then skip it
               if (args[i] == null) {
  -                compatibleArgs[i] = getDefaultObject(parmTypes[i]);
  +                compatibleArgs[i] = ProviderUtils.getDefaultObject(parmTypes[i]);
                   continue;
               }
               // Consider the special cas, squeezing a String into a Character
  @@ -771,8 +772,31 @@
       protected Object getCompatibleReturn(Method method, Object returnObj) {
        Trc.entry(this,method,returnObj);
        Object o = null;
  -        if (method.getReturnType().equals(java.lang.Character.class)) {
  +     Class rt = method.getReturnType();
  +     Class ct = null;
  +     int dims = 0;
  +     if (rt.isArray()) {
  +             ct = rt.getComponentType();
  +             dims++;
  +             while (ct.isArray()) {
  +                     ct = ct.getComponentType();
  +                     dims++;
  +             }
  +     }
  +        if (returnObj instanceof java.lang.Character) {
               o = getCompatibleObject(java.lang.String.class, returnObj);
  +        } else if (ct != null && (ct.equals(java.lang.Character.class) || 
ct.equals(char.class))) {
  +             String stringArrayClassName = "[Ljava.lang.String;";
  +             for (int d=1; d<dims; d++) {
  +                     stringArrayClassName = "["+stringArrayClassName;
  +             }
  +             try {
  +                     Class stringArrayClass = Class.forName(stringArrayClassName, 
true, Thread.currentThread().getContextClassLoader());
  +                     o = getCompatibleObject(stringArrayClass, returnObj);
  +             } catch(ClassNotFoundException cnf) {
  +                     Trc.ignoredException(cnf);
  +                     o = returnObj;
  +             }
           } else {
               o = returnObj;
           }
  @@ -791,10 +815,13 @@
       //       this conversion may be needed on method args AND returns
       protected Object getCompatibleObject(Class cls, Object obj) {
        Trc.entry(this,cls,obj);
  +     
  +     if (cls.getName().equals(obj.getClass().getName())) return obj;
  +             
           // String -> Character
           if ((cls.equals(java.lang.Character.class) || cls.equals(char.class))
               && obj.getClass().equals(java.lang.String.class)) {
  -            Character charArg = stringToCharacter((String) obj);
  +            Character charArg = ProviderUtils.stringToCharacter((String) obj);
               if (charArg == null) {
                   // Can't convert this string to character so return null
                   Trc.exit(null);
  @@ -803,7 +830,60 @@
               Trc.exit(charArg);
               return charArg;
           }
  -
  +        
  +        // String arrays -> char/Character arrays and Character arrays -> String 
arrays
  +        if (cls.isArray() && obj.getClass().isArray()) {
  +             Class cct = cls.getComponentType();
  +             Class objct = obj.getClass().getComponentType();
  +             while (cct.isArray()) {
  +                     cct = cct.getComponentType();
  +             }
  +             while (objct.isArray()) {
  +                     objct = objct.getComponentType();
  +             }               
  +             if (objct.equals(java.lang.String.class) && cct.equals(char.class)) {
  +                     try {
  +                             Object charArray = 
ProviderUtils.stringArrayToCharArray(obj);
  +                             Trc.exit(charArray);
  +                             return charArray;
  +                     } catch (Exception e) {
  +                             Trc.ignoredException(e);
  +                     Trc.exit(null);
  +                     return null;
  +                     }
  +             } else if (objct.equals(java.lang.String.class) && 
cct.equals(java.lang.Character.class)) {
  +                     try {
  +                             Object charArray = 
ProviderUtils.stringArrayToCharacterArray(obj);
  +                             Trc.exit(charArray);
  +                             return charArray;
  +                     } catch (Exception e) {
  +                             Trc.ignoredException(e);
  +                     Trc.exit(null);
  +                     return null;
  +                     }
  +             } else if (objct.equals(java.lang.Character.class) && 
cct.equals(java.lang.String.class)) {
  +                     try {
  +                             Object charArray = 
ProviderUtils.characterArrayToStringArray(obj);
  +                             Trc.exit(charArray);
  +                             return charArray;
  +                     } catch (Exception e) {
  +                             Trc.ignoredException(e);
  +                     Trc.exit(null);
  +                     return null;
  +                     }
  +             } else if (objct.equals(char.class) && 
cct.equals(java.lang.String.class)) {
  +                     try {
  +                             Object charArray = 
ProviderUtils.charArrayToStringArray(obj);
  +                             Trc.exit(charArray);
  +                             return charArray;
  +                     } catch (Exception e) {
  +                             Trc.ignoredException(e);
  +                     Trc.exit(null);
  +                     return null;
  +                     }
  +             }
  +        }
  +        
           if (cls.equals(java.lang.String.class)
               && obj.getClass().equals(java.lang.Character.class)) {
               Trc.exit(obj.toString());
  @@ -813,40 +893,6 @@
           return obj;
       }
   
  -    protected Character stringToCharacter(String str) {
  -        if (str.length() != 1)
  -            return null;
  -        return new Character(str.charAt(0));
  -    }
  -
  -     protected Object getDefaultObject(Class cls) {
  -             if (cls == null) {
  -                     return null;
  -             } else if (cls.isPrimitive()) {
  -                     if (cls.getName().equals("int")) {
  -                             return new Integer(0);
  -                     } else if (cls.getName().equals("char")) {
  -                             return new Character('0');
  -                     } else if (cls.getName().equals("long")) {
  -                             return new Long(0);
  -                     } else if (cls.getName().equals("short")) {
  -                             short s = 0;
  -                             return new Short(s);
  -                     } else if (cls.getName().equals("double")) {
  -                             return new Double(0);
  -                     } else if (cls.getName().equals("boolean")) {
  -                             return new Boolean(false);
  -                     } else if (cls.getName().equals("byte")) {
  -                             byte b = 0;
  -                             return new Byte(b);
  -                     } else {
  -                             return new Float(0);
  -                     }
  -             } else {
  -                     return null;
  -             }
  -     }
  -
       protected String getOutputMessageName() throws WSIFException {
        Trc.entry(this);
           if (fieldOutputMessageName == null) {
  @@ -1360,56 +1406,6 @@
   
           Trc.exit();
       }
  -
  -//    /**
  -//     * Creates a new input WSIFMessage. This overrides the 
  -//     * WSIFDefaultOperation method to enable the use of 
  -//     * compiled WSIFMessages by using a WSIFMessageFactory
  -//     * to create the message.
  -//     * 
  -//     * @param name   the name of the message
  -//     * @return a WSIFMessage instance
  -//     * @see WSIFOperation#createInputMessage(String)
  -//     */
  -// defect 131672 and disable compiled msg support for now
  -//    public WSIFMessage createInputMessage(String name) {
  -//        Tr.entry(this, name);
  -//
  -//        Definition d = (fieldPort == null) ? null : fieldPort.getDefinition();
  -//        String ns = (d == null) ? "" : d.getTargetNamespace();
  -//        WSIFMessageFactory mf = WSIFServiceImpl.getMessageFactory();
  -//        WSIFMessage msg = mf.createMessage(ns, name + "Message");
  -//        if (msg != null)
  -//            msg.setName(name);
  -//
  -//        Tr.exit(msg);
  -//        return msg;
  -//    }
  -//
  -//    /**
  -//     * Creates a new output WSIFMessage. This overrides the 
  -//     * WSIFDefaultOperation method to enable the use of 
  -//     * compiled WSIFMessages by using a WSIFMessageFactory
  -//     * to create the message.
  -//     * 
  -//     * @param name   the name of the message
  -//     * @return a WSIFMessage instance
  -//     * @see WSIFOperation#createInputMessage(String)
  -//     */
  -// defect 131672 and disable compiled msg support for now
  -//    public WSIFMessage createOutputMessage(String name) {
  -//        Tr.entry(this, name);
  -//
  -//        Definition d = (fieldPort == null) ? null : fieldPort.getDefinition();
  -//        String ns = (d == null) ? "" : d.getTargetNamespace();
  -//        WSIFMessageFactory mf = WSIFServiceImpl.getMessageFactory();
  -//        WSIFMessage msg = mf.createMessage(ns, name + "Message");
  -//        if (msg != null)
  -//            msg.setName(name);
  -//
  -//        Tr.exit(msg);
  -//        return msg;
  -//    }
   
       public String deep() {
           String buff = "";
  
  
  


Reply via email to