From e0e2102796e65715819995896ea3be9faa9454db Mon Sep 17 00:00:00 2001 From: "John D. Ament" Date: Tue, 2 Aug 2016 20:34:08 -0400 Subject: [PATCH] [CXF-6986] If no application classes found, install a default application. --- .../java/org/apache/cxf/cdi/CdiBusBean.java | 9 +- .../main/java/org/apache/cxf/cdi/CdiUtil.java | 42 +++++++++ .../apache/cxf/cdi/DefaultApplication.java | 26 +++++ .../cxf/cdi/DefaultApplicationBean.java | 94 +++++++++++++++++++ .../cxf/cdi/JAXRSCdiResourceExtension.java | 5 +- 5 files changed, 167 insertions(+), 9 deletions(-) create mode 100644 integration/cdi/src/main/java/org/apache/cxf/cdi/CdiUtil.java create mode 100644 integration/cdi/src/main/java/org/apache/cxf/cdi/DefaultApplication.java create mode 100644 integration/cdi/src/main/java/org/apache/cxf/cdi/DefaultApplicationBean.java diff --git a/integration/cdi/src/main/java/org/apache/cxf/cdi/CdiBusBean.java b/integration/cdi/src/main/java/org/apache/cxf/cdi/CdiBusBean.java index faf350fffff..1cf57cec909 100644 --- a/integration/cdi/src/main/java/org/apache/cxf/cdi/CdiBusBean.java +++ b/integration/cdi/src/main/java/org/apache/cxf/cdi/CdiBusBean.java @@ -26,12 +26,9 @@ import javax.enterprise.context.ApplicationScoped; import javax.enterprise.context.spi.CreationalContext; -import javax.enterprise.inject.Any; -import javax.enterprise.inject.Default; import javax.enterprise.inject.spi.Bean; import javax.enterprise.inject.spi.InjectionPoint; import javax.enterprise.inject.spi.InjectionTarget; -import javax.enterprise.util.AnnotationLiteral; import org.apache.cxf.Bus; import org.apache.cxf.bus.CXFBusFactory; @@ -61,13 +58,9 @@ public String getName() { return CXF; } - @SuppressWarnings("serial") @Override public Set< Annotation > getQualifiers() { - Set qualifiers = new HashSet(); - qualifiers.add(new AnnotationLiteral< Default >() { }); - qualifiers.add(new AnnotationLiteral< Any >() { }); - return qualifiers; + return CdiUtil.getQualifiers(); } @Override diff --git a/integration/cdi/src/main/java/org/apache/cxf/cdi/CdiUtil.java b/integration/cdi/src/main/java/org/apache/cxf/cdi/CdiUtil.java new file mode 100644 index 00000000000..4b8053b78a6 --- /dev/null +++ b/integration/cdi/src/main/java/org/apache/cxf/cdi/CdiUtil.java @@ -0,0 +1,42 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.cxf.cdi; + +import java.lang.annotation.Annotation; +import java.util.HashSet; +import java.util.Set; + +import javax.enterprise.inject.Any; +import javax.enterprise.inject.Default; +import javax.enterprise.util.AnnotationLiteral; + +public final class CdiUtil { + private CdiUtil() { + + } + + static Set getQualifiers() { + Set qualifiers = new HashSet<>(); + qualifiers.add(new AnnotationLiteral() { + }); + qualifiers.add(new AnnotationLiteral() { + }); + return qualifiers; + } +} diff --git a/integration/cdi/src/main/java/org/apache/cxf/cdi/DefaultApplication.java b/integration/cdi/src/main/java/org/apache/cxf/cdi/DefaultApplication.java new file mode 100644 index 00000000000..69a6077efd2 --- /dev/null +++ b/integration/cdi/src/main/java/org/apache/cxf/cdi/DefaultApplication.java @@ -0,0 +1,26 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.cxf.cdi; + +import javax.ws.rs.ApplicationPath; +import javax.ws.rs.core.Application; + +@ApplicationPath("/") +public class DefaultApplication extends Application { +} diff --git a/integration/cdi/src/main/java/org/apache/cxf/cdi/DefaultApplicationBean.java b/integration/cdi/src/main/java/org/apache/cxf/cdi/DefaultApplicationBean.java new file mode 100644 index 00000000000..1b66ce41a1c --- /dev/null +++ b/integration/cdi/src/main/java/org/apache/cxf/cdi/DefaultApplicationBean.java @@ -0,0 +1,94 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.cxf.cdi; + +import java.lang.annotation.Annotation; +import java.lang.reflect.Type; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +import javax.enterprise.context.ApplicationScoped; +import javax.enterprise.context.spi.CreationalContext; +import javax.enterprise.inject.spi.Bean; +import javax.enterprise.inject.spi.InjectionPoint; + +import org.apache.cxf.Bus; + +public class DefaultApplicationBean implements Bean { + private final DefaultApplication application = new DefaultApplication(); + @Override + public Class getBeanClass() { + return DefaultApplication.class; + } + + @Override + public Set getInjectionPoints() { + return Collections.emptySet(); + } + + @Override + public boolean isNullable() { + return false; + } + + @Override + public DefaultApplication create(CreationalContext creationalContext) { + return application; + } + + @Override + public void destroy(DefaultApplication defaultApplication, + CreationalContext creationalContext) { + + } + + @Override + public Set getTypes() { + final Set types = new HashSet<>(); + types.add(Bus.class); + types.add(Object.class); + return types; + } + + @Override + public Set getQualifiers() { + return CdiUtil.getQualifiers(); + } + + @Override + public Class getScope() { + return ApplicationScoped.class; + } + + @Override + public String getName() { + return DefaultApplication.class.getName(); + } + + @Override + public Set> getStereotypes() { + return Collections.emptySet(); + } + + @Override + public boolean isAlternative() { + return false; + } +} diff --git a/integration/cdi/src/main/java/org/apache/cxf/cdi/JAXRSCdiResourceExtension.java b/integration/cdi/src/main/java/org/apache/cxf/cdi/JAXRSCdiResourceExtension.java index ba69f158c38..6a2fad6bfe8 100644 --- a/integration/cdi/src/main/java/org/apache/cxf/cdi/JAXRSCdiResourceExtension.java +++ b/integration/cdi/src/main/java/org/apache/cxf/cdi/JAXRSCdiResourceExtension.java @@ -120,8 +120,11 @@ public void injectBus(@Observes final AfterBeanDiscovery event, final BeanManage busBean = new CdiBusBean(busInjectionTarget); event.addBean(busBean); } + if (applicationBeans.isEmpty()) { + event.addBean(new DefaultApplicationBean()); + } } - + /** * Create the JAXRSServerFactoryBean from the application and all discovered service and provider instances. * @param application application instance