You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2009/07/29 08:54:51 UTC

svn commit: r798794 - in /geronimo/server/trunk/framework: configs/client-system/ configs/geronimo-boilerplate/src/main/assembly/ configs/j2ee-system/ configs/jsr88-deploymentfactory/ configs/online-deployer/ configs/shutdown/ modules/geronimo-kernel/ ...

Author: djencks
Date: Wed Jul 29 06:54:50 2009
New Revision: 798794

URL: http://svn.apache.org/viewvc?rev=798794&view=rev
Log:
GERONIMO-3003 Encrypt poassoreds and morked attributes in serialized gbeans and config.xml.  Modified from patch by Jack Cai, many thanks.

Modified:
    geronimo/server/trunk/framework/configs/client-system/pom.xml
    geronimo/server/trunk/framework/configs/geronimo-boilerplate/src/main/assembly/boilerplate.xml
    geronimo/server/trunk/framework/configs/j2ee-system/pom.xml
    geronimo/server/trunk/framework/configs/jsr88-deploymentfactory/pom.xml
    geronimo/server/trunk/framework/configs/online-deployer/pom.xml
    geronimo/server/trunk/framework/configs/shutdown/pom.xml
    geronimo/server/trunk/framework/modules/geronimo-kernel/pom.xml
    geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/DynamicGAttributeInfo.java
    geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/GAttributeInfo.java
    geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/GBeanData.java
    geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/GBeanInfoBuilder.java
    geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/annotation/AnnotationGBeanInfoBuilder.java
    geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/annotation/ParamAttribute.java
    geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/annotation/Persistent.java
    geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/runtime/GBeanAttribute.java
    geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/xstream/GBeanDataConverter.java
    geronimo/server/trunk/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/gbean/annotation/AnnotationGBeanInfoBuilderTest.java
    geronimo/server/trunk/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/gbean/runtime/GBeanAttributeTest.java
    geronimo/server/trunk/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/kernel/MockGBean.java
    geronimo/server/trunk/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/kernel/config/ConfigurationUtilTest.java

Modified: geronimo/server/trunk/framework/configs/client-system/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/configs/client-system/pom.xml?rev=798794&r1=798793&r2=798794&view=diff
==============================================================================
--- geronimo/server/trunk/framework/configs/client-system/pom.xml (original)
+++ geronimo/server/trunk/framework/configs/client-system/pom.xml Wed Jul 29 06:54:50 2009
@@ -138,6 +138,11 @@
                         </element>
                         <element>
                             <groupId>org.apache.geronimo.framework</groupId>
+                            <artifactId>geronimo-crypto</artifactId>
+                            <version>${version}</version>
+                        </element>
+                        <element>
+                            <groupId>org.apache.geronimo.framework</groupId>
                             <artifactId>geronimo-kernel</artifactId>
                             <version>${version}</version>
                         </element>

Modified: geronimo/server/trunk/framework/configs/geronimo-boilerplate/src/main/assembly/boilerplate.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/configs/geronimo-boilerplate/src/main/assembly/boilerplate.xml?rev=798794&r1=798793&r2=798794&view=diff
==============================================================================
--- geronimo/server/trunk/framework/configs/geronimo-boilerplate/src/main/assembly/boilerplate.xml (original)
+++ geronimo/server/trunk/framework/configs/geronimo-boilerplate/src/main/assembly/boilerplate.xml Wed Jul 29 06:54:50 2009
@@ -65,6 +65,7 @@
                 <include>org.apache.xbean:xbean-reflect</include>
                 <include>com.thoughtworks.xstream:xstream</include>
                 <include>org.apache.geronimo.framework:geronimo-cli</include>
+                <include>org.apache.geronimo.framework:geronimo-crypto</include>
                 <include>org.apache.geronimo.framework:geronimo-kernel</include>
                 <include>org.apache.geronimo.framework:geronimo-system</include>
                 <include>org.apache.geronimo.framework:geronimo-deploy-jsr88-bootstrapper</include>

Modified: geronimo/server/trunk/framework/configs/j2ee-system/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/configs/j2ee-system/pom.xml?rev=798794&r1=798793&r2=798794&view=diff
==============================================================================
--- geronimo/server/trunk/framework/configs/j2ee-system/pom.xml (original)
+++ geronimo/server/trunk/framework/configs/j2ee-system/pom.xml Wed Jul 29 06:54:50 2009
@@ -190,6 +190,11 @@
                         </element>
                         <element>
                             <groupId>org.apache.geronimo.framework</groupId>
+                            <artifactId>geronimo-crypto</artifactId>
+                            <version>${version}</version>
+                        </element>
+                        <element>
+                            <groupId>org.apache.geronimo.framework</groupId>
                             <artifactId>geronimo-kernel</artifactId>
                             <version>${version}</version>
                         </element>

