diff --git a/container-tests/src/test/java/test/org/jboss/forge/furnace/classpath/JAXBLookupTest.java b/container-tests/src/test/java/test/org/jboss/forge/furnace/classpath/JAXBLookupTest.java new file mode 100644 index 00000000..bd8b7a87 --- /dev/null +++ b/container-tests/src/test/java/test/org/jboss/forge/furnace/classpath/JAXBLookupTest.java @@ -0,0 +1,60 @@ +/* + * Copyright 2014 Red Hat, Inc. and/or its affiliates. + * + * Licensed under the Eclipse Public License version 1.0, available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package test.org.jboss.forge.furnace.classpath; + +import java.io.ByteArrayInputStream; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.annotation.XmlRootElement; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.forge.arquillian.archive.ForgeArchive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(Arquillian.class) +public class JAXBLookupTest +{ + @Deployment + public static ForgeArchive getDeployment() + { + ForgeArchive archive = ShrinkWrap.create(ForgeArchive.class) + .addClass(TestRoot.class) + .addAsLocalServices(JAXBLookupTest.class); + + return archive; + } + + @Test + public void testGetJDKProvidedJAXBImpl() throws Exception + { + try + { + getClass().getClassLoader().loadClass("com.sun.xml.internal.bind.v2.ContextFactory"); + } + catch (Exception e) + { + Assert.fail("Could not load required Factory class." + e.getMessage()); + } + } + + @Test + public void testJAXBLookup() throws Exception + { + Assert.assertNotNull(JAXBContext.newInstance(TestRoot.class).createUnmarshaller() + .unmarshal(new ByteArrayInputStream("".getBytes()))); + } + + @XmlRootElement + public static class TestRoot + { + + } +} diff --git a/container/src/main/java/org/jboss/forge/furnace/impl/modules/AddonModuleLoader.java b/container/src/main/java/org/jboss/forge/furnace/impl/modules/AddonModuleLoader.java index 5fe6212c..a597d110 100644 --- a/container/src/main/java/org/jboss/forge/furnace/impl/modules/AddonModuleLoader.java +++ b/container/src/main/java/org/jboss/forge/furnace/impl/modules/AddonModuleLoader.java @@ -26,6 +26,7 @@ import org.jboss.forge.furnace.impl.addons.AddonStateManager; import org.jboss.forge.furnace.impl.modules.providers.CORBAClasspathSpec; import org.jboss.forge.furnace.impl.modules.providers.FurnaceContainerSpec; +import org.jboss.forge.furnace.impl.modules.providers.JAXBJDKClasspathSpec; import org.jboss.forge.furnace.impl.modules.providers.SunJDKClasspathSpec; import org.jboss.forge.furnace.impl.modules.providers.SunMiscClasspathSpec; import org.jboss.forge.furnace.impl.modules.providers.SystemClasspathSpec; @@ -164,6 +165,7 @@ private ModuleSpec findAddonModule(ModuleIdentifier id) builder.addDependency(DependencySpec.createModuleDependencySpec(SystemClasspathSpec.ID)); builder.addDependency(DependencySpec.createModuleDependencySpec(XPathJDKClasspathSpec.ID)); + builder.addDependency(DependencySpec.createModuleDependencySpec(JAXBJDKClasspathSpec.ID)); builder.addDependency(DependencySpec.createModuleDependencySpec(CORBAClasspathSpec.ID)); builder.addDependency(DependencySpec.createModuleDependencySpec(SunMiscClasspathSpec.ID)); builder.addDependency(DependencySpec.createModuleDependencySpec(SunJDKClasspathSpec.ID)); diff --git a/container/src/main/java/org/jboss/forge/furnace/impl/modules/providers/JAXBJDKClasspathSpec.java b/container/src/main/java/org/jboss/forge/furnace/impl/modules/providers/JAXBJDKClasspathSpec.java new file mode 100644 index 00000000..1c0d8798 --- /dev/null +++ b/container/src/main/java/org/jboss/forge/furnace/impl/modules/providers/JAXBJDKClasspathSpec.java @@ -0,0 +1,44 @@ +/** + * Copyright 2014 Red Hat, Inc. and/or its affiliates. + * + * Licensed under the Eclipse Public License version 1.0, available at + * http://www.eclipse.org/legal/epl-v10.html + */ + +package org.jboss.forge.furnace.impl.modules.providers; + +import java.util.HashSet; +import java.util.Set; + +import org.jboss.forge.furnace.impl.modules.ModuleSpecProvider; +import org.jboss.modules.ModuleIdentifier; + +/** + * {@link ModuleSpecProvider} for the JAXB classes + * + * @author George Gastaldi + */ +public class JAXBJDKClasspathSpec extends AbstractModuleSpecProvider +{ + public static final ModuleIdentifier ID = ModuleIdentifier.create("sun.jdk.jaxb"); + + public static Set paths = new HashSet(); + + static + { + paths.add("com/sun/xml/internal/bind"); + paths.add("com/sun/xml/internal/bind/v2"); + } + + @Override + protected ModuleIdentifier getId() + { + return ID; + } + + @Override + protected Set getPaths() + { + return paths; + } +} diff --git a/container/src/main/resources/META-INF/services/org.jboss.forge.furnace.impl.modules.ModuleSpecProvider b/container/src/main/resources/META-INF/services/org.jboss.forge.furnace.impl.modules.ModuleSpecProvider index a8882e23..54e2a9bd 100644 --- a/container/src/main/resources/META-INF/services/org.jboss.forge.furnace.impl.modules.ModuleSpecProvider +++ b/container/src/main/resources/META-INF/services/org.jboss.forge.furnace.impl.modules.ModuleSpecProvider @@ -2,6 +2,7 @@ org.jboss.forge.furnace.impl.modules.providers.FurnaceContainerSpec org.jboss.forge.furnace.impl.modules.providers.SunMiscClasspathSpec org.jboss.forge.furnace.impl.modules.providers.SunJDKClasspathSpec org.jboss.forge.furnace.impl.modules.providers.SystemClasspathSpec +org.jboss.forge.furnace.impl.modules.providers.JAXBJDKClasspathSpec org.jboss.forge.furnace.impl.modules.providers.XPathJDKClasspathSpec org.jboss.forge.furnace.impl.modules.providers.XATransactionJDKClasspathSpec org.jboss.forge.furnace.impl.modules.providers.CORBAClasspathSpec \ No newline at end of file