Collection<Class<?>> classes = new ArrayList<Class<?>>();
EjbJar3xMetaData ejbJarMetaData = unmarshal("ejb-jar.xml", EjbJar3xMetaData.class, null);
JBoss50Creator creator = new JBoss50Creator(ejbJarMetaData, this.getClass().getClassLoader(), finder);
JBoss50MetaData annotations = creator.create(classes);
JBoss50MetaData specMetaData = new JBoss50MetaData();
specMetaData.merge(null, ejbJarMetaData);
JBoss50MetaData metaData = new JBoss50MetaData();
metaData.merge(specMetaData, annotations);
assertTrue(metaData.isEJB3x());
assertEquals("3.0", metaData.getVersion());
assertNotNull("no beans defined", metaData.getEnterpriseBeans());
assertNotNull("no assembly descriptor defined", metaData.getAssemblyDescriptor());
assertNotNull("no container transactions", metaData.getAssemblyDescriptor().getContainerTransactions());
// There is a bug in IdMetaDataImpl.hashCode which isn't unique when id is not set.
//for(ContainerTransactionMetaData transaction : metaData.getAssemblyDescriptor().getContainerTransactions())
//{
// System.out.println(transaction);
//}
assertEquals(6, metaData.getEnterpriseBeans().size());
assertMyStatefulBean(metaData.getEnterpriseBean("AnotherName")); // MyStatefulBean
assertMyStateless21Bean(metaData.getEnterpriseBean("MyStateless21Bean"));
assertMyStatelessBean(metaData.getEnterpriseBean("MyStatelessBean"));
assertMyMDB(metaData.getEnterpriseBean("MailMDB"));
JBossAssemblyDescriptorMetaData assembly = metaData.getAssemblyDescriptor();
// @DeclareRoles
SecurityRolesMetaData securityRoles = assembly.getSecurityRoles();
assertNotNull(securityRoles);
assertEquals(2, securityRoles.size());
SecurityRoleMetaData role1 = securityRoles.get("Role1");
assertNotNull(role1);
assertEquals("Role1", role1.getRoleName());
SecurityRoleMetaData role2 = securityRoles.get("Role2");
assertNotNull(role2);
assertEquals("Role2", role2.getRoleName());
// @DenyAll
// cls.getDeclaredMethods is un-ordered, so we must use bestMatch
ExcludeListMetaData excludes = assembly.getExcludeList();
assertNotNull(excludes);
MethodsMetaData excludedMethods = excludes.getMethods();
assertEquals(2, excludedMethods.size());
MethodMetaData m0 = excludedMethods.bestMatch("denyAll", (Class[]) null, null, null);
assertEquals("MyStatelessBean", m0.getEjbName());
assertEquals("denyAll", m0.getMethodName());
MethodParametersMetaData noargs = new MethodParametersMetaData();
assertEquals(noargs, m0.getMethodParams());
MethodMetaData m1 = excludedMethods.bestMatch("excluded", (Class[]) null, null, null);;
assertEquals("MyStatelessBean", m1.getEjbName());
assertEquals("excluded", m1.getMethodName());
assertEquals(noargs, m1.getMethodParams());
// @PermitAll, @RolesAllowed({"AccessRole1", "AccessRole2"})
MethodPermissionsMetaData allPerms = assembly.getMethodPermissions();
assertEquals(8, allPerms.size());
MethodPermissionsMetaData perms = assembly.getMethodPermissionsByEjbName("MyStatelessBean");
assertEquals(2, perms.size());
MethodPermissionMetaData permitAll = null;
MethodPermissionMetaData rolesAllowed = null;
for(MethodPermissionMetaData mp : perms)
{
if(mp.matches("permitAll", null, null))
permitAll = mp;
if(mp.matches("rolesAllowed", null, null))
rolesAllowed = mp;
}
assertNotNull(permitAll);
assertTrue(permitAll.isNotChecked());
assertTrue(permitAll.isNotChecked("permitAll", null, null));
assertNotNull(rolesAllowed);
HashSet<String> roles = new HashSet<String>();
roles.add("AccessRole1");
roles.add("AccessRole2");
assertEquals(roles, rolesAllowed.getRoles());
// Validate the MyStateless @Interceptors
InterceptorBindingsMetaData interceptorBindings = assembly.getInterceptorBindings();
assertEquals(2, interceptorBindings.size());
InterceptorBindingMetaData ib0 = interceptorBindings.get(0);
InterceptorBindingMetaData ib1 = interceptorBindings.get(1);
assertEquals("MyStatelessBean", ib0.getEjbName());
NamedMethodMetaData ib0Method = ib0.getMethod();
if(ib0Method == null)
{
// The class level @Interceptors
assertFalse(ib0.isExcludeClassInterceptors());
assertTrue(ib0.isExcludeDefaultInterceptors());
assertEquals(TestClassInterceptor.class.getName(),
ib0.getInterceptorClasses().iterator().next());
}
else
{
// The method level @Interceptors
assertTrue(ib0.isExcludeClassInterceptors());
assertTrue(ib0.isExcludeDefaultInterceptors());
assertEquals(TestMethodInterceptor.class.getName(),
ib0.getInterceptorClasses().iterator().next());
assertEquals("intercept2", ib0Method.getMethodName());
}
assertEquals("MyStatelessBean", ib1.getEjbName());
NamedMethodMetaData ib1Method = ib1.getMethod();
if(ib1Method == null)
{
// The class level @Interceptors
assertFalse(ib1.isExcludeClassInterceptors());
assertTrue(ib1.isExcludeDefaultInterceptors());
assertEquals(TestClassInterceptor.class.getName(),
ib1.getInterceptorClasses().iterator().next());
}
else
{
// The method level @Interceptors
assertTrue(ib1.isExcludeClassInterceptors());
assertTrue(ib1.isExcludeDefaultInterceptors());
assertEquals(TestMethodInterceptor.class.getName(),
ib1.getInterceptorClasses().iterator().next());
assertEquals("intercept2", ib1Method.getMethodName());
}
JBossSessionBeanMetaData secureBean = (JBossSessionBeanMetaData)metaData.getEnterpriseBean("SecureBean");
assertNotNull(secureBean);
assertNull(secureBean.getBusinessLocals());
assertNotNull(secureBean.getBusinessRemotes());
}