Modified: geronimo/server/trunk/framework/configs/jsr88-deploymentfactory/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/configs/jsr88-deploymentfactory/pom.xml?rev=798794&r1=798793&r2=798794&view=diff
==============================================================================
--- geronimo/server/trunk/framework/configs/jsr88-deploymentfactory/pom.xml (original)
+++ geronimo/server/trunk/framework/configs/jsr88-deploymentfactory/pom.xml Wed Jul 29 06:54:50 2009
@@ -126,6 +126,11 @@
                     <classpath>
                         <element>
                             <groupId>org.apache.geronimo.framework</groupId>
+                            <artifactId>geronimo-crypto</artifactId>
+                            <version>${version}</version>
+                        </element>
+                        <element>
+                            <groupId>org.apache.geronimo.framework</groupId>
                             <artifactId>geronimo-kernel</artifactId>
                             <version>${version}</version>
                         </element>

Modified: geronimo/server/trunk/framework/configs/online-deployer/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/configs/online-deployer/pom.xml?rev=798794&r1=798793&r2=798794&view=diff
==============================================================================
--- geronimo/server/trunk/framework/configs/online-deployer/pom.xml (original)
+++ geronimo/server/trunk/framework/configs/online-deployer/pom.xml Wed Jul 29 06:54:50 2009
@@ -146,6 +146,11 @@
                         </element>
                         <element>
                             <groupId>org.apache.geronimo.framework</groupId>
+                            <artifactId>geronimo-crypto</artifactId>
+                            <version>${version}</version>
+                        </element>
+                        <element>
+                            <groupId>org.apache.geronimo.framework</groupId>
                             <artifactId>geronimo-kernel</artifactId>
                             <version>${version}</version>
                         </element>

Modified: geronimo/server/trunk/framework/configs/shutdown/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/configs/shutdown/pom.xml?rev=798794&r1=798793&r2=798794&view=diff
==============================================================================
--- geronimo/server/trunk/framework/configs/shutdown/pom.xml (original)
+++ geronimo/server/trunk/framework/configs/shutdown/pom.xml Wed Jul 29 06:54:50 2009
@@ -98,6 +98,11 @@
                     <classpath>
                         <element>
                             <groupId>org.apache.geronimo.framework</groupId>
+                            <artifactId>geronimo-crypto</artifactId>
+                            <version>${version}</version>
+                        </element>
+                        <element>
+                            <groupId>org.apache.geronimo.framework</groupId>
                             <artifactId>geronimo-kernel</artifactId>
                             <version>${version}</version>
                         </element>

Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/pom.xml?rev=798794&r1=798793&r2=798794&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/pom.xml (original)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/pom.xml Wed Jul 29 06:54:50 2009
@@ -67,6 +67,12 @@
             <version>${version}</version>
             <scope>test</scope>
         </dependency>
+
+        <dependency>
+            <groupId>org.apache.geronimo.framework</groupId>
+            <artifactId>geronimo-crypto</artifactId>
+            <version>${version}</version>
+        </dependency>
     </dependencies>
 
     <build>

Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/DynamicGAttributeInfo.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/DynamicGAttributeInfo.java?rev=798794&r1=798793&r2=798794&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/DynamicGAttributeInfo.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/DynamicGAttributeInfo.java Wed Jul 29 06:54:50 2009
@@ -17,12 +17,18 @@
 
 package org.apache.geronimo.gbean;
 
