diff --git a/ear/src/main/java/org/jboss/metadata/ear/jboss/JBossAppMetaData.java b/ear/src/main/java/org/jboss/metadata/ear/jboss/JBossAppMetaData.java index 9a1aa3a38..a095ddece 100644 --- a/ear/src/main/java/org/jboss/metadata/ear/jboss/JBossAppMetaData.java +++ b/ear/src/main/java/org/jboss/metadata/ear/jboss/JBossAppMetaData.java @@ -35,8 +35,14 @@ public class JBossAppMetaData extends EarMetaData { */ private boolean limitAppclientModules; + /** + * Creates a new JBossAppMetaData with the default EAR version. + *

+ * If you need a specific version, use {@link #JBossAppMetaData(EarVersion)} constructor instead. + *

+ */ public JBossAppMetaData() { - super(EarVersion.APP_10_0); + super(EarVersion.APP_11_0); } public JBossAppMetaData(EarVersion earVersion) { diff --git a/ear/src/main/java/org/jboss/metadata/ear/merge/JBossAppMetaDataMerger.java b/ear/src/main/java/org/jboss/metadata/ear/merge/JBossAppMetaDataMerger.java index c2882025f..803734232 100644 --- a/ear/src/main/java/org/jboss/metadata/ear/merge/JBossAppMetaDataMerger.java +++ b/ear/src/main/java/org/jboss/metadata/ear/merge/JBossAppMetaDataMerger.java @@ -28,7 +28,6 @@ public static void merge(final JBossAppMetaData dest, final JBossAppMetaData ove } else { dest.setEarEnvironmentRefsGroup(new EarEnvironmentRefsGroupMetaData()); } - if (original != null) { dest.setInitializeInOrder(original.getInitializeInOrder()); } @@ -56,10 +55,12 @@ public static void merge(final JBossAppMetaData dest, final JBossAppMetaData ove } if (override != null) { - if (override.getSecurityDomain() != null) + if (override.getSecurityDomain() != null) { dest.setSecurityDomain(override.getSecurityDomain()); - if (override.getUnauthenticatedPrincipal() != null) + } + if (override.getUnauthenticatedPrincipal() != null) { dest.setUnauthenticatedPrincipal(override.getUnauthenticatedPrincipal()); + } dest.setLimitAppclientModules(override.isLimitAppclientModules()); } @@ -69,20 +70,25 @@ public static void merge(final JBossAppMetaData dest, final JBossAppMetaData ove ModulesMetaData overrideModules = null; ModulesMetaData originalModules = null; - if (override != null) + if (override != null) { overrideModules = override.getModules(); - if (original != null) + } + if (original != null) { originalModules = original.getModules(); + } ModulesMetaDataMerger.merge(dest.getModules(), overrideModules, originalModules); SecurityRolesMetaData securityRolesMetaData = null; SecurityRolesMetaData overrideSecurityRolesMetaData = null; - if (original != null) + if (original != null) { securityRolesMetaData = original.getSecurityRoles(); - if (override != null) + } + if (override != null) { overrideSecurityRolesMetaData = override.getSecurityRoles(); - if (dest.getSecurityRoles() == null) + } + if (dest.getSecurityRoles() == null) { dest.setSecurityRoles(new SecurityRolesMetaData()); + } SecurityRolesMetaDataMerger.merge(dest.getSecurityRoles(), overrideSecurityRolesMetaData, securityRolesMetaData); } } diff --git a/ear/src/main/java/org/jboss/metadata/ear/parser/jboss/Version.java b/ear/src/main/java/org/jboss/metadata/ear/parser/jboss/Version.java index 5c4e38e50..f144e41af 100644 --- a/ear/src/main/java/org/jboss/metadata/ear/parser/jboss/Version.java +++ b/ear/src/main/java/org/jboss/metadata/ear/parser/jboss/Version.java @@ -18,7 +18,12 @@ public enum Version { APP_4_0("https://www.jboss.org/j2ee/dtd/jboss-app_4_0.dtd", "4.0"), APP_4_2("https://www.jboss.org/j2ee/dtd/jboss-app_4_2.dtd", "4.2"), APP_5_0("https://www.jboss.org/j2ee/dtd/jboss-app_5_0.dtd", "5.0"), - APP_7_0("https://www.jboss.org/j2ee/schema/jboss-app_7_1.xsd", "7.0"); + APP_7_0("https://www.jboss.org/j2ee/schema/jboss-app_7_1.xsd", "7.0"), + APP_8_0("https://www.jboss.org/j2ee/schema/jboss-app_8_0.xsd", "8.0"), + APP_9_0("https://www.jboss.org/j2ee/schema/jboss-app_9_0.xsd", "9.0"), + APP_10_0("https://www.jboss.org/j2ee/schema/jboss-app_10_0.xsd", "10.0"), + APP_11_0("https://www.jboss.org/j2ee/schema/jboss-app_11_0.xsd", "11.0"), + APP_11_0_1("https://www.jboss.org/j2ee/schema/jboss-app_11_0_1.xsd", "11.0.1"); private static final Map bindings = new HashMap(); diff --git a/ear/src/main/java/org/jboss/metadata/ear/parser/spec/EarMetaDataParser.java b/ear/src/main/java/org/jboss/metadata/ear/parser/spec/EarMetaDataParser.java index ba94fee91..86b6d8d7a 100644 --- a/ear/src/main/java/org/jboss/metadata/ear/parser/spec/EarMetaDataParser.java +++ b/ear/src/main/java/org/jboss/metadata/ear/parser/spec/EarMetaDataParser.java @@ -22,12 +22,15 @@ import org.jboss.metadata.parser.util.MetaDataElementParser; import org.jboss.metadata.property.PropertyReplacer; import org.jboss.metadata.property.PropertyReplacers; +import org.jboss.logging.Logger; /** * @author John Bailey */ public class EarMetaDataParser extends MetaDataElementParser { + private static final Logger logger = Logger.getLogger(EarMetaDataParser.class); + public static final EarMetaDataParser INSTANCE = new EarMetaDataParser(); public EarMetaData parse(final XMLStreamReader reader) throws XMLStreamException { @@ -65,20 +68,37 @@ public EarMetaData parse(final XMLStreamReader reader, final PropertyReplacer pr versionString = reader.getAttributeValue(i); } } - if ("1.4".equals(versionString)) { - version = EarVersion.APP_1_4; - } else if ("5".equals(versionString)) { - version = EarVersion.APP_5_0; - } else if ("6".equals(versionString)) { - version = EarVersion.APP_6_0; - } else if ("7".equals(versionString)) { - version = EarVersion.APP_7_0; - } else if ("8".equals(versionString)) { - version = EarVersion.APP_8_0; - } else if ("9".equals(versionString)) { - version = EarVersion.APP_9_0; - } else if ("10".equals(versionString)) { - version = EarVersion.APP_10_0; + // Parse version string if present + if (versionString != null) { + switch (versionString) { + case "1.4": + version = EarVersion.APP_1_4; + break; + case "5": + version = EarVersion.APP_5_0; + break; + case "6": + version = EarVersion.APP_6_0; + break; + case "7": + version = EarVersion.APP_7_0; + break; + case "8": + version = EarVersion.APP_8_0; + break; + case "9": + version = EarVersion.APP_9_0; + break; + case "10": + version = EarVersion.APP_10_0; + break; + case "11": + version = EarVersion.APP_11_0; + break; + default: + logger.warnf("Unsupported or unknown EAR version '%s' specified in descriptor. Defaulting to version 6.0", versionString); + break; + } } } diff --git a/ear/src/test/java/org/jboss/test/metadata/ear/Ear11xEverythingUnitTestCase.java b/ear/src/test/java/org/jboss/test/metadata/ear/Ear11xEverythingUnitTestCase.java index 859682c92..220f5f1df 100644 --- a/ear/src/test/java/org/jboss/test/metadata/ear/Ear11xEverythingUnitTestCase.java +++ b/ear/src/test/java/org/jboss/test/metadata/ear/Ear11xEverythingUnitTestCase.java @@ -17,7 +17,7 @@ import org.jboss.test.metadata.javaee.AbstractJavaEEEverythingTest; /** - * Ear10x tests. + * Ear11x tests. * * @author Brian Stansberry */ diff --git a/ear/src/test/java/org/jboss/test/metadata/ear/JBossApp10EverythingUnitTestCase.java b/ear/src/test/java/org/jboss/test/metadata/ear/JBossApp10EverythingUnitTestCase.java new file mode 100644 index 000000000..fdb30c4f2 --- /dev/null +++ b/ear/src/test/java/org/jboss/test/metadata/ear/JBossApp10EverythingUnitTestCase.java @@ -0,0 +1,167 @@ +/* + * Copyright The JBoss Metadata Authors + * SPDX-License-Identifier: Apache-2.0 + */ +package org.jboss.test.metadata.ear; + +import static junit.framework.TestCase.assertEquals; + +import org.jboss.metadata.ear.jboss.JBossAppMetaData; +import org.jboss.metadata.ear.jboss.ServiceModuleMetaData; +import org.jboss.metadata.ear.merge.JBossAppMetaDataMerger; +import org.jboss.metadata.ear.parser.jboss.JBossAppMetaDataParser; +import org.jboss.metadata.ear.parser.spec.EarMetaDataParser; +import org.jboss.metadata.ear.spec.ConnectorModuleMetaData; +import org.jboss.metadata.ear.spec.EarMetaData; +import org.jboss.metadata.ear.spec.EarVersion; +import org.jboss.metadata.ear.spec.EjbModuleMetaData; +import org.jboss.metadata.ear.spec.JavaModuleMetaData; +import org.jboss.metadata.ear.spec.ModuleMetaData; +import org.jboss.metadata.ear.spec.ModulesMetaData; +import org.jboss.metadata.ear.spec.WebModuleMetaData; +import org.jboss.metadata.javaee.spec.SecurityRoleMetaData; +import org.jboss.metadata.javaee.spec.SecurityRolesMetaData; +import org.jboss.test.metadata.javaee.AbstractJavaEEMetaDataTest; +import org.junit.Test; + +/** + * Test jboss-app.xml which uses jboss-app_11_0.xsd + */ +public class JBossApp10EverythingUnitTestCase extends AbstractJavaEEMetaDataTest { + + private boolean hasJBossAppOverride = false; + + protected JBossAppMetaData unmarshal() throws Exception { + return JBossAppMetaDataParser.INSTANCE.parse(getReader()); + } + + @Test + public void testOverride() throws Exception { + EarMetaData spec = EarMetaDataParser.INSTANCE.parse(getReader("Ear10xEverything_testEverything.xml")); + JBossAppMetaData jbossAppMD = new JBossAppMetaData(EarVersion.APP_10_0); + JBossAppMetaDataMerger.merge(jbossAppMD, null, spec); + assertEquals(EarVersion.APP_10_0, jbossAppMD.getEarVersion()); + hasJBossAppOverride = false; + assertEveryting(jbossAppMD); + } + + @Test + public void testEverything() + throws Exception { + //enableTrace("org.jboss.xb"); + EarMetaData spec = EarMetaDataParser.INSTANCE.parse(getReader("Ear10xEverything_testEverything.xml")); + JBossAppMetaData jbossAppXml = unmarshal(); + assertEquals("Unexpected distinct-name", "foo", jbossAppXml.getDistinctName()); + JBossAppMetaData jbossAppMD = new JBossAppMetaData(EarVersion.APP_10_0); + JBossAppMetaDataMerger.merge(jbossAppMD, jbossAppXml, spec); + hasJBossAppOverride = true; + assertEquals(EarVersion.APP_10_0, jbossAppMD.getEarVersion()); + assertEveryting(jbossAppMD); + assertEquals("jboss-app-id", jbossAppMD.getId()); + assertEveryting(jbossAppMD); + } + + protected void assertEveryting(JBossAppMetaData ear) throws Exception { + assertSecurityRoles(ear); + assertLibraryDirectory(ear); + assertModules(ear); + } + + protected void assertSecurityRoles(JBossAppMetaData ear) { + SecurityRolesMetaData roles = ear.getSecurityRoles(); + assertEquals("There are 2 roles " + roles, 2, roles.size()); + SecurityRoleMetaData role0 = roles.get("securityRoleRef1RoleLink"); + SecurityRoleMetaData role1 = roles.get("securityRoleRef2RoleLink"); + if (hasJBossAppOverride) { + assertEquals("security-role0", role0.getId()); + assertEquals("securityRoleRef1RoleLink", role0.getName()); + assertEquals("en-securityRole1-desc", role0.getDescriptions().value()[0].value()); + + assertEquals("security-role1", role1.getId()); + assertEquals("securityRoleRef2RoleLink", role1.getName()); + assertEquals("en-securityRole2-desc", role1.getDescriptions().value()[0].value()); + + assertTrue("1 principal in role0", role0.getPrincipals().size() == 1); + assertEquals("principal0", role0.getPrincipals().toArray()[0]); + assertEquals("principal1", role1.getPrincipals().toArray()[0]); + } else { + assertEquals("securityRole1-id", role0.getId()); + assertEquals("securityRoleRef1RoleLink", role0.getName()); + assertEquals("en-securityRole1-desc", role0.getDescriptions().value()[0].value()); + + assertEquals("securityRole2-id", role1.getId()); + assertEquals("securityRoleRef2RoleLink", role1.getName()); + assertEquals("en-securityRole2-desc", role1.getDescriptions().value()[0].value()); + } + } + + protected void assertLibraryDirectory(JBossAppMetaData ear) { + if (hasJBossAppOverride) { + assertEquals("jboss-app-lib0", ear.getLibraryDirectory()); + } else { + assertEquals("lib0", ear.getLibraryDirectory()); + } + } + + protected void assertModules(JBossAppMetaData ear) { + ModulesMetaData modules = ear.getModules(); + if (hasJBossAppOverride) { + assertEquals(9, modules.size()); + } else { + assertEquals(6, modules.size()); + } + ModuleMetaData connector = modules.get(0); + assertEquals("connector0", connector.getId()); + ConnectorModuleMetaData connectorMD = (ConnectorModuleMetaData) connector.getValue(); + assertEquals("rar0.rar", connectorMD.getConnector()); + ModuleMetaData java = modules.get(1); + assertEquals("java0", java.getId()); + JavaModuleMetaData javaMD = (JavaModuleMetaData) java.getValue(); + assertEquals("client0.jar", javaMD.getClientJar()); + ModuleMetaData ejb0 = modules.get(2); + assertEquals("ejb0", ejb0.getId()); + EjbModuleMetaData ejb0MD = (EjbModuleMetaData) ejb0.getValue(); + assertEquals("ejb-jar0.jar", ejb0MD.getEjbJar()); + ModuleMetaData ejb1 = modules.get(3); + assertEquals("ejb1", ejb1.getId()); + EjbModuleMetaData ejb1MD = (EjbModuleMetaData) ejb1.getValue(); + assertEquals("ejb-jar1.jar", ejb1MD.getEjbJar()); + ModuleMetaData web0 = modules.get(4); + assertEquals("web0", web0.getId()); + WebModuleMetaData web0MD = (WebModuleMetaData) web0.getValue(); + assertEquals("/web0", web0MD.getContextRoot()); + assertEquals("web-app0.war", web0MD.getWebURI()); + ModuleMetaData web1 = modules.get(5); + assertEquals("web1", web1.getId()); + WebModuleMetaData web1MD = (WebModuleMetaData) web1.getValue(); + if (hasJBossAppOverride) { + assertEquals("/web1-override", web1MD.getContextRoot()); + } else { + assertEquals("/web1", web1MD.getContextRoot()); + } + assertEquals("web-app1.war", web1MD.getWebURI()); + if (hasJBossAppOverride) { + // Validate the sar, web2, har added in jboss-app.xml + ModuleMetaData sar = modules.get(6); + assertEquals("sar0", sar.getId()); + ServiceModuleMetaData sarMD = (ServiceModuleMetaData) sar.getValue(); + assertEquals("sar0.sar", sarMD.getSar()); + ModuleMetaData web2 = modules.get(7); + assertEquals("web2", web2.getId()); + WebModuleMetaData web2MD = (WebModuleMetaData) web2.getValue(); + assertEquals("/web2", web2MD.getContextRoot()); + assertEquals("web-app2.war", web2MD.getWebURI()); + ModuleMetaData har = modules.get(8); + assertEquals("har0", har.getId()); + ServiceModuleMetaData harMD = (ServiceModuleMetaData) har.getValue(); + assertEquals("har0.har", harMD.getSar()); + } + // Validate lookup by module file name + ModuleMetaData mmd = modules.get("rar0.rar"); + assertEquals(connector, mmd); + mmd = modules.get("ejb-jar1.jar"); + assertEquals(ejb1, mmd); + mmd = modules.get("web-app0.war"); + assertEquals(web0, mmd); + } +} diff --git a/ear/src/test/java/org/jboss/test/metadata/ear/JBossApp110EverythingUnitTestCase.java b/ear/src/test/java/org/jboss/test/metadata/ear/JBossApp110EverythingUnitTestCase.java index 5520164b2..3a3d3be09 100644 --- a/ear/src/test/java/org/jboss/test/metadata/ear/JBossApp110EverythingUnitTestCase.java +++ b/ear/src/test/java/org/jboss/test/metadata/ear/JBossApp110EverythingUnitTestCase.java @@ -4,6 +4,8 @@ */ package org.jboss.test.metadata.ear; +import static junit.framework.TestCase.assertEquals; + import org.jboss.metadata.ear.jboss.JBossAppMetaData; import org.jboss.metadata.ear.jboss.ServiceModuleMetaData; import org.jboss.metadata.ear.merge.JBossAppMetaDataMerger; @@ -11,6 +13,7 @@ import org.jboss.metadata.ear.parser.spec.EarMetaDataParser; import org.jboss.metadata.ear.spec.ConnectorModuleMetaData; import org.jboss.metadata.ear.spec.EarMetaData; +import org.jboss.metadata.ear.spec.EarVersion; import org.jboss.metadata.ear.spec.EjbModuleMetaData; import org.jboss.metadata.ear.spec.JavaModuleMetaData; import org.jboss.metadata.ear.spec.ModuleMetaData; @@ -21,6 +24,9 @@ import org.jboss.test.metadata.javaee.AbstractJavaEEMetaDataTest; import org.junit.Test; +/** + * Test jboss-app.xml which uses jboss-app_11_0.xsd + */ public class JBossApp110EverythingUnitTestCase extends AbstractJavaEEMetaDataTest { private boolean hasJBossAppOverride = false; @@ -34,6 +40,7 @@ public void testOverride() throws Exception { EarMetaData spec = EarMetaDataParser.INSTANCE.parse(getReader("Ear11xEverything_testEverything.xml")); JBossAppMetaData jbossAppMD = new JBossAppMetaData(); JBossAppMetaDataMerger.merge(jbossAppMD, null, spec); + assertEquals(EarVersion.APP_11_0, jbossAppMD.getEarVersion()); hasJBossAppOverride = false; assertEveryting(jbossAppMD); } @@ -44,10 +51,12 @@ public void testEverything() //enableTrace("org.jboss.xb"); EarMetaData spec = EarMetaDataParser.INSTANCE.parse(getReader("Ear11xEverything_testEverything.xml")); JBossAppMetaData jbossAppXml = unmarshal(); + assertEquals(EarVersion.APP_11_0, jbossAppXml.getEarVersion()); assertEquals("Unexpected distinct-name", "foo", jbossAppXml.getDistinctName()); JBossAppMetaData jbossAppMD = new JBossAppMetaData(); JBossAppMetaDataMerger.merge(jbossAppMD, jbossAppXml, spec); hasJBossAppOverride = true; + assertEquals(EarVersion.APP_11_0, jbossAppMD.getEarVersion()); assertEveryting(jbossAppMD); assertEquals("jboss-app-id", jbossAppMD.getId()); assertEveryting(jbossAppMD); diff --git a/ear/src/test/java/org/jboss/test/metadata/ear/JBossApp11xEverythingUnitTestCase.java b/ear/src/test/java/org/jboss/test/metadata/ear/JBossApp11xEverythingUnitTestCase.java index b72e41efc..d86c549fe 100644 --- a/ear/src/test/java/org/jboss/test/metadata/ear/JBossApp11xEverythingUnitTestCase.java +++ b/ear/src/test/java/org/jboss/test/metadata/ear/JBossApp11xEverythingUnitTestCase.java @@ -11,6 +11,7 @@ import org.jboss.metadata.ear.parser.spec.EarMetaDataParser; import org.jboss.metadata.ear.spec.ConnectorModuleMetaData; import org.jboss.metadata.ear.spec.EarMetaData; +import org.jboss.metadata.ear.spec.EarVersion; import org.jboss.metadata.ear.spec.EjbModuleMetaData; import org.jboss.metadata.ear.spec.JavaModuleMetaData; import org.jboss.metadata.ear.spec.ModuleMetaData; @@ -23,8 +24,6 @@ /** * Test jboss-app.xml which uses jboss-app_11_0_1.xsd - * - * @author Jaikiran Pai */ public class JBossApp11xEverythingUnitTestCase extends AbstractJavaEEMetaDataTest { @@ -40,6 +39,7 @@ public void testOverride() throws Exception { JBossAppMetaData jbossAppMD = new JBossAppMetaData(); JBossAppMetaDataMerger.merge(jbossAppMD, null, spec); hasJBossAppOverride = false; + assertEquals(EarVersion.APP_11_0, jbossAppMD.getEarVersion()); assertEverything(jbossAppMD); } @@ -49,11 +49,13 @@ public void testEverything() //enableTrace("org.jboss.xb"); EarMetaData spec = EarMetaDataParser.INSTANCE.parse(getReader("Ear11xEverything_testEverything.xml")); JBossAppMetaData jbossAppXml = unmarshal(); + assertEquals(EarVersion.APP_11_0, jbossAppXml.getEarVersion()); assertEquals("Unexpected distinct-name", "foo", jbossAppXml.getDistinctName()); JBossAppMetaData jbossAppMD = new JBossAppMetaData(); JBossAppMetaDataMerger.merge(jbossAppMD, jbossAppXml, spec); hasJBossAppOverride = true; assertEverything(jbossAppMD); + assertEquals(EarVersion.APP_11_0, jbossAppMD.getEarVersion()); assertEquals("jboss-app-id", jbossAppMD.getId()); assertEverything(jbossAppMD); } diff --git a/ear/src/test/resources/org/jboss/test/metadata/ear/JBossApp10Everything_testEverything.xml b/ear/src/test/resources/org/jboss/test/metadata/ear/JBossApp10Everything_testEverything.xml new file mode 100644 index 000000000..52651f945 --- /dev/null +++ b/ear/src/test/resources/org/jboss/test/metadata/ear/JBossApp10Everything_testEverything.xml @@ -0,0 +1,47 @@ + + + + + + foo + jboss-app-lib0 + + + + sar0.sar + + + + + web-app1.war + /web1-override + + + + + + web-app2.war + /web2 + + + + har0.har + + + The 0 security role + securityRoleRef1RoleLink + principal0 + + + The 1 security role + securityRoleRef2RoleLink + principal1 + +