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
+
+