+import org.apache.geronimo.gbean.annotation.EncryptionSetting;
+
 /**
  * Describes an attibute of a GBean.
  * 
  * @version $Rev$ $Date$
  */
 public class DynamicGAttributeInfo extends GAttributeInfo {
+    public DynamicGAttributeInfo(String name, String type, boolean persistent, boolean manageable, EncryptionSetting encrypted, boolean readable, boolean writable) {
+        super(name, type, persistent, manageable, encrypted, readable, writable, null, null);
+    }
+    
     public DynamicGAttributeInfo(String name, String type, boolean persistent, boolean manageable, boolean readable, boolean writable) {
         super(name, type, persistent, manageable, readable, writable, null, null);
     }

Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/GAttributeInfo.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/GAttributeInfo.java?rev=798794&r1=798793&r2=798794&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/GAttributeInfo.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/GAttributeInfo.java Wed Jul 29 06:54:50 2009
@@ -17,11 +17,11 @@
 
 package org.apache.geronimo.gbean;
 
-import java.io.Serializable;
-import java.util.Arrays;
-
+import org.apache.geronimo.gbean.annotation.EncryptionSetting;
 import org.apache.geronimo.kernel.KernelRegistry;
 
+import java.io.Serializable;
+
 /**
  * Describes an attibute of a GBean.
  *
@@ -51,6 +51,11 @@
     private final boolean manageable;
 
     /**
+     * Does this attribute need to be encrypted when persisted?
+     */
+    private final EncryptionSetting encrypted;
+
+    /**
      * Is this attribute readable?
      */
     private final boolean readable;
@@ -77,11 +82,34 @@
     }
 
     public GAttributeInfo(String name, String type, boolean persistent, boolean manageable, boolean readable, boolean writable, String getterName, String setterName) {
+        this(name, type, persistent, manageable, EncryptionSetting.defaultEncryption(name, type), readable, writable, getterName,
+                setterName);
+    }
+
+    public GAttributeInfo(String name, String type, boolean persistent, boolean manageable, boolean encrypted, String getterName, String setterName) {
+        this(name, type, persistent, manageable, encrypted ? EncryptionSetting.ENCRYPTED : EncryptionSetting.PLAINTEXT, getterName != null, setterName != null, getterName,
+                setterName);
+    }
+
+    public GAttributeInfo(String name, String type, boolean persistent, boolean manageable, EncryptionSetting encrypted, String getterName, String setterName) {
+        this(name, type, persistent, manageable, encrypted, getterName != null, setterName != null, getterName,
+                setterName);
+    }
+
+    public GAttributeInfo(String name, String type, boolean persistent, boolean manageable, EncryptionSetting encrypted, boolean readable, boolean writable, String getterName, String setterName) {
+        if (encrypted == null) throw new NullPointerException("enctryption must be specified");
+        if (encrypted == EncryptionSetting.ENCRYPTED && !"java.lang.String".equals(type)) {
+            throw new IllegalArgumentException("Only attributes of String type can be encrypted.");
+        }
+        if (encrypted == EncryptionSetting.DEFAULT) {
+            encrypted = EncryptionSetting.defaultEncryption(name, type);
+        }
         this.name = name;
         this.type = type;
         this.persistent = persistent;
         //non persistent attributes cannot be manageable
         this.manageable = manageable & persistent;
+        this.encrypted = encrypted;
         this.readable = readable;
         this.writable = writable;
         this.getterName = getterName;
@@ -104,6 +132,14 @@
         return manageable;
     }
 
+    public boolean isEncrypted() {
+        return encrypted == EncryptionSetting.ENCRYPTED;
+    }
+
+    public EncryptionSetting getEncryptedSetting() {
+        return encrypted;
+    }
+
     public boolean isReadable() {
         return readable;
     }
@@ -122,44 +158,48 @@
 
     public String toString() {
         return "[GAttributeInfo: name=" + name +
-                 " type=" + type +
-                 " persistent=" + persistent +
-                 " manageable=" + manageable +
-                 " readable=" + readable +
-                 " writable=" + writable +
-                 " getterName=" + getterName +
-                 " setterName=" + setterName +
-                 "]";
+                " type=" + type +
+                " persistent=" + persistent +
+                " manageable=" + manageable +
+                " encrypted=" + encrypted +
+                " readable=" + readable +
+                " writable=" + writable +
+                " getterName=" + getterName +
+                " setterName=" + setterName +
+                "]";
     }
 
     public String toXML(AbstractName abstractName) {
         StringBuilder xml = new StringBuilder();
 
         xml.append("<gAttributeInfo ");
-        xml.append("name='" + name + "' ");
-        xml.append("type='" + type + "' ");
-        xml.append("persistent='" + persistent + "' ");
-        xml.append("manageable='" + manageable + "' ");
-        xml.append("readable='" + readable + "' ");
-        xml.append("writable='" + writable + "' ");
+        xml.append("name='").append(name).append("' ");
+        xml.append("type='").append(type).append("' ");
+        xml.append("persistent='").append(persistent).append("' ");
+        xml.append("manageable='").append(manageable).append("' ");
+        xml.append("encrypted='").append(encrypted).append("' ");
+        xml.append("readable='").append(readable).append("' ");
+        xml.append("writable='").append(writable).append("' ");
         xml.append(">");
 
-        xml.append("<getterName>" + getterName + "</getterName>");
-        xml.append("<setterName>" + setterName + "</setterName>");
+        xml.append("<getterName>").append(getterName).append("</getterName>");
+        xml.append("<setterName>").append(setterName).append("</setterName>");
 
         if (readable) {
             try {
                 Object value = KernelRegistry.getSingleKernel().getAttribute(abstractName, name);
                 if (value != null) {
                     if (value instanceof String[]) {
-                        for (String valueString : Arrays.asList((String[]) value))
-                            xml.append("<value>" + valueString + "</value>");
+                        for (String valueString : (String[])value) {
+                            xml.append("<value>").append(valueString).append("</value>");
+                        }
                     } else {
-                        xml.append("<value>" + value + "</value>");
+                        value = encrypted.encrypt((String) value);
+                        xml.append("<value>").append(value).append("</value>");
                     }
                 }
             } catch (Exception e) {
-
+                xml.append("<value>[could not be determined:").append(e.getMessage()).append("]</value>");
             }
         }
 

Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/GBeanData.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/GBeanData.java?rev=798794&r1=798793&r2=798794&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/GBeanData.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/GBeanData.java Wed Jul 29 06:54:50 2009
@@ -27,6 +27,8 @@
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.geronimo.gbean.annotation.EncryptionSetting;
+
 /**
  * @version $Rev$ $Date$
  */
@@ -131,8 +133,19 @@
     public Object getAttribute(String name) {
         return attributes.get(name);
     }
+    
+    private EncryptionSetting isEncrypted(String attrName) {
+        if (gbeanInfo != null) {
+            GAttributeInfo attr = gbeanInfo.getAttribute(attrName);
+            if (attr != null) {
+                return attr.getEncryptedSetting();
+            }
+        }
+        return EncryptionSetting.PLAINTEXT;
+    }
 
     public void setAttribute(String name, Object value) {
+        value = isEncrypted(name). decrypt(value);
         attributes.put(name, value);
     }
 
@@ -228,6 +241,7 @@
         for (Map.Entry<String, Object> entry : attributes.entrySet()) {
             String name = entry.getKey();
             Object value = entry.getValue();
+            value = isEncrypted(name).encrypt(value);
             try {
                 out.writeObject(name);
                 out.writeObject(value);
@@ -377,3 +391,4 @@
 
 }
 
+

Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/GBeanInfoBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/GBeanInfoBuilder.java?rev=798794&r1=798793&r2=798794&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/GBeanInfoBuilder.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/GBeanInfoBuilder.java Wed Jul 29 06:54:50 2009
@@ -120,11 +120,11 @@
 
     private final Class gbeanType;
 
-    private final Map attributes = new HashMap();
+    private final Map<String, GAttributeInfo> attributes = new HashMap<String, GAttributeInfo>();
 
     private GConstructorInfo constructor = new GConstructorInfo();
 
-    private final Map operations = new HashMap();
+    private final Map<GOperationSignature, GOperationInfo> operations = new HashMap<GOperationSignature, GOperationInfo>();
 
     private final Map references = new HashMap();
 
@@ -233,11 +233,12 @@
                     // magic attributes can't be persistent
                     continue;
                 }
-                attributes.put(attributeName,
+                attributes.put(attributeName,   
                         new GAttributeInfo(attributeName,
-                                attribute.getType(),
+                                attribute.getType(), 
                                 true,
                                 attribute.isManageable(),
+                                attribute.getEncryptedSetting(),
                                 attribute.getGetterName(),
                                 attribute.getSetterName()));
             } else {
@@ -264,6 +265,7 @@
                                 attribute.getType(),
                                 attribute.isPersistent(),
                                 true,
+                                attribute.getEncryptedSetting(),
                                 attribute.getGetterName(),
                                 attribute.getSetterName()));
             }
