/** * Enterprise Bean's business(...) methods argument RMI IIOP test. Each enterprise Bean class must * define zero or more business(...) methods. The method signatures must follow these rules: * * <p>The methods return value must be legal types for RMI-IIOP. * * @param descriptor the Enterprise Java Bean deployment descriptor * @return <code>Result</code> the results for this assertion */ public Result check(EjbDescriptor descriptor) { result = getInitializedResult(); compName = getVerifierContext().getComponentNameConstructor(); if ((descriptor instanceof EjbSessionDescriptor) || (descriptor instanceof EjbEntityDescriptor)) { if (descriptor.getRemoteClassName() != null && !"".equals(descriptor.getRemoteClassName())) commonToBothInterfaces(descriptor.getRemoteClassName(), descriptor); Set<String> remoteInterfaces = descriptor.getRemoteBusinessClassNames(); for (String remoteIntf : remoteInterfaces) commonToBothInterfaces(remoteIntf, descriptor); } if (result.getStatus() != Result.FAILED) { addGoodDetails(result, compName); result.passed( smh.getLocalString( getClass().getName() + ".passed", "Proper declaration of business method(s) found.")); } return result; }
private void commonToBothInterfaces(String intf, EjbDescriptor descriptor) { try { Class intfClass = Class.forName(intf, false, getVerifierContext().getClassLoader()); for (Method remoteMethod : intfClass.getMethods()) { // we don't test the EJB methods if (remoteMethod.getDeclaringClass().getName().equals("javax.ejb.EJBObject")) continue; Class beanClass = Class.forName( descriptor.getEjbClassName(), false, getVerifierContext().getClassLoader()); for (Method method : beanClass.getMethods()) { if (method.getName().equals(remoteMethod.getName()) && !RmiIIOPUtils.isValidRmiIIOPReturnType(method.getReturnType())) { // The methods arguments types must be legal types for // RMI-IIOP. This means that their return values must // be of valid types for RMI-IIOP, addErrorDetails(result, compName); result.failed( smh.getLocalString( getClass().getName() + ".failed", "Error: business method [ {0} ] was found, but " + "business method has invalid return type [ {1} ]. Business " + "method return type must be a valid type for RMI-IIOP.", new Object[] {method.getName(), method.getReturnType()})); } } } } catch (ClassNotFoundException e) { Verifier.debug(e); addErrorDetails(result, compName); result.failed( smh.getLocalString( getClass().getName() + ".failedException", "Error: Remote interface [ {0} ] or bean class [ {1} ] does " + "not exist or is not loadable within bean [ {2} ].", new Object[] { descriptor.getRemoteClassName(), descriptor.getEjbClassName(), descriptor.getName() })); } }