diff --git a/pax-cdi-samples/pax-cdi-sample6/src/main/java/org/ops4j/pax/cdi/sample6/MessageSource.java b/pax-cdi-samples/pax-cdi-sample6/src/main/java/org/ops4j/pax/cdi/sample6/MessageSource.java
new file mode 100644
index 00000000..b8e51109
--- /dev/null
+++ b/pax-cdi-samples/pax-cdi-sample6/src/main/java/org/ops4j/pax/cdi/sample6/MessageSource.java
@@ -0,0 +1,6 @@
+package org.ops4j.pax.cdi.sample6;
+
+
+public interface MessageSource extends MessageProducer {
+
+}
diff --git a/pax-cdi-samples/pax-cdi-sample6/src/main/java/org/ops4j/pax/cdi/sample6/impl/AlternativeMessageSourceImpl.java b/pax-cdi-samples/pax-cdi-sample6/src/main/java/org/ops4j/pax/cdi/sample6/impl/AlternativeMessageSourceImpl.java
new file mode 100644
index 00000000..a36542c6
--- /dev/null
+++ b/pax-cdi-samples/pax-cdi-sample6/src/main/java/org/ops4j/pax/cdi/sample6/impl/AlternativeMessageSourceImpl.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2015 Harald Wellmann.
+ *
+ * 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.ops4j.pax.cdi.sample6.impl;
+
+import javax.enterprise.inject.Alternative;
+
+import org.ops4j.pax.cdi.sample6.MessageSource;
+
+@Alternative
+public class AlternativeMessageSourceImpl implements MessageSource {
+
+ @Override
+ public String getMessage() {
+ return "Quod erat demonstrandum.";
+ }
+}
diff --git a/pax-cdi-samples/pax-cdi-sample6/src/main/java/org/ops4j/pax/cdi/sample6/impl/MessageProducerImpl.java b/pax-cdi-samples/pax-cdi-sample6/src/main/java/org/ops4j/pax/cdi/sample6/impl/MessageProducerImpl.java
index dd157f33..4fa0cf87 100644
--- a/pax-cdi-samples/pax-cdi-sample6/src/main/java/org/ops4j/pax/cdi/sample6/impl/MessageProducerImpl.java
+++ b/pax-cdi-samples/pax-cdi-sample6/src/main/java/org/ops4j/pax/cdi/sample6/impl/MessageProducerImpl.java
@@ -17,14 +17,20 @@
*/
package org.ops4j.pax.cdi.sample6.impl;
+import javax.inject.Inject;
+
import org.ops4j.pax.cdi.api.OsgiServiceProvider;
import org.ops4j.pax.cdi.sample6.MessageProducer;
+import org.ops4j.pax.cdi.sample6.MessageSource;
@OsgiServiceProvider
public class MessageProducerImpl implements MessageProducer {
+ @Inject
+ private MessageSource source;
+
@Override
public String getMessage() {
- return "Quod erat demonstrandum.";
+ return source.getMessage();
}
}
diff --git a/pax-cdi-samples/pax-cdi-sample6/src/main/java/org/ops4j/pax/cdi/sample6/impl/MessageSourceImpl.java b/pax-cdi-samples/pax-cdi-sample6/src/main/java/org/ops4j/pax/cdi/sample6/impl/MessageSourceImpl.java
new file mode 100644
index 00000000..7c8b8816
--- /dev/null
+++ b/pax-cdi-samples/pax-cdi-sample6/src/main/java/org/ops4j/pax/cdi/sample6/impl/MessageSourceImpl.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2015 Harald Wellmann.
+ *
+ * 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.ops4j.pax.cdi.sample6.impl;
+
+import org.ops4j.pax.cdi.sample6.MessageSource;
+
+
+public class MessageSourceImpl implements MessageSource {
+
+ @Override
+ public String getMessage() {
+ return "Tertium non datur.";
+ }
+}
diff --git a/pax-cdi-samples/pax-cdi-sample6/src/main/resources/META-INF/beans.xml b/pax-cdi-samples/pax-cdi-sample6/src/main/resources/META-INF/beans.xml
index e69de29b..53d88167 100644
--- a/pax-cdi-samples/pax-cdi-sample6/src/main/resources/META-INF/beans.xml
+++ b/pax-cdi-samples/pax-cdi-sample6/src/main/resources/META-INF/beans.xml
@@ -0,0 +1,7 @@
+
+
+
+ org.ops4j.pax.cdi.sample6.impl.AlternativeMessageSourceImpl
+
+
diff --git a/pax-cdi-spi/src/main/java/org/ops4j/pax/cdi/spi/scan/BeanBundleFilter.java b/pax-cdi-spi/src/main/java/org/ops4j/pax/cdi/spi/scan/BeanBundleFilter.java
index 22633b58..5dac22b3 100644
--- a/pax-cdi-spi/src/main/java/org/ops4j/pax/cdi/spi/scan/BeanBundleFilter.java
+++ b/pax-cdi-spi/src/main/java/org/ops4j/pax/cdi/spi/scan/BeanBundleFilter.java
@@ -18,8 +18,10 @@
package org.ops4j.pax.cdi.spi.scan;
import java.net.URL;
+import java.util.ArrayList;
import java.util.Dictionary;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import org.ops4j.pax.cdi.spi.BeanBundles;
@@ -45,8 +47,9 @@ public boolean accept(Bundle providerBundle, String className) {
return true;
case NONE:
return false;
+ default:
+ throw new IllegalArgumentException(descriptor.getBeanDiscoveryMode().toString());
}
- return false;
}
public BeanDescriptor findDescriptor(Bundle providerBundle) {
@@ -85,4 +88,12 @@ private boolean isWebBundle(Bundle bundle) {
String contextPath = headers.get("Web-ContextPath");
return (contextPath != null);
}
+
+ public List getBeanDescriptors() {
+ List urls = new ArrayList<>();
+ for (BeanDescriptor descriptor : descriptorMap.values()) {
+ urls.add(descriptor.getUrl());
+ }
+ return urls;
+ }
}
diff --git a/pax-cdi-spi/src/main/java/org/ops4j/pax/cdi/spi/scan/BeanScanner.java b/pax-cdi-spi/src/main/java/org/ops4j/pax/cdi/spi/scan/BeanScanner.java
index 2276b16b..f28676f8 100644
--- a/pax-cdi-spi/src/main/java/org/ops4j/pax/cdi/spi/scan/BeanScanner.java
+++ b/pax-cdi-spi/src/main/java/org/ops4j/pax/cdi/spi/scan/BeanScanner.java
@@ -94,8 +94,8 @@ public Set getBeanClasses() {
* @return unmodifiable set
*/
public Set getBeanDescriptors() {
- // FIXME
- return Collections.emptySet();
+ Set urls = new HashSet<>(filter.getBeanDescriptors());
+ return Collections.unmodifiableSet(urls);
}
/**