@@ -317,6 +319,7 @@
                                     attributeType,
                                     attribute.isPersistent() || persistentNames.contains(attributeName),
                                     attribute.isManageable() || manageableNames.contains(attributeName),
+                                    attribute.getEncryptedSetting(),
                                     method.getName(),
                                     attribute.getSetterName()));
                 }
@@ -341,6 +344,7 @@
                                     attributeType,
                                     attribute.isPersistent() || persistentNames.contains(attributeName),
                                     attribute.isManageable() || manageableNames.contains(attributeName),
+                                    attribute.getEncryptedSetting(),
                                     attribute.getGetterName(),
                                     method.getName()));
                 }
@@ -362,7 +366,6 @@
             addInterface(set, cls[i]);
         }
     }
-
     public void addAttribute(String name, Class type, boolean persistent) {
         addAttribute(name, type.getName(), persistent, true);
     }
@@ -381,6 +384,16 @@
         addAttribute(new GAttributeInfo(name, type, persistent, manageable, getter, setter));
     }
 
+    public void addAttribute(String name, Class type, boolean persistent, boolean manageable, boolean encrypted) {
+        addAttribute(name, type.getName(), persistent, manageable, encrypted);
+    }
+
+    public void addAttribute(String name, String type, boolean persistent, boolean manageable, boolean encrypted) {
+        String getter = searchForGetter(name, type, gbeanType);
+        String setter = searchForSetter(name, type, gbeanType);
+        addAttribute(new GAttributeInfo(name, type, persistent, manageable, encrypted, getter, setter));
+    }
+
     public void addAttribute(GAttributeInfo info) {
         attributes.put(info.getName(), info);
     }

Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/annotation/AnnotationGBeanInfoBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/annotation/AnnotationGBeanInfoBuilder.java?rev=798794&r1=798793&r2=798794&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/annotation/AnnotationGBeanInfoBuilder.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/annotation/AnnotationGBeanInfoBuilder.java Wed Jul 29 06:54:50 2009
@@ -114,7 +114,16 @@
                     String name = attribute.name();
                     boolean persistent = attribute.persistent();
                     boolean manageable = attribute.manageable();
