Author: kelapure
Date: Tue Feb 14 21:10:15 2012
New Revision: 1244210
URL: http://svn.apache.org/viewvc?rev=1244210&view=rev
Log:
OWB-645 InjectionPoint is null when using @Produces. NullPointerException
caused by CDI container providing a null InjectionPoint into a producer method.
Added:
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/DataTransformer.java
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/MyContainer.java
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/PropertyEncryptor.java
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/PropertyHolder.java
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/PropertyHolderFactory.java
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/PropertyInjector.java
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/tests/DependentProducerMethodMultipleInjectionPointTest.java
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/resources/org/apache/webbeans/newtests/injection/
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/resources/org/apache/webbeans/newtests/injection/injectionpoint/
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/resources/org/apache/webbeans/newtests/injection/injectionpoint/tests/
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/resources/org/apache/webbeans/newtests/injection/injectionpoint/tests/PlaceHolder.properties
Modified:
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionPointBean.java
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/main/java/org/apache/webbeans/inject/OWBInjector.java
Modified:
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionPointBean.java
URL:
http://svn.apache.org/viewvc/openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionPointBean.java?rev=1244210&r1=1244209&r2=1244210&view=diff
==============================================================================
---
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionPointBean.java
(original)
+++
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionPointBean.java
Tue Feb 14 21:10:15 2012
@@ -18,25 +18,57 @@
*/
package org.apache.webbeans.component;
+import java.util.Stack;
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.InjectionPoint;
import org.apache.webbeans.annotation.DefaultLiteral;
import org.apache.webbeans.annotation.DependentScopeLiteral;
import org.apache.webbeans.config.WebBeansContext;
-
-import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.inject.spi.InjectionPoint;
-
+import org.apache.webbeans.logger.WebBeansLogger;
public class InjectionPointBean extends AbstractOwbBean<InjectionPoint>
{
- //X TODO refactor. public static variables are utterly ugly
- public static ThreadLocal<InjectionPoint> local = new
ThreadLocal<InjectionPoint>();
+
+ public static final WebBeansLogger logger =
WebBeansLogger.getLogger(InjectionPointBean.class);
+
+ private static ThreadLocal<Stack<InjectionPoint>> localThreadlocalStack =
new ThreadLocal<Stack<InjectionPoint>>();
+
+ public static Stack<InjectionPoint> getStackOfInjectionPoints()
+ {
+ Stack<InjectionPoint> stackIP = localThreadlocalStack.get();
+ if (null == stackIP)
+ {
+ stackIP = new Stack<InjectionPoint>();
+ }
+ return stackIP;
+ }
+
+ public static void setThreadLocal(InjectionPoint ip)
+ {
+
+ Stack<InjectionPoint> stackIP = getStackOfInjectionPoints();
+ stackIP.push(ip);
+ localThreadlocalStack.set(stackIP);
+ logger.debug("PUSHED IP on stack {0}", stackIP);
+
+ }
+
+ public static void unsetThreadLocal()
+ {
+ Stack<InjectionPoint> stackIP = getStackOfInjectionPoints();
+ InjectionPoint ip = stackIP.pop();
+ logger.debug("POPPED IP on stack {0}", ip);
+ }
/**
* Removes the ThreadLocal from the ThreadMap to prevent memory leaks.
*/
- public static void removeThreadLocal()
+ public static void removeThreadLocal()
{
- local.remove();
+
+ logger.debug("REMOVED ThreadLocal stack");
+ localThreadlocalStack.remove();
+
}
public InjectionPointBean(WebBeansContext webBeansContext)
@@ -50,24 +82,20 @@ public class InjectionPointBean extends
}
@Override
- protected InjectionPoint createInstance(CreationalContext<InjectionPoint>
creationalContext)
+ protected InjectionPoint createInstance(CreationalContext<InjectionPoint>
creationalContext)
{
- try
- {
- return local.get();
-
- }
- finally
- {
- local.set(null);
- local.remove();
- }
+
+ logger.debug("ENTRY createInstance {0}", creationalContext);
+ InjectionPoint ip = getStackOfInjectionPoints().peek();
+ logger.debug("RETURN {0}", ip);
+ return ip;
+
}
@Override
protected void destroyInstance(InjectionPoint instance,
CreationalContext<InjectionPoint> creationalContext)
{
- local.remove();
+ removeThreadLocal();
}
/* (non-Javadoc)
@@ -78,6 +106,5 @@ public class InjectionPointBean extends
{
return true;
}
-
-
-}
+
+}
\ No newline at end of file
Modified:
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
URL:
http://svn.apache.org/viewvc/openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java?rev=1244210&r1=1244209&r2=1244210&view=diff
==============================================================================
---
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
(original)
+++
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
Tue Feb 14 21:10:15 2012
@@ -391,12 +391,13 @@ public class ObserverMethodImpl<T> imple
{
if(!InjectionPoint.class.isAssignableFrom(ClassUtil.getClass(point.getType())))
{
- InjectionPointBean.local.set(point);
+ InjectionPointBean.setThreadLocal(point);
}
}
CreationalContext<Object> creational =
manager.createCreationalContext(injectedBean);
Object instance = manager.getInstance(injectedBean,
creational);
+ InjectionPointBean.unsetThreadLocal();
param = new ObserverParams();
param.isBean = true;
@@ -453,12 +454,13 @@ public class ObserverMethodImpl<T> imple
{
if(!InjectionPoint.class.isAssignableFrom(ClassUtil.getClass(point.getType())))
{
- InjectionPointBean.local.set(point);
+ InjectionPointBean.setThreadLocal(point);
}
}
CreationalContext<Object> creational =
manager.createCreationalContext(injectedBean);
Object instance = manager.getInstance(injectedBean,
creational);
+ InjectionPointBean.unsetThreadLocal();
param = new ObserverParams();
param.isBean = true;
Modified:
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java
URL:
http://svn.apache.org/viewvc/openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java?rev=1244210&r1=1244209&r2=1244210&view=diff
==============================================================================
---
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java
(original)
+++
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java
Tue Feb 14 21:10:15 2012
@@ -40,6 +40,7 @@ import org.apache.webbeans.container.Bea
import org.apache.webbeans.container.InjectionResolver;
import org.apache.webbeans.context.creational.CreationalContextImpl;
import org.apache.webbeans.context.creational.DependentCreationalContext;
+import org.apache.webbeans.logger.WebBeansLogger;
import org.apache.webbeans.util.ClassUtil;
import org.apache.webbeans.util.WebBeansUtil;
@@ -56,6 +57,8 @@ import org.apache.webbeans.util.WebBeans
*/
public abstract class AbstractInjectable implements Injectable
{
+ private final WebBeansLogger logger =
WebBeansLogger.getLogger(AbstractInjectable.class);
+
/** Owner bean of the injection point*/
protected OwbBean<?> injectionOwnerBean;
@@ -107,50 +110,57 @@ public abstract class AbstractInjectable
{
EventBean.local.set(injectionPoint);
}
-
- //Injection for dependent instance InjectionPoint fields
- boolean dependentProducer = false;
- if(WebBeansUtil.isDependent(injectedBean))
+
+ try
{
-
if(!InjectionPoint.class.isAssignableFrom(ClassUtil.getClass(injectionPoint.getType())))
- {
- InjectionPointBean.local.set(injectionPoint);
- }
-
- if(!injectionPoint.isTransient())
+ //Injection for dependent instance InjectionPoint fields
+ boolean dependentProducer = false;
+ if(WebBeansUtil.isDependent(injectedBean))
{
- if(injectedBean instanceof AbstractProducerBean)
+
if(!InjectionPoint.class.isAssignableFrom(ClassUtil.getClass(injectionPoint.getType())))
{
- if(injectionOwnerBean.isPassivationCapable())
+ InjectionPointBean.setThreadLocal(injectionPoint);
+ }
+
+ if(!injectionPoint.isTransient())
+ {
+ if(injectedBean instanceof AbstractProducerBean)
{
- dependentProducer = true;
+ if(injectionOwnerBean.isPassivationCapable())
+ {
+ dependentProducer = true;
+ }
}
}
- }
- }
-
- //Gets injectable reference for injected bean
- injected = beanManager.getInjectableReference(injectionPoint,
injectionOwnerCreationalContext);
+ }
- /*X TODO see spec issue CDI-140 */
- if(dependentProducer)
- {
- if(injected != null &&
!Serializable.class.isAssignableFrom(injected.getClass()))
+ //Gets injectable reference for injected bean
+ injected = beanManager.getInjectableReference(injectionPoint,
injectionOwnerCreationalContext);
+
+ /*X TODO see spec issue CDI-140 */
+ if(dependentProducer)
{
- throw new IllegalProductException("If a producer method or
field of scope @Dependent returns an serializable object for injection " +
- "into an injection point "+
injectionPoint +" that requires a passivation capable dependency");
+ if(injected != null &&
!Serializable.class.isAssignableFrom(injected.getClass()))
+ {
+ throw new IllegalProductException("If a producer method or
field of scope @Dependent returns an serializable object for injection " +
+ "into an injection point
"+ injectionPoint +" that requires a passivation capable dependency");
+ }
}
- }
-
- // add this dependent into bean dependent list
- if (!WebBeansUtil.isStaticInjection(injectionPoint) &&
WebBeansUtil.isDependent(injectedBean))
- {
- if(instanceUnderInjection.get() != null)
+
+ // add this dependent into bean dependent list
+ if (!WebBeansUtil.isStaticInjection(injectionPoint) &&
WebBeansUtil.isDependent(injectedBean))
{
- ((CreationalContextImpl<?>)
injectionOwnerCreationalContext).addDependent(instanceUnderInjection.get(),injectedBean,
injected);
+ if(instanceUnderInjection.get() != null)
+ {
+ ((CreationalContextImpl<?>)
injectionOwnerCreationalContext).addDependent(instanceUnderInjection.get(),injectedBean,
injected);
+ }
}
}
+
+ finally {
+ InjectionPointBean.unsetThreadLocal();
+ }
return injected;
}
Modified:
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/main/java/org/apache/webbeans/inject/OWBInjector.java
URL:
http://svn.apache.org/viewvc/openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/main/java/org/apache/webbeans/inject/OWBInjector.java?rev=1244210&r1=1244209&r2=1244210&view=diff
==============================================================================
---
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/main/java/org/apache/webbeans/inject/OWBInjector.java
(original)
+++
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/main/java/org/apache/webbeans/inject/OWBInjector.java
Tue Feb 14 21:10:15 2012
@@ -44,6 +44,7 @@ import org.apache.webbeans.container.Bea
import org.apache.webbeans.container.InjectionResolver;
import org.apache.webbeans.context.creational.CreationalContextImpl;
import org.apache.webbeans.exception.WebBeansException;
+import org.apache.webbeans.logger.WebBeansLogger;
import org.apache.webbeans.util.ClassUtil;
import org.apache.webbeans.util.WebBeansAnnotatedTypeUtil;
import org.apache.webbeans.util.WebBeansUtil;
@@ -60,6 +61,8 @@ public final class OWBInjector implement
//Serial id
private static final long serialVersionUID = 1L;
+ public static final WebBeansLogger logger =
WebBeansLogger.getLogger(OWBInjector.class);
+
/**Creational context to hold dependent instances*/
private CreationalContextImpl<?> ownerCreationalContext = null;
@@ -242,12 +245,13 @@ public final class OWBInjector implement
{
if(!InjectionPoint.class.isAssignableFrom(ClassUtil.getClass(injectionPoint.getType())))
{
- InjectionPointBean.local.set(injectionPoint);
+ InjectionPointBean.setThreadLocal(injectionPoint);
}
}
object = beanManager.getInjectableReference(injectionPoint,
ownerCreationalContext);
-
+ InjectionPointBean.unsetThreadLocal();
+
return object;
}
Added:
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/DataTransformer.java
URL:
http://svn.apache.org/viewvc/openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/DataTransformer.java?rev=1244210&view=auto
==============================================================================
---
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/DataTransformer.java
(added)
+++
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/DataTransformer.java
Tue Feb 14 21:10:15 2012
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2012 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.webbeans.newtests.injection.injectionpoint.beans;
+
+import java.util.Iterator;
+import java.util.List;
+
+public class DataTransformer {
+
+ public String concatStrings(List<String> stringList) {
+
+ StringBuilder stringBuilder = new StringBuilder();
+ if (stringList != null && !stringList.isEmpty()) {
+ String string;
+ for (Iterator iterator = stringList.iterator();
iterator.hasNext(); stringBuilder.append(string)) {
+ string = (String) iterator.next();
+ }
+
+ }
+ return stringBuilder.toString();
+
+ }
+}
Added:
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/MyContainer.java
URL:
http://svn.apache.org/viewvc/openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/MyContainer.java?rev=1244210&view=auto
==============================================================================
---
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/MyContainer.java
(added)
+++
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/MyContainer.java
Tue Feb 14 21:10:15 2012
@@ -0,0 +1,14 @@
+package org.apache.webbeans.newtests.injection.injectionpoint.beans;
+
+import javax.inject.Inject;
+
+public class MyContainer {
+
+ @Inject
+ @PropertyHolder
+ private String nestedProperty;
+
+ public String getNestedProperty() {
+ return nestedProperty;
+ }
+}
Added:
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/PropertyEncryptor.java
URL:
http://svn.apache.org/viewvc/openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/PropertyEncryptor.java?rev=1244210&view=auto
==============================================================================
---
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/PropertyEncryptor.java
(added)
+++
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/PropertyEncryptor.java
Tue Feb 14 21:10:15 2012
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2012 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.webbeans.newtests.injection.injectionpoint.beans;
+
+public class PropertyEncryptor {
+
+ public String decryptProperty(String decryptPropertyValue) {
+ return decryptPropertyValue;
+ }
+
+}
Added:
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/PropertyHolder.java
URL:
http://svn.apache.org/viewvc/openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/PropertyHolder.java?rev=1244210&view=auto
==============================================================================
---
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/PropertyHolder.java
(added)
+++
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/PropertyHolder.java
Tue Feb 14 21:10:15 2012
@@ -0,0 +1,20 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.apache.webbeans.newtests.injection.injectionpoint.beans;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import javax.enterprise.util.Nonbinding;
+import javax.inject.Qualifier;
+
+@Qualifier
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD,
ElementType.PARAMETER})
+public @interface PropertyHolder {
+
+ @Nonbinding public String value() default "";
+}
Added:
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/PropertyHolderFactory.java
URL:
http://svn.apache.org/viewvc/openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/PropertyHolderFactory.java?rev=1244210&view=auto
==============================================================================
---
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/PropertyHolderFactory.java
(added)
+++
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/PropertyHolderFactory.java
Tue Feb 14 21:10:15 2012
@@ -0,0 +1,157 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.apache.webbeans.newtests.injection.injectionpoint.beans;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+import javax.enterprise.inject.Produces;
+import javax.enterprise.inject.spi.InjectionPoint;
+import javax.inject.Inject;
+import org.apache.webbeans.config.PropertyLoader;
+import org.apache.webbeans.logger.WebBeansLogger;
+
+/**
+ * Factory class for PropertyHolder Annotation.
+ * Defines @Produces methods for PropertyHolder.
+ */
+public class PropertyHolderFactory {
+
+ private static final WebBeansLogger logger =
WebBeansLogger.getLogger(PropertyHolderFactory.class);
+
+ //Properties
+ private static final String PROPERTY_FILE =
+
"org/apache/webbeans/newtests/injection/injectionpoint/tests/PlaceHolder.properties";
+ private volatile static Properties placeHolderProperties;
+
+ //Inject classes PropertyHolderFactory depends upon.
+ @Inject
+ private DataTransformer dataTransformer;
+
+ @Inject
+ private PropertyEncryptor propertyEncryptor;
+
+ /**
+ * Defines retrieval of Properties from placeHolder.properties file in
class
+ * path.
+ *
+ * @return Properties
+ */
+ public synchronized static Properties getProperties() {
+
+ if (placeHolderProperties == null) {
+ placeHolderProperties =
PropertyLoader.getProperties(PROPERTY_FILE);
+ logger.info("loaded "+placeHolderProperties);
+ }
+ return placeHolderProperties;
+ }
+
+ /**
+ * Defines PropertyHolder value fetch, Producer method.
+ *
+ * @param injectionPoint
+ * @return String
+ */
+ @Produces
+ @PropertyHolder
+ public String getPlaceHolderValue(InjectionPoint injectionPoint) {
+
+ logger.info("getPlaceHolderValue {0}", injectionPoint);
+
+ //Get value attribute of the PlaceHolder Annotation
+ String keyName =
injectionPoint.getAnnotated().getAnnotation(PropertyHolder.class).value();
+
+ //If PlaceHolder value annotation is not specified, Use field name as
Key to Properties.
+ if (isBlank(keyName)) {
+ keyName = injectionPoint.getMember().getName();
+ }
+
+ //Consturct list for appending
+ List<String> stringList = new ArrayList<String>();
+
stringList.add(injectionPoint.getMember().getDeclaringClass().getName());
+ stringList.add(".");
+ stringList.add(keyName);
+
+ //Constuct KeyName string.
+ keyName = dataTransformer.concatStrings(stringList);
+ logger.info("Fetching value for key: " + keyName);
+
+ //Check System Property, if its not available check in Properties file.
+ String keyValue = System.getProperty(keyName);
+ if (isBlank(keyValue)) {
+ Properties properties = PropertyHolderFactory.getProperties();
+ keyValue = properties.getProperty(keyName);
+ }
+
+ //Check for Encrypted property value
+ keyValue = this.decryptProperty(keyValue);
+
+ logger.info("Produced property : Key->{" + keyName + "}, Value->{" +
keyValue + "}");
+
+
+ return keyValue;
+ }//End Method.
+
+ /**
+ * Checks if given property value is encrypted. If encrypted, returns the
+ * decrypted value.
+ *
+ * @param propertyValue
+ * @return String
+ */
+ private String decryptProperty(String propertyValue) {
+ logger.info("Checking if decrypting of value is needed for " +
propertyValue);
+
+ if (!isEmpty(propertyValue)
+ && propertyValue.matches("ENC(\\S+)")) {
+
+ String decryptPropertyValue = substringBetween(propertyValue,
"ENC(", ")");
+ propertyValue =
propertyEncryptor.decryptProperty(decryptPropertyValue);
+ }
+
+ return propertyValue;
+ }
+
+ public static boolean isBlank(String str) {
+ int strLen;
+ if (str == null || (strLen = str.length()) == 0) {
+ return true;
+ }
+ for (int i = 0; i < strLen; i++) {
+ if ((Character.isWhitespace(str.charAt(i)) == false)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public static boolean isEmpty(String str) {
+ return str == null || str.length() == 0;
+ }
+
+ /**
+ * Sets DataTransformer instance.
+ *
+ * @param dataTransformer
+ */
+ public void setDataTransformer(DataTransformer dataTransformer) {
+ this.dataTransformer = dataTransformer;
+ }
+ public static final int INDEX_NOT_FOUND = -1;
+
+ public static String substringBetween(String str, String open, String
close) {
+ if (str == null || open == null || close == null) {
+ return null;
+ }
+ int start = str.indexOf(open);
+ if (start != INDEX_NOT_FOUND) {
+ int end = str.indexOf(close, start + open.length());
+ if (end != INDEX_NOT_FOUND) {
+ return str.substring(start + open.length(), end);
+ }
+ }
+ return null;
+ }
+}
\ No newline at end of file
Added:
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/PropertyInjector.java
URL:
http://svn.apache.org/viewvc/openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/PropertyInjector.java?rev=1244210&view=auto
==============================================================================
---
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/PropertyInjector.java
(added)
+++
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/beans/PropertyInjector.java
Tue Feb 14 21:10:15 2012
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2012 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.webbeans.newtests.injection.injectionpoint.beans;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+@Named("org.apache.webbeans.newtests.injection.injectionpoint.beans.PropertyInjector")
+public class PropertyInjector {
+
+ @Inject
+ private DataTransformer dataTransformer;
+
+ @Inject
+ @PropertyHolder
+ private String anotherVarName;
+
+ @Inject
+ @PropertyHolder
+ private String ldapHost;
+
+ @Inject
+ private MyContainer nested;
+
+ public String getAnotherVarName() {
+ return anotherVarName;
+ }
+
+ public DataTransformer getDataTransformer() {
+ return dataTransformer;
+ }
+
+
+ public String getLdapHost() {
+ return ldapHost;
+ }
+
+
+ public MyContainer getNested() {
+ return nested;
+ }
+}
\ No newline at end of file
Added:
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/tests/DependentProducerMethodMultipleInjectionPointTest.java
URL:
http://svn.apache.org/viewvc/openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/tests/DependentProducerMethodMultipleInjectionPointTest.java?rev=1244210&view=auto
==============================================================================
---
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/tests/DependentProducerMethodMultipleInjectionPointTest.java
(added)
+++
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/injectionpoint/tests/DependentProducerMethodMultipleInjectionPointTest.java
Tue Feb 14 21:10:15 2012
@@ -0,0 +1,47 @@
+package org.apache.webbeans.newtests.injection.injectionpoint.tests;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.Bean;
+import junit.framework.Assert;
+import org.apache.webbeans.newtests.AbstractUnitTest;
+import org.apache.webbeans.newtests.injection.injectionpoint.beans.*;
+import org.junit.Test;
+
+public class DependentProducerMethodMultipleInjectionPointTest extends
AbstractUnitTest {
+
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testInjectionPointValidity() throws Exception {
+
+ Collection<String> beanXmls = new ArrayList<String>();
+ Collection<Class<?>> beanClasses = new ArrayList<Class<?>>();
+ beanClasses.add(DataTransformer.class);
+ beanClasses.add(PropertyEncryptor.class);
+ beanClasses.add(MyContainer.class);
+ beanClasses.add(PropertyHolder.class);
+ beanClasses.add(PropertyHolderFactory.class);
+ beanClasses.add(PropertyInjector.class);
+
+ startContainer(beanClasses, beanXmls);
+
+ Bean<PropertyInjector> bean = (Bean<PropertyInjector>)
getBeanManager().getBeans(PropertyInjector.class.getName()).iterator().next();
+ CreationalContext<PropertyInjector> cc =
getBeanManager().createCreationalContext(bean);
+ PropertyInjector propertyInjector = (PropertyInjector)
getBeanManager().getReference(bean, PropertyInjector.class, cc);
+
+ Assert.assertNotNull(propertyInjector.getDataTransformer());
+
+ Assert.assertNotNull(propertyInjector.getAnotherVarName());
+
Assert.assertTrue(propertyInjector.getAnotherVarName().equals("Injection is
working...Finally"));
+
+ Assert.assertNotNull(propertyInjector.getLdapHost());
+ Assert.assertTrue(propertyInjector.getLdapHost().equals("Rohit
Kelapure LDAP Host"));
+
+ Assert.assertNotNull(propertyInjector.getNested().getNestedProperty());
+
Assert.assertTrue(propertyInjector.getNested().getNestedProperty().trim().equals("Rohit
Kelapure Nested Property"));
+
+ shutDownContainer();
+
+ }
+}
Added:
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/resources/org/apache/webbeans/newtests/injection/injectionpoint/tests/PlaceHolder.properties
URL:
http://svn.apache.org/viewvc/openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/resources/org/apache/webbeans/newtests/injection/injectionpoint/tests/PlaceHolder.properties?rev=1244210&view=auto
==============================================================================
---
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/resources/org/apache/webbeans/newtests/injection/injectionpoint/tests/PlaceHolder.properties
(added)
+++
openwebbeans/tags/openwebbeans-1.1.2/webbeans-impl/src/test/resources/org/apache/webbeans/newtests/injection/injectionpoint/tests/PlaceHolder.properties
Tue Feb 14 21:10:15 2012
@@ -0,0 +1,17 @@
+# Copyright 2012 The Apache Software Foundation.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+org.apache.webbeans.newtests.injection.injectionpoint.beans.PropertyInjector.anotherVarName
= Injection is working...Finally
+org.apache.webbeans.newtests.injection.injectionpoint.beans.PropertyInjector.ldapHost
= Rohit Kelapure LDAP Host
+org.apache.webbeans.newtests.injection.injectionpoint.beans.MyContainer.nestedProperty
= Rohit Kelapure Nested Property