You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by dk...@apache.org on 2013/10/18 21:30:39 UTC
svn commit: r1533600 - in
/aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl:
ProxyManagerActivator.java weaving/ProxyWeavingHook.java
Author: dkulp
Date: Fri Oct 18 19:30:39 2013
New Revision: 1533600
URL: http://svn.apache.org/r1533600
Log:
[ARIES-1126] Prevent an NPE in ProxyWeavingHook and allow a setting to bypass it completely
Modified:
aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/ProxyManagerActivator.java
aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/weaving/ProxyWeavingHook.java
Modified: aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/ProxyManagerActivator.java
URL: http://svn.apache.org/viewvc/aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/ProxyManagerActivator.java?rev=1533600&r1=1533599&r2=1533600&view=diff
==============================================================================
--- aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/ProxyManagerActivator.java (original)
+++ aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/ProxyManagerActivator.java Fri Oct 18 19:30:39 2013
@@ -18,8 +18,6 @@
*/
package org.apache.aries.proxy.impl;
-import java.util.Dictionary;
-import java.util.Hashtable;
import org.apache.aries.proxy.ProxyManager;
import org.osgi.framework.BundleActivator;
@@ -55,14 +53,7 @@ public class ProxyManagerActivator imple
//if ASM is available then we should also try weaving
Class<?> cls = Class.forName("org.apache.aries.proxy.impl.weaving.ProxyWeavingHook",
true, ProxyManagerActivator.class.getClassLoader());
- Dictionary<String,String> props = new Hashtable<String,String>();
- // SubsystemResource.java also uses this constant.
- // While it could be turned into a static final constant, note that this
- // is also a non-standard workaround in the absence of a solution in the spec.
- // See the associated OSGi spec bug.
- props.put("osgi.woven.packages", "org.apache.aries.proxy.weaving,org.apache.aries.proxy");
- context.registerService("org.osgi.framework.hooks.weaving.WeavingHook",
- cls.getConstructor(BundleContext.class).newInstance(context), props);
+ cls.getConstructor(BundleContext.class).newInstance(context);
} catch (Throwable t) {
//We don't care about this, we just won't have registered the hook
}
Modified: aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/weaving/ProxyWeavingHook.java
URL: http://svn.apache.org/viewvc/aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/weaving/ProxyWeavingHook.java?rev=1533600&r1=1533599&r2=1533600&view=diff
==============================================================================
--- aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/weaving/ProxyWeavingHook.java (original)
+++ aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/weaving/ProxyWeavingHook.java Fri Oct 18 19:30:39 2013
@@ -19,6 +19,8 @@
package org.apache.aries.proxy.impl.weaving;
import java.util.ArrayList;
+import java.util.Dictionary;
+import java.util.Hashtable;
import java.util.List;
import java.util.regex.Pattern;
@@ -33,6 +35,7 @@ import org.osgi.framework.BundleContext;
import org.osgi.framework.hooks.weaving.WeavingException;
import org.osgi.framework.hooks.weaving.WeavingHook;
import org.osgi.framework.hooks.weaving.WovenClass;
+import org.osgi.framework.wiring.BundleWiring;
import org.osgi.util.tracker.ServiceTracker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -60,20 +63,34 @@ public final class ProxyWeavingHook impl
private final ServiceTracker controllers;
public ProxyWeavingHook(BundleContext context) {
- enabled = parseMatchers(context != null ? context.getProperty(WEAVING_ENABLED_CLASSES) : null, WEAVING_ENABLED_CLASSES_DEFAULT);
+ String enabledProp = context != null ? context.getProperty(WEAVING_ENABLED_CLASSES) : null;
+ enabled = parseMatchers(enabledProp, WEAVING_ENABLED_CLASSES_DEFAULT);
disabled = parseMatchers(context != null ? context.getProperty(WEAVING_DISABLED_CLASSES) : null, WEAVING_DISABLED_CLASSES_DEFAULT);
controllers = new ServiceTracker(context, ProxyWeavingController.class.getName(), null);
controllers.open();
+
+ if (!"none".equals(enabledProp)) {
+ Dictionary<String,String> props = new Hashtable<String,String>();
+ // SubsystemResource.java also uses this constant.
+ // While it could be turned into a static final constant, note that this
+ // is also a non-standard workaround in the absence of a solution in the spec.
+ // See the associated OSGi spec bug.
+ props.put("osgi.woven.packages", "org.apache.aries.proxy.weaving,org.apache.aries.proxy");
+ context.registerService("org.osgi.framework.hooks.weaving.WeavingHook", this, props);
+ }
}
public final void weave(WovenClass wovenClass) {
+ BundleWiring bw = wovenClass.getBundleWiring();
- Bundle b = wovenClass.getBundleWiring().getBundle();
-
- if(b.getBundleId() == 0 ||
- b.getSymbolicName().startsWith("org.apache.aries.proxy") ||
- b.getSymbolicName().startsWith("org.apache.aries.util")) {
- return;
+ if (bw != null) {
+ Bundle b = bw.getBundle();
+
+ if(b.getBundleId() == 0 ||
+ b.getSymbolicName().startsWith("org.apache.aries.proxy") ||
+ b.getSymbolicName().startsWith("org.apache.aries.util")) {
+ return;
+ }
}
if (!isEnabled(wovenClass.getClassName()) || isDisabled(wovenClass.getClassName())) {