You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by pe...@apache.org on 2005/07/22 13:39:08 UTC

cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/ant/jmx JMXAccessorGetTask.java JMXAccessorInvokeTask.java JMXAccessorQueryTask.java JMXAccessorSetTask.java JMXAccessorTask.java

pero        2005/07/22 04:39:08

  Modified:    catalina/src/share/org/apache/catalina/ant/jmx
                        JMXAccessorGetTask.java JMXAccessorInvokeTask.java
                        JMXAccessorQueryTask.java JMXAccessorSetTask.java
                        JMXAccessorTask.java
  Log:
  Make Tasks also usefull outside ant script projects.
  handle empty project attribute
  properties can save also as local map.
  
  Revision  Changes    Path
  1.3       +2 -2      jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/ant/jmx/JMXAccessorGetTask.java
  
  Index: JMXAccessorGetTask.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/ant/jmx/JMXAccessorGetTask.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- JMXAccessorGetTask.java	30 Jun 2005 13:01:27 -0000	1.2
  +++ JMXAccessorGetTask.java	22 Jul 2005 11:39:08 -0000	1.3
  @@ -107,7 +107,7 @@
        * @exception BuildException
        *                if an error occurs
        */
  -    protected String jmxExecute(MBeanServerConnection jmxServerConnection)
  +    public String jmxExecute(MBeanServerConnection jmxServerConnection)
           throws Exception {
   
           if (getName() == null) {
  
  
  
  1.3       +2 -2      jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/ant/jmx/JMXAccessorInvokeTask.java
  
  Index: JMXAccessorInvokeTask.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/ant/jmx/JMXAccessorInvokeTask.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- JMXAccessorInvokeTask.java	30 Jun 2005 13:01:27 -0000	1.2
  +++ JMXAccessorInvokeTask.java	22 Jul 2005 11:39:08 -0000	1.3
  @@ -158,7 +158,7 @@
        * @exception BuildException
        *                if an error occurs
        */
  -    protected String jmxExecute(MBeanServerConnection jmxServerConnection)
  +    public String jmxExecute(MBeanServerConnection jmxServerConnection)
           throws Exception {
   
           if (getName() == null) {
  
  
  
  1.4       +2 -2      jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/ant/jmx/JMXAccessorQueryTask.java
  
  Index: JMXAccessorQueryTask.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/ant/jmx/JMXAccessorQueryTask.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- JMXAccessorQueryTask.java	8 Jul 2005 20:54:40 -0000	1.3
  +++ JMXAccessorQueryTask.java	22 Jul 2005 11:39:08 -0000	1.4
  @@ -109,7 +109,7 @@
        * @exception BuildException
        *                if an error occurs
        */
  -    protected String jmxExecute(MBeanServerConnection jmxServerConnection)
  +    public String jmxExecute(MBeanServerConnection jmxServerConnection)
           throws Exception {
   
           if (getName() == null) {
  
  
  
  1.3       +2 -2      jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/ant/jmx/JMXAccessorSetTask.java
  
  Index: JMXAccessorSetTask.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/ant/jmx/JMXAccessorSetTask.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- JMXAccessorSetTask.java	30 Jun 2005 13:01:27 -0000	1.2
  +++ JMXAccessorSetTask.java	22 Jul 2005 11:39:08 -0000	1.3
  @@ -155,7 +155,7 @@
        * @exception BuildException
        *                if an error occurs
        */
  -    protected String jmxExecute(MBeanServerConnection jmxServerConnection)
  +    public String jmxExecute(MBeanServerConnection jmxServerConnection)
           throws Exception {
   
           if (getName() == null) {
  
  
  
  1.10      +231 -160  jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/ant/jmx/JMXAccessorTask.java
  
  Index: JMXAccessorTask.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/ant/jmx/JMXAccessorTask.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- JMXAccessorTask.java	21 Jul 2005 10:45:45 -0000	1.9
  +++ JMXAccessorTask.java	22 Jul 2005 11:39:08 -0000	1.10
  @@ -14,10 +14,8 @@
    * limitations under the License.
    */
   
  -
   package org.apache.catalina.ant.jmx;
   
  -
   import java.io.IOException;
   import java.lang.reflect.Array;
   import java.net.InetAddress;
  @@ -27,6 +25,7 @@
   import java.util.Iterator;
   import java.util.List;
   import java.util.Map;
  +import java.util.Properties;
   import java.util.Set;
   import java.util.StringTokenizer;
   
  @@ -47,39 +46,43 @@
   import org.apache.tools.ant.BuildException;
   import org.apache.tools.ant.Project;
   
  -
   /**
  - * Access <em>JMX</em> JSR 160 MBeans Server. 
  + * Access <em>JMX</em> JSR 160 MBeans Server.
    * <ul>
    * <li>open more then one JSR 160 rmi connection</li>
    * <li>Get/Set Mbeans attributes</li>
    * <li>Call Mbean Operation with arguments</li>
  - * <li>Argument values can be converted from string to int,long,float,double,boolean,ObjectName or InetAddress </li>
  + * <li>Argument values can be converted from string to
  + * int,long,float,double,boolean,ObjectName or InetAddress</li>
    * <li>Query Mbeans</li>
    * <li>Show Get, Call, Query result at Ant console log</li>
    * <li>Bind Get, Call, Query result at Ant properties</li>
    * </ul>
  - *
  - * Examples:
  - * open server with reference and autorisation 
  + * 
  + * Examples: open server with reference and autorisation
  + * 
    * <pre>
  - *   &lt;jmxOpen
  - *           host="127.0.0.1"
  - *           port="9014"
  - *           username="monitorRole"
  - *           password="mysecret"
  - *           ref="jmx.myserver" 
  - *       /&gt;
  + * 
  + *    &lt;jmxOpen
  + *            host=&quot;127.0.0.1&quot;
  + *            port=&quot;9014&quot;
  + *            username=&quot;monitorRole&quot;
  + *            password=&quot;mysecret&quot;
  + *            ref=&quot;jmx.myserver&quot; 
  + *        /&gt;
  + *  
    * </pre>
  + * 
    * All calls after opening with same refid reuse the connection.
    * <p>
  - * First call to a remote MBeanserver save the JMXConnection a referenz <em>jmx.server</em>
  + * First call to a remote MBeanserver save the JMXConnection a referenz
  + * <em>jmx.server</em>
    * </p>
  - * All JMXAccessorXXXTask support the attribute <em>if</em> and <em>unless</em>. With <em>if</em>
  - * the task is only execute when property exist and with <em>unless</em> when property not exists. 
  - * <br/>
  - * <b>NOTE</b>: These tasks require Ant 1.6 or later interface.
  - *
  + * All JMXAccessorXXXTask support the attribute <em>if</em> and
  + * <em>unless</em>. With <em>if</em> the task is only execute when property
  + * exist and with <em>unless</em> when property not exists. <br/><b>NOTE
  + * </b>: These tasks require Ant 1.6 or later interface.
  + * 
    * @author Peter Rossbach
    * @version $Revision$ $Date$
    * @since 5.5.10
  @@ -87,26 +90,40 @@
   
   public class JMXAccessorTask extends BaseRedirectorHelperTask {
   
  -
       // ----------------------------------------------------- Instance Variables
   
       public static String JMX_SERVICE_PREFIX = "service:jmx:rmi:///jndi/rmi://";
  +
       public static String JMX_SERVICE_SUFFIX = "/jmxrmi";
   
       private String name = null;
  +
       private String resultproperty;
  +
       private String url = null;
  +
       private String host = "localhost";
  +
       private String port = "8050";
  +
       private String password = null;
  +
       private String username = null;
  +
       private String ref = "jmx.server";
  +
       private boolean echo = false;
  +
       private boolean separatearrayresults = true;
  +
       private String delimiter;
  +
       private String unlessCondition;
  +
       private String ifCondition;
  -    
  +
  +    private Properties properties = new Properties();
  +
       // ----------------------------------------------------- Instance Info
   
       /**
  @@ -138,29 +155,32 @@
       public void setName(String objectName) {
           this.name = objectName;
       }
  -    
  +
       /**
        * @return Returns the resultproperty.
        */
       public String getResultproperty() {
           return resultproperty;
       }
  +
       /**
  -     * @param resultproperty The resultproperty to set.
  +     * @param resultproperty
  +     *            The resultproperty to set.
        */
       public void setResultproperty(String propertyName) {
           this.resultproperty = propertyName;
       }
  - 
  +
       /**
        * @return Returns the delimiter.
        */
       public String getDelimiter() {
           return delimiter;
       }
  -    
  +
       /**
  -     * @param delimiter The delimiter to set.
  +     * @param delimiter
  +     *            The delimiter to set.
        */
       public void setDelimiter(String separator) {
           this.delimiter = separator;
  @@ -172,28 +192,30 @@
       public boolean isEcho() {
           return echo;
       }
  -    
  +
       /**
  -     * @param echo The echo to set.
  +     * @param echo
  +     *            The echo to set.
        */
       public void setEcho(boolean echo) {
           this.echo = echo;
       }
  -    
  +
       /**
        * @return Returns the separatearrayresults.
        */
       public boolean isSeparatearrayresults() {
           return separatearrayresults;
       }
  -    
  +
       /**
  -     * @param separatearrayresults The separatearrayresults to set.
  +     * @param separatearrayresults
  +     *            The separatearrayresults to set.
        */
       public void setSeparatearrayresults(boolean separateArrayResults) {
           this.separatearrayresults = separateArrayResults;
  -    }   
  -    
  +    }
  +
       /**
        * The login password for the <code>Manager</code> application.
        */
  @@ -206,7 +228,6 @@
           this.password = password;
       }
   
  - 
       /**
        * The login username for the <code>JMX</code> MBeanServer.
        */
  @@ -222,7 +243,7 @@
       /**
        * The URL of the <code>JMX JSR 160</code> MBeanServer to be used.
        */
  -    
  +
       public String getUrl() {
           return (this.url);
       }
  @@ -234,7 +255,7 @@
       /**
        * The Host of the <code>JMX JSR 160</code> MBeanServer to be used.
        */
  -    
  +
       public String getHost() {
           return (this.host);
       }
  @@ -246,7 +267,7 @@
       /**
        * The Port of the <code>JMX JSR 160</code> MBeanServer to be used.
        */
  -    
  +
       public String getPort() {
           return (this.port);
       }
  @@ -254,52 +275,60 @@
       public void setPort(String port) {
           this.port = port;
       }
  - 
  +
       /**
        * @return Returns the useRef.
        */
       public boolean isUseRef() {
           return ref != null && !"".equals(ref);
       }
  -    
  +
       /**
        * @return Returns the ref.
        */
       public String getRef() {
           return ref;
       }
  +
       /**
  -     * @param ref The ref to set.
  +     * @param ref
  +     *            The ref to set.
        */
       public void setRef(String refId) {
           this.ref = refId;
       }
  - 
  -  
  +
       /**
        * @return Returns the ifCondition.
        */
       public String getIf() {
           return ifCondition;
       }
  +
       /**
  -     * Only execute if a property of the given name exists in the current project.
  -     * @param c property name
  +     * Only execute if a property of the given name exists in the current
  +     * project.
  +     * 
  +     * @param c
  +     *            property name
        */
       public void setIf(String c) {
           ifCondition = c;
       }
  -   /**
  +
  +    /**
        * @return Returns the unlessCondition.
        */
       public String getUnless() {
           return unlessCondition;
       }
  - 
  +
       /**
  -     * Only execute if a property of the given name does not
  -     * exist in the current project.
  -     * @param c property name
  +     * Only execute if a property of the given name does not exist in the
  +     * current project.
  +     * 
  +     * @param c
  +     *            property name
        */
       public void setUnless(String c) {
           unlessCondition = c;
  @@ -308,11 +337,12 @@
       // --------------------------------------------------------- Public Methods
   
       /**
  -     * Execute the specified command.  This logic only performs the common
  -     * attribute validation required by all subclasses; it does not perform
  -     * any functional logic directly.
  -     *
  -     * @exception BuildException if a validation error occurs
  +     * Execute the specified command. This logic only performs the common
  +     * attribute validation required by all subclasses; it does not perform any
  +     * functional logic directly.
  +     * 
  +     * @exception BuildException
  +     *                if a validation error occurs
        */
       public void execute() throws BuildException {
           if (testIfCondition() && testUnlessCondition()) {
  @@ -337,7 +367,7 @@
               }
           }
       }
  -      
  +
       /**
        * create a new JMX Connection with auth when username and password is set.
        */
  @@ -363,33 +393,33 @@
   
       }
   
  -
       /**
        * test the if condition
  +     * 
        * @return true if there is no if condition, or the named property exists
        */
       protected boolean testIfCondition() {
           if (ifCondition == null || "".equals(ifCondition)) {
               return true;
           }
  -        return getProject().getProperty(ifCondition) != null;
  +        return getProperty(ifCondition) != null;
       }
   
       /**
        * test the unless condition
  -     * @return true if there is no unless condition,
  -     *  or there is a named property but it doesn't exist
  +     * 
  +     * @return true if there is no unless condition, or there is a named
  +     *         property but it doesn't exist
        */
       protected boolean testUnlessCondition() {
           if (unlessCondition == null || "".equals(unlessCondition)) {
               return true;
           }
  -        return getProject().getProperty(unlessCondition) == null;
  +        return getProperty(unlessCondition) == null;
       }
   
       /**
  -     * Get Current Connection from <em>ref</em> parameter or create a new
  -     * one!
  +     * Get Current Connection from <em>ref</em> parameter or create a new one!
        * 
        * @return
        * @throws MalformedURLException
  @@ -400,15 +430,15 @@
               String password, String refId) throws MalformedURLException,
               IOException {
           MBeanServerConnection jmxServerConnection = null;
  -        boolean isRef = project !=  null && refId != null && refId.length() > 0 ;
  +        boolean isRef = project != null && refId != null && refId.length() > 0;
           if (isRef) {
               Object pref = project.getReference(refId);
               try {
                   jmxServerConnection = (MBeanServerConnection) pref;
               } catch (ClassCastException cce) {
  -                if(project != null ) {
  +                if (project != null) {
                       project.log("wrong object reference " + refId + " - "
  -                        + pref.getClass());
  +                            + pref.getClass());
                   }
                   return null;
               }
  @@ -426,7 +456,8 @@
       // ------------------------------------------------------ protected Methods
   
       /**
  -     * get JMXConnection 
  +     * get JMXConnection
  +     * 
        * @return
        * @throws MalformedURLException
        * @throws IOException
  @@ -436,16 +467,21 @@
   
           MBeanServerConnection jmxServerConnection = null;
           if (isUseRef()) {
  -            Object pref = getProject().getReference(getRef());
  -            try {
  -                jmxServerConnection = (MBeanServerConnection) pref;
  -            } catch (ClassCastException cce) {
  -                getProject().log(
  -                        "Wrong object reference " + getRef() + " - "
  -                                + pref.getClass());
  -                return null;
  +            Object pref = null ;
  +            if(getProject() != null) {
  +                pref = getProject().getReference(getRef());
  +                if (pref != null) {
  +                    try {
  +                        jmxServerConnection = (MBeanServerConnection) pref;
  +                    } catch (ClassCastException cce) {
  +                        getProject().log(
  +                            "Wrong object reference " + getRef() + " - "
  +                                    + pref.getClass());
  +                        return null;
  +                    }
  +                }
               }
  -           if (jmxServerConnection == null) {
  +            if (jmxServerConnection == null) {
                   jmxServerConnection = accessJMXConnection(getProject(),
                           getUrl(), getHost(), getPort(), getUsername(),
                           getPassword(), getRef());
  @@ -456,7 +492,6 @@
           }
           return jmxServerConnection;
       }
  -    
   
       /**
        * Execute the specified command, based on the configured properties. The
  @@ -466,92 +501,91 @@
        * @exception BuildException
        *                if an error occurs
        */
  -    protected String jmxExecute(MBeanServerConnection jmxServerConnection)
  +    public String jmxExecute(MBeanServerConnection jmxServerConnection)
               throws Exception {
   
           if ((jmxServerConnection == null)) {
  -                throw new BuildException("Must open a connection!");
  +            throw new BuildException("Must open a connection!");
           } else if (isEcho()) {
               handleOutput("JMX Connection ref=" + ref + " is open!");
           }
  -       return null;
  +        return null;
       }
   
       /**
  -     * Convert string to datatype
  -     * FIXME How we can transfer values from ant project reference store (ref)?
  +     * Convert string to datatype FIXME How we can transfer values from ant
  +     * project reference store (ref)?
  +     * 
        * @param value
        * @param type
        * @return
        */
  -    protected Object convertStringToType(String value, String valueType)
  -    {
  +    protected Object convertStringToType(String value, String valueType) {
           if ("java.lang.String".equals(valueType))
               return value;
  -        
  -        Object convertValue = value ;        
  -        if ("java.lang.Integer".equals(valueType)
  -                || "int".equals(valueType)) {
  +
  +        Object convertValue = value;
  +        if ("java.lang.Integer".equals(valueType) || "int".equals(valueType)) {
               try {
                   convertValue = new Integer(value);
               } catch (NumberFormatException ex) {
  -                if(isEcho())
  +                if (isEcho())
                       handleErrorOutput("Unable to convert to integer:" + value);
               }
  -        }else if ("java.lang.Long".equals(valueType)
  -                    || "long".equals(valueType)) {
  -                try {
  -                    convertValue = new Long(value);
  -                } catch (NumberFormatException ex) {
  -                    if(isEcho())
  -                        handleErrorOutput("Unable to convert to long:" + value);
  -                }
  +        } else if ("java.lang.Long".equals(valueType)
  +                || "long".equals(valueType)) {
  +            try {
  +                convertValue = new Long(value);
  +            } catch (NumberFormatException ex) {
  +                if (isEcho())
  +                    handleErrorOutput("Unable to convert to long:" + value);
  +            }
           } else if ("java.lang.Boolean".equals(valueType)
                   || "boolean".equals(valueType)) {
               convertValue = new Boolean(value);
  -        }else if ("java.lang.Float".equals(valueType)
  +        } else if ("java.lang.Float".equals(valueType)
                   || "float".equals(valueType)) {
               try {
                   convertValue = new Float(value);
               } catch (NumberFormatException ex) {
  -                if(isEcho())
  +                if (isEcho())
                       handleErrorOutput("Unable to convert to float:" + value);
               }
  -        }else if ("java.lang.Double".equals(valueType)
  +        } else if ("java.lang.Double".equals(valueType)
                   || "double".equals(valueType)) {
               try {
                   convertValue = new Double(value);
               } catch (NumberFormatException ex) {
  -                if(isEcho())
  +                if (isEcho())
                       handleErrorOutput("Unable to convert to double:" + value);
               }
  -        }else if ("javax.management.ObjectName".equals(valueType)
  +        } else if ("javax.management.ObjectName".equals(valueType)
                   || "name".equals(valueType)) {
               try {
                   convertValue = new ObjectName(value);
               } catch (MalformedObjectNameException e) {
  -                if(isEcho())
  -                    handleErrorOutput("Unable to convert to ObjectName:" + value);
  +                if (isEcho())
  +                    handleErrorOutput("Unable to convert to ObjectName:"
  +                            + value);
               }
           } else if ("java.net.InetAddress".equals(valueType)) {
               try {
                   convertValue = InetAddress.getByName(value);
               } catch (UnknownHostException exc) {
  -                if(isEcho())
  +                if (isEcho())
                       handleErrorOutput("Unable to resolve host name:" + value);
               }
           }
           return convertValue;
       }
   
  -
  -    
       /**
  -     * @param name context of result
  +     * @param name
  +     *            context of result
        * @param result
        */
  -    protected void echoResult(String name,Object result ) {
  -        if(isEcho()) {
  +    protected void echoResult(String name, Object result) {
  +        if (isEcho()) {
               if (result.getClass().isArray()) {
                   for (int i = 0; i < Array.getLength(result); i++) {
                       handleOutput(name + "." + i + "=" + Array.get(result, i));
  @@ -562,86 +596,91 @@
       }
   
       /**
  -     * create result as property with name from attribute resultproperty 
  +     * create result as property with name from attribute resultproperty
  +     * 
        * @param result
        * @see #createProperty(String, Object)
        */
       protected void createProperty(Object result) {
           if (resultproperty != null) {
  -           createProperty(resultproperty,result);
  +            createProperty(resultproperty, result);
           }
       }
  -    
  -   /**    
  -    * create result as property with name from property prefix  
  -    * When result is an array and isSeparateArrayResults is true,
  -    * resultproperty used as prefix (<code>resultproperty.0-array.length</code> 
  -    * and store the result array length at <code>resultproperty.length</code>.
  -    * Other option is that you delemit your result with a delimiter (java.util.StringTokenizer is used).
  -    * @param propertyPrefix
  -    * @param result
  -    */
  +
  +    /**
  +     * create result as property with name from property prefix When result is
  +     * an array and isSeparateArrayResults is true, resultproperty used as
  +     * prefix (<code>resultproperty.0-array.length</code> and store the
  +     * result array length at <code>resultproperty.length</code>. Other
  +     * option is that you delemit your result with a delimiter
  +     * (java.util.StringTokenizer is used).
  +     * 
  +     * @param propertyPrefix
  +     * @param result
  +     */
       protected void createProperty(String propertyPrefix, Object result) {
           if (propertyPrefix == null)
               propertyPrefix = "";
           if (result instanceof CompositeDataSupport) {
  -            CompositeDataSupport data = (CompositeDataSupport) result ;
  +            CompositeDataSupport data = (CompositeDataSupport) result;
               CompositeType compositeType = data.getCompositeType();
  -            Set keys = compositeType.keySet() ;
  +            Set keys = compositeType.keySet();
               for (Iterator iter = keys.iterator(); iter.hasNext();) {
  -                String key = (String) iter.next();  
  +                String key = (String) iter.next();
                   Object value = data.get(key);
                   OpenType type = compositeType.getType(key);
  -                if(type instanceof SimpleType ) {
  -                    setProperty(propertyPrefix + "." + key , value);                
  -                } else { 
  -                    createProperty(propertyPrefix + "." + key, value );
  +                if (type instanceof SimpleType) {
  +                    setProperty(propertyPrefix + "." + key, value);
  +                } else {
  +                    createProperty(propertyPrefix + "." + key, value);
                   }
  -            }                
  +            }
           } else if (result instanceof TabularDataSupport) {
  -            TabularDataSupport data = (TabularDataSupport) result ;
  +            TabularDataSupport data = (TabularDataSupport) result;
               for (Iterator iter = data.keySet().iterator(); iter.hasNext();) {
                   Object key = iter.next();
  -                for(Iterator iter1 = ((List)key).iterator(); iter1.hasNext();) {
  -                    Object key1= iter1.next();
  -                    CompositeData valuedata = data.get(new Object[] { key1 } );
  +                for (Iterator iter1 = ((List) key).iterator(); iter1.hasNext();) {
  +                    Object key1 = iter1.next();
  +                    CompositeData valuedata = data.get(new Object[] { key1 });
                       Object value = valuedata.get("value");
  -                    OpenType type = valuedata.getCompositeType().getType("value");
  -                    if(type instanceof SimpleType ) {
  -                        setProperty(propertyPrefix + "." + key1 , value);                
  -                    } else { 
  -                        createProperty(propertyPrefix + "." + key1, value );
  +                    OpenType type = valuedata.getCompositeType().getType(
  +                            "value");
  +                    if (type instanceof SimpleType) {
  +                        setProperty(propertyPrefix + "." + key1, value);
  +                    } else {
  +                        createProperty(propertyPrefix + "." + key1, value);
                       }
                   }
  -            }                            
  +            }
           } else if (result.getClass().isArray()) {
               if (isSeparatearrayresults()) {
  -                int size = 0 ;
  +                int size = 0;
                   for (int i = 0; i < Array.getLength(result); i++) {
  -                    if(setProperty(propertyPrefix + "." + size , Array.get(result, i))) {
  +                    if (setProperty(propertyPrefix + "." + size, Array.get(
  +                            result, i))) {
                           size++;
                       }
                   }
  -                if(size > 0) {
  -                    setProperty(propertyPrefix + ".Length",
  -                        Integer.toString(size));
  +                if (size > 0) {
  +                    setProperty(propertyPrefix + ".Length", Integer
  +                            .toString(size));
                   }
               }
           } else {
               String delim = getDelimiter();
               if (delim != null) {
  -                StringTokenizer tokenizer = new StringTokenizer(result.toString(),
  -                        delim);
  +                StringTokenizer tokenizer = new StringTokenizer(result
  +                        .toString(), delim);
                   int size = 0;
                   for (; tokenizer.hasMoreTokens();) {
                       String token = tokenizer.nextToken();
  -                    if(setProperty(propertyPrefix + "." + size, token)) {
  +                    if (setProperty(propertyPrefix + "." + size, token)) {
                           size++;
                       }
                   }
  -                if(size>0)
  -                    setProperty(propertyPrefix + ".Length",
  -                        Integer.toString(size));
  +                if (size > 0)
  +                    setProperty(propertyPrefix + ".Length", Integer
  +                            .toString(size));
               } else {
                   setProperty(propertyPrefix, result.toString());
               }
  @@ -649,19 +688,51 @@
       }
   
       /**
  +     * get all properties, when project is there got all project Properties
  +     * @return properties
  +     */
  +    public Map getProperties() {
  +        Project currentProject = getProject();
  +        if (currentProject != null) {
  +            return currentProject.getProperties();
  +        } else {
  +            return properties;
  +        }        
  +    }
  +    
  +    /**
  +     * get all Properties
  +     * @param property
  +     * @return
  +     */
  +    public String getProperty(String property) {
  +        Project currentProject = getProject();
  +        if (currentProject != null) {
  +            return currentProject.getProperty(property);
  +        } else {
  +            return properties.getProperty(property);
  +        }
  +    }
  +
  +    /**
        * @param propertyPrefix
        * @param value
        */
  -    protected boolean setProperty(String property, Object value) {
  -        if(property != null ) {
  -            if(value == null )
  -                 value="" ;
  +    public boolean setProperty(String property, Object value) {
  +        if (property != null) {
  +            if (value == null)
  +                value = "";
               if (isEcho()) {
                   handleOutput(property + "=" + value.toString());
               }
  -            getProject().setNewProperty(property,value.toString());
  -            return true ;
  +            Project currentProject = getProject();
  +            if (currentProject != null) {
  +                currentProject.setNewProperty(property, value.toString());
  +            } else {
  +                properties.setProperty(property, value.toString());
  +            }
  +            return true;
           }
  -        return false ;
  +        return false;
       }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org