-                    infoBuilder.addAttribute(name, parameterType, persistent, manageable);
+                    if (attribute.encrypted() == EncryptionSetting.ENCRYPTED) {
+                        infoBuilder.addAttribute(name, parameterType,
+                                persistent, manageable, true);
+                    } else if (attribute.encrypted() == EncryptionSetting.PLAINTEXT) {
+                        infoBuilder.addAttribute(name, parameterType,
+                                persistent, manageable, false);
+                    } else {
+                        infoBuilder.addAttribute(name, parameterType,
+                                persistent, manageable);
+                    }
                     cstrNames[index] = name;
                     annotationFound = true;
                     break;
@@ -168,7 +177,13 @@
             Class type = method.getParameterTypes()[0];
             String name = getName(method);
             name = Introspector.decapitalize(name);
-            infoBuilder.addAttribute(name, type, true, persistent.manageable());
+            if (persistent.encrypted() == EncryptionSetting.ENCRYPTED) {
+                infoBuilder.addAttribute(name, type, true, persistent.manageable(), true);
+            } else if (persistent.encrypted() == EncryptionSetting.PLAINTEXT) {
+                infoBuilder.addAttribute(name, type, true, persistent.manageable(), false);
+            } else {
+                infoBuilder.addAttribute(name, type, true, persistent.manageable());
+            }
         }
     }
     

Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/annotation/ParamAttribute.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/annotation/ParamAttribute.java?rev=798794&r1=798793&r2=798794&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/annotation/ParamAttribute.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/annotation/ParamAttribute.java Wed Jul 29 06:54:50 2009
@@ -39,4 +39,7 @@
     boolean persistent() default true;
     
     boolean manageable() default true;
+    
+    EncryptionSetting encrypted() default EncryptionSetting.DEFAULT;
+
 }

Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/annotation/Persistent.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/annotation/Persistent.java?rev=798794&r1=798793&r2=798794&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/annotation/Persistent.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/annotation/Persistent.java Wed Jul 29 06:54:50 2009
@@ -35,4 +35,5 @@
 @Target(value = {METHOD})
 public @interface Persistent {
     boolean manageable() default true;
+    EncryptionSetting encrypted() default EncryptionSetting.DEFAULT;
 }

Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/runtime/GBeanAttribute.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/runtime/GBeanAttribute.java?rev=798794&r1=798793&r2=798794&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/runtime/GBeanAttribute.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/runtime/GBeanAttribute.java Wed Jul 29 06:54:50 2009
@@ -17,14 +17,15 @@
 
 package org.apache.geronimo.gbean.runtime;
 
-import java.lang.reflect.Method;
-
 import org.apache.geronimo.gbean.DynamicGAttributeInfo;
 import org.apache.geronimo.gbean.DynamicGBean;
 import org.apache.geronimo.gbean.GAttributeInfo;
 import org.apache.geronimo.gbean.InvalidConfigurationException;
+import org.apache.geronimo.gbean.annotation.EncryptionSetting;
 import org.apache.geronimo.kernel.ClassLoading;
 
+import java.lang.reflect.Method;
+
 /**
  * @version $Rev$ $Date$
  */
@@ -47,6 +48,8 @@
 
     private final boolean manageable;
 
+    private final EncryptionSetting encrypted;
+
     private Object persistentValue;
     /**
      * Is this a special attribute like objectName, classLoader or gbeanContext?
@@ -113,6 +116,9 @@
         // not manageable
         this.manageable = false;
 
+        // special attributes are not encrypted
+        this.encrypted = EncryptionSetting.PLAINTEXT;
+
         // create an attribute info for this gbean
         if (attribute != null) {
             GAttributeInfo attributeInfo = attribute.getAttributeInfo();
@@ -120,6 +126,7 @@
                     this.type.getName(),
                     this.persistent,
                     this.manageable,
+                    this.encrypted,
                     this.readable,
                     this.writable,
                     attributeInfo.getGetterName(),
@@ -129,6 +136,7 @@
                     this.type.getName(),
                     this.persistent,
                     this.manageable,
+                    this.encrypted,
                     this.readable,
                     this.writable,
                     null,
@@ -148,7 +156,6 @@
         this.special = false;
         this.framework = true;
         this.dynamic = false;
-        this.persistentValue = persistentValue;
 
         if (gbeanInstance == null || name == null || type == null) {
             throw new IllegalArgumentException("null param(s) supplied");
@@ -181,6 +188,9 @@
                 this.writable,
                 null,
                 null);
+
+        this.encrypted = attributeInfo.getEncryptedSetting();
+        this.persistentValue = encrypted.decrypt(persistentValue);
     }
 
     public GBeanAttribute(GBeanInstance gbeanInstance, GAttributeInfo attributeInfo) throws InvalidConfigurationException {
@@ -200,6 +210,7 @@
         }
         this.persistent = attributeInfo.isPersistent();
         this.manageable = attributeInfo.isManageable();
+        this.encrypted = attributeInfo.getEncryptedSetting();
 
         readable = attributeInfo.isReadable();
         writable = attributeInfo.isWritable();
@@ -299,6 +310,14 @@
         return manageable;
     }
 
+    public boolean isEncrypted() {
+        return encrypted == EncryptionSetting.ENCRYPTED;
+    }
+
+    public EncryptionSetting getEncryptionSetting() {
+        return encrypted;
+    }
+
     public boolean isSpecial() {
         return special;
     }
@@ -320,7 +339,7 @@
         }
 
         // @todo actually check type
-        this.persistentValue = persistentValue;
+        this.persistentValue = encrypted.decrypt(persistentValue);
     }
 
     public Object getValue(Object target) throws Exception {
@@ -368,6 +387,7 @@
         }
 
         // call the setter
+        value = encrypted.decrypt(value);
         setInvoker.invoke(target, new Object[]{value});
     }
 
@@ -399,11 +419,11 @@
             return null;
         }
     }
-    
+
     public void inject(Object target) throws Exception {
         if ((persistent || special) && writable && null != persistentValue) {
             setValue(target, persistentValue);
         }
     }
-    
+
 }

Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/xstream/GBeanDataConverter.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/xstream/GBeanDataConverter.java?rev=798794&r1=798793&r2=798794&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/xstream/GBeanDataConverter.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/xstream/GBeanDataConverter.java Wed Jul 29 06:54:50 2009
@@ -16,17 +16,16 @@
  */
 package org.apache.geronimo.kernel.config.xstream;
 
-import java.util.Iterator;
+import java.net.URI;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
 import java.util.Map;
 import java.util.Set;
-import java.util.LinkedHashSet;
-import java.util.LinkedHashMap;
-import java.net.URI;
 
+import com.thoughtworks.xstream.converters.ConversionException;
 import com.thoughtworks.xstream.converters.Converter;
 import com.thoughtworks.xstream.converters.MarshallingContext;
 import com.thoughtworks.xstream.converters.UnmarshallingContext;
-import com.thoughtworks.xstream.converters.ConversionException;
 import com.thoughtworks.xstream.io.HierarchicalStreamReader;
 import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
 import com.thoughtworks.xstream.mapper.Mapper;
@@ -36,6 +35,7 @@
 import org.apache.geronimo.gbean.GBeanInfoFactory;
 import org.apache.geronimo.gbean.MultiGBeanInfoFactory;
 import org.apache.geronimo.gbean.ReferencePatterns;
+import org.apache.geronimo.gbean.annotation.EncryptionSetting;
 
 /**
  * @version $Rev$ $Date$
@@ -79,20 +79,19 @@
         }
 
         // dependencies Set<ReferencePatterns>
-        Set dependencies = gbeanData.getDependencies();
-        for (Iterator iterator = dependencies.iterator(); iterator.hasNext();) {
-            ReferencePatterns referencePatterns = (ReferencePatterns) iterator.next();
+        Set<ReferencePatterns> dependencies = gbeanData.getDependencies();
+        for (ReferencePatterns referencePatterns : dependencies) {
             writer.startNode("dependency");
             marshallingContext.convertAnother(referencePatterns);
             writer.endNode();
         }
 
         // attributes Map<String, Object>
-        Map attributes = gbeanData.getAttributes();
-        for (Iterator iterator = attributes.entrySet().iterator(); iterator.hasNext();) {
-            Map.Entry entry = (Map.Entry) iterator.next();
-            String attributeName = (String) entry.getKey();
-            Object attributeValue = entry.getValue();
+        Map<String, Object> attributes = gbeanData.getAttributes();
+        for (Map.Entry<String, Object> entry : attributes.entrySet()) {
+            String attributeName = entry.getKey();
+            EncryptionSetting encryptionSetting = gbeanInfo.getAttribute(attributeName).getEncryptedSetting();
+            Object attributeValue = encryptionSetting.encrypt(entry.getValue());
             if (attributeValue != null) {
                 writer.startNode("attribute");
                 writer.addAttribute("name", attributeName);
@@ -105,11 +104,10 @@
             }
         }
         // references Map<String, ReferencePatterns>
-        Map references = gbeanData.getReferences();
-        for (Iterator iterator = references.entrySet().iterator(); iterator.hasNext();) {
-            Map.Entry entry = (Map.Entry) iterator.next();
-            String referenceName = (String) entry.getKey();
-            ReferencePatterns referencePatterns = (ReferencePatterns) entry.getValue();
+        Map<String, ReferencePatterns> references = gbeanData.getReferences();
+        for (Map.Entry<String, ReferencePatterns> entry : references.entrySet()) {
+            String referenceName = entry.getKey();
+            ReferencePatterns referencePatterns = entry.getValue();
             writer.startNode("reference");
             writer.addAttribute("name", referenceName);
             marshallingContext.convertAnother(referencePatterns);
@@ -137,9 +135,9 @@
             gbeanInfo = infoFactory.getGBeanInfo(sourceClass, classLoader);
         }
 
-        Set dependencies = new LinkedHashSet();
-        Map attributes = new LinkedHashMap();
-        Map references = new LinkedHashMap();
+        Set<ReferencePatterns> dependencies = new LinkedHashSet<ReferencePatterns>();
+        Map<String, Object> attributes = new LinkedHashMap<String, Object>();
+        Map<String, ReferencePatterns> references = new LinkedHashMap<String, ReferencePatterns>();
         while (reader.hasMoreChildren()) {
             reader.moveDown();
 
@@ -184,16 +182,14 @@
 
         GBeanData gbeanData = new GBeanData(abstractName, gbeanInfo);
         gbeanData.setDependencies(dependencies);
-        for (Iterator iterator = attributes.entrySet().iterator(); iterator.hasNext();) {
-            Map.Entry entry = (Map.Entry) iterator.next();
-            String attributeName = (String) entry.getKey();
+        for (Map.Entry<String, Object> entry : attributes.entrySet()) {
+            String attributeName = entry.getKey();
             Object attributeValue = entry.getValue();
             gbeanData.setAttribute(attributeName, attributeValue);
         }
-        for (Iterator iterator = references.entrySet().iterator(); iterator.hasNext();) {
-            Map.Entry entry = (Map.Entry) iterator.next();
-            String referenceName = (String) entry.getKey();
-            ReferencePatterns referencePatterns = (ReferencePatterns) entry.getValue();
+        for (Map.Entry <String, ReferencePatterns> entry : references.entrySet()) {
+            String referenceName = entry.getKey();
+            ReferencePatterns referencePatterns = entry.getValue();
             gbeanData.setReferencePatterns(referenceName, referencePatterns);
         }
 

Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/gbean/annotation/AnnotationGBeanInfoBuilderTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/gbean/annotation/AnnotationGBeanInfoBuilderTest.java?rev=798794&r1=798793&r2=798794&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/gbean/annotation/AnnotationGBeanInfoBuilderTest.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/gbean/annotation/AnnotationGBeanInfoBuilderTest.java Wed Jul 29 06:54:50 2009
@@ -50,11 +50,14 @@
 
         GConstructorInfo constructor = beanInfo.getConstructor();
         List<String> cstrNames = constructor.getAttributeNames();
-        assertEquals(4, cstrNames.size());
+        assertEquals(5, cstrNames.size());
         assertEquals("classLoader", cstrNames.get(0));
         assertEquals("name", cstrNames.get(1));
         assertEquals("Name", cstrNames.get(2));
         assertEquals("Collection", cstrNames.get(3));
+        assertEquals("attr1", cstrNames.get(4));
+        assertTrue(beanInfo.getAttribute("attr1").isEncrypted());
+        
         
         GAttributeInfo nameAttribute = beanInfo.getAttribute("name");
         assertNotNull(nameAttribute);
@@ -74,12 +77,21 @@
         assertEquals(String.class.getName(), setterAttribute.getType());
         assertEquals(true, setterAttribute.isPersistent());
         assertEquals(true, setterAttribute.isManageable());
+        assertEquals(EncryptionSetting.ENCRYPTED, setterAttribute.getEncryptedSetting());
+        
+        GAttributeInfo password = beanInfo.getAttribute("password");
+        assertNotNull(password);
+        assertEquals(String.class.getName(), password.getType());
+        assertEquals(true, password.isPersistent());
+        assertEquals(true, password.isManageable());
+        assertEquals(EncryptionSetting.ENCRYPTED, password.getEncryptedSetting());
 
         GAttributeInfo setterNotManageableAttribute = beanInfo.getAttribute("setterNotManageableAttribute");
         assertNotNull(setterNotManageableAttribute);
         assertEquals(String.class.getName(), setterNotManageableAttribute.getType());
         assertEquals(true, setterNotManageableAttribute.isPersistent());
         assertEquals(false, setterNotManageableAttribute.isManageable());
+        assertEquals(EncryptionSetting.PLAINTEXT, setterNotManageableAttribute.getEncryptedSetting());
         
         GReferenceInfo setterReference = beanInfo.getReference("SetterReference");
         assertNotNull(setterReference);
@@ -165,10 +177,11 @@
         public SmokeGBean(@ParamSpecial(type = SpecialAttributeType.classLoader) ClassLoader classLoader,
             @ParamAttribute(name = "name") String name,
             @ParamReference(name = "Name") Runnable runnable,
-            @ParamReference(name = "Collection") Collection<Runnable> runnables) {
+            @ParamReference(name = "Collection") Collection<Runnable> runnables,
+            @ParamAttribute(name = "attr1", encrypted = EncryptionSetting.ENCRYPTED) String confidential) {
         }
         
-        @Persistent
+        @Persistent(encrypted=EncryptionSetting.ENCRYPTED)
         public void setSetterAttribute(String value) {
         }
         
@@ -176,6 +189,10 @@
         public void setSetterNotManageableAttribute(String value) {
         }
         
+        @Persistent
+        public void setPassword(String value) {
+        }
+                
         @Reference
         public void setSetterReference(Runnable value) {
         }

Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/gbean/runtime/GBeanAttributeTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/gbean/runtime/GBeanAttributeTest.java?rev=798794&r1=798793&r2=798794&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/gbean/runtime/GBeanAttributeTest.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/gbean/runtime/GBeanAttributeTest.java Wed Jul 29 06:54:50 2009
@@ -20,6 +20,7 @@
 import org.apache.geronimo.gbean.AbstractName;
 import org.apache.geronimo.gbean.GAttributeInfo;
 import org.apache.geronimo.gbean.GBeanData;
+import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.InvalidConfigurationException;
 import org.apache.geronimo.kernel.Kernel;
 import org.apache.geronimo.kernel.KernelFactory;
@@ -48,6 +49,15 @@
     private GAttributeInfo attributeInfo = null;
     private Kernel kernel;
 
+    public final void testGBeanAttributeEncryption() {
+        GBeanInfo ginfo = gbeanInstance.getGBeanInfo();
+        assertTrue(ginfo.getAttribute("value").isEncrypted());
+        assertTrue(ginfo.getAttribute("yourPassword").isEncrypted());
+        assertFalse(ginfo.getAttribute("myPassword").isEncrypted());
+        assertFalse(ginfo.getAttribute("nonStringPassword").isEncrypted());
+        assertFalse(ginfo.getAttribute("finalInt").isEncrypted());
+    }
+    
     public final void testGBeanAttributStringClassMethodInvokerMethodInvoker() {
         try {
             GBeanAttribute.createFrameworkAttribute(null, null, null, null);
@@ -62,18 +72,21 @@
         assertTrue(attribute.isReadable());
         assertFalse(attribute.isWritable());
         assertFalse(attribute.isPersistent());
+        assertFalse(attribute.isEncrypted());
         attribute = GBeanAttribute.createFrameworkAttribute(gbeanInstance, attributeName, String.class, null, setInvoker, false, null, false);
         assertEquals(String.class, attribute.getType());
         assertEquals(attributeName, attribute.getName());
         assertFalse(attribute.isReadable());
         assertTrue(attribute.isWritable());
         assertFalse(attribute.isPersistent());
+        assertFalse(attribute.isEncrypted());
         attribute = GBeanAttribute.createFrameworkAttribute(gbeanInstance, attributeName, String.class, getInvoker, setInvoker, false, null, false);
         assertEquals(String.class, attribute.getType());
         assertEquals(attributeName, attribute.getName());
         assertTrue(attribute.isReadable());
         assertTrue(attribute.isWritable());
         assertFalse(attribute.isPersistent());
+        assertFalse(attribute.isEncrypted());
     }
 
     public final void testGBeanAttributeInfoClass() {

Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/kernel/MockGBean.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/kernel/MockGBean.java?rev=798794&r1=798793&r2=798794&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/kernel/MockGBean.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/kernel/MockGBean.java Wed Jul 29 06:54:50 2009
@@ -67,7 +67,10 @@
         infoFactory.addAttribute("classLoader", ClassLoader.class, false);
         infoFactory.addAttribute("actualKernel", Kernel.class, false);
         infoFactory.addAttribute("kernel", Kernel.class, false);
-        infoFactory.addAttribute("value", String.class, true);
+        infoFactory.addAttribute("value", String.class, true, true, true);
+        infoFactory.addAttribute("myPassword", String.class, true, true, false);
+        infoFactory.addAttribute("yourPassword", String.class, true);
+        infoFactory.addAttribute("nonStringPassword", Object.class, true);
         infoFactory.addAttribute("finalInt", Integer.TYPE, true);
         infoFactory.addAttribute("mutableInt", Integer.TYPE, false);
         infoFactory.addAttribute("exceptionMutableInt", Integer.TYPE, true);

Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/kernel/config/ConfigurationUtilTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/kernel/config/ConfigurationUtilTest.java?rev=798794&r1=798793&r2=798794&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/kernel/config/ConfigurationUtilTest.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/kernel/config/ConfigurationUtilTest.java Wed Jul 29 06:54:50 2009
@@ -52,6 +52,12 @@
         configurationData = createConfigurationData(xstreamConfigurationMarshaler);
         ByteArrayOutputStream out = new ByteArrayOutputStream();
         xstreamConfigurationMarshaler.writeConfigurationData(configurationData, out);
+        // Test whether the attribute "value" is encrypted
+        assertFalse(out.toString().contains("1234"));
+        assertFalse(out.toString().contains("5678"));
+        // Test whether other attributes are not encrypted
+        assertTrue(out.toString().contains("Parent"));
+        assertTrue(out.toString().contains("child"));
         data = copy(configurationData, xstreamConfigurationMarshaler, xstreamConfigurationMarshaler);
         assertEquals(data, configurationData);