diff options
Diffstat (limited to 'plugins/org.eclipse.jst.j2ee.core/j2ee-validation/org/eclipse/jst/j2ee/model/internal/validation/AValidateBean.java')
-rw-r--r-- | plugins/org.eclipse.jst.j2ee.core/j2ee-validation/org/eclipse/jst/j2ee/model/internal/validation/AValidateBean.java | 673 |
1 files changed, 0 insertions, 673 deletions
diff --git a/plugins/org.eclipse.jst.j2ee.core/j2ee-validation/org/eclipse/jst/j2ee/model/internal/validation/AValidateBean.java b/plugins/org.eclipse.jst.j2ee.core/j2ee-validation/org/eclipse/jst/j2ee/model/internal/validation/AValidateBean.java deleted file mode 100644 index 10991ba6c..000000000 --- a/plugins/org.eclipse.jst.j2ee.core/j2ee-validation/org/eclipse/jst/j2ee/model/internal/validation/AValidateBean.java +++ /dev/null @@ -1,673 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2001, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.j2ee.model.internal.validation; - - -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import org.eclipse.jem.java.Field; -import org.eclipse.jem.java.JavaClass; -import org.eclipse.jem.java.Method; -import org.eclipse.jst.j2ee.ejb.EnterpriseBean; -import org.eclipse.wst.validation.internal.provisional.core.IMessage; - - -/** - * Performs validation common to session and entity beans. - */ -public abstract class AValidateBean extends AValidateEJB { - protected HashSet componentParents = null; // The JavaClass instances which are parents of this JavaClass instance, if this JavaClass instance is part of a component inheritance hierarchy. - - public AValidateBean() { - componentParents = new HashSet(); - } - - public void reset() { - super.reset(); - componentParents.clear(); - } - - protected void buildComponentParents(EnterpriseBean bean) { - if (bean == null) { - return; - } - EnterpriseBean supertype = getSuperType(bean); - if (supertype == null) { - return; - } - - // check this CMP's supertype - JavaClass thisEjbObject = bean.getEjbClass(); - JavaClass parentEjbObject = supertype.getEjbClass(); - - // EJBObject a Xchild of parent EJBObject (X = child, grandchild, great-grandchild, etc.) - if (ValidationRuleUtility.isAssignableFrom(thisEjbObject, parentEjbObject)) { - componentParents.add(parentEjbObject); - } - buildComponentParents(supertype); - } - - public final Object getTarget(Object parent, Object clazz) { - if(parent == null) { - return null; - } - - return ((EnterpriseBean)parent).getEjbClass(); - } - - public final static List getRemoteHomeMethodsExtended(List[] methodsExtendedList) { - return methodsExtendedList[0]; - } - - public final static List getRemoteComponentMethodsExtended(List[] methodsExtendedList) { - return methodsExtendedList[1]; - } - - public final static List getBeanClassMethodsExtended(List[] methodsExtendedList) { - return methodsExtendedList[2]; - } - - public final List[] getMethodsExtended(IEJBValidationContext vc, EnterpriseBean bean, JavaClass clazz) { - // A bean class needs the following classes' extended methods: - // 1. home - // 2. remote - // 3. bean class (when searching for a matching ejbPostCreate method). - // If a particular bean doesn't use a remote view or local view, - // then the corresponding entry in the array will be null. - List[] result = new List[3]; - JavaClass remoteHome = bean.getHomeInterface(); - if(remoteHome != null) { - result[0] = remoteHome.getMethodsExtended(); - } - else { - result[0] = null; - } - - JavaClass remoteComponent = bean.getRemoteInterface(); - if(remoteComponent != null) { - result[1] = remoteComponent.getMethodsExtended(); - } - else { - result[1] = null; - } - - JavaClass beanClass = bean.getEjbClass(); - if(beanClass != null) { - result[2] = beanClass.getMethodsExtended(); - } - else { - result[2] = null; - } - - return result; - } - - public final List[] getFieldsExtended(IEJBValidationContext vc, EnterpriseBean bean, JavaClass clazz) { - // Never check that a bean class' field is defined on another class - // of the bean. - return null; - } - - - - /** - * For the check that the ejbCreate method has a matching create method on the home, - * this method, given the bean method, returns the corresponding home method. - * - * 6.10.6 Session bean's home interface - * The following are the requirements for the session bean's home interface: - * - Each create method must be named "create", and it must match one of - * the ejbCreate methods defined in the session bean class. The matching - * ejbCreate method must have the same number and types of arguments. - * (Note that the return type is different.) - * - All the exceptions defined in the throws clause of an ejbCreate method - * of the session bean class must be defined in the throws clause of the - * matching create method of the home interface. - *... - * - * 9.2.8 Entity bean's home interface - * The following are the requirements for the entity bean's home interface: - * - Each create method must be named "create", and it must match one of the - * ejbCreate methods defined in the enterprise Bean class. The matching - * ejbCreate method must have the same number and types of its arguments. - * (Note that the return type is different.) - * - All the exceptions defined in the throws clause of the matching ejbCreate - * and ejbPostCreate methods of the enterprise Bean class must be included in - * the throws clause of the matching create method of the home interface - * (i.e the set of exceptions defined for the create method must be a superset - * of the union of exceptions defined for the ejbCreate and ejbPostCreate methods) - */ - public final Method getMatchingHomeCreateMethod(IEJBValidationContext vc, EnterpriseBean bean, JavaClass clazz, Method method, List[] methodsExtendedLists) throws InvalidInputException { - vc.terminateIfCancelled(); - - if (method == null) { - return null; - } - - if (bean == null) { - return null; - } - - JavaClass homeIntf = bean.getHomeInterface(); - ValidationRuleUtility.isValidTypeHierarchy(bean, homeIntf); - - // check only the current class, not the parents in this case. - // This method is used in the component inheritance hierarchy tests. - return ValidationRuleUtility.getMethod(method, IMethodAndFieldConstants.METHODNAME_CREATE, homeIntf.getMethods()); - } - - /** - * For the check that the ejbCreate method has a matching create method on the home, - * this method, given the bean method, returns the corresponding home method. - * - * 6.10.6 Session bean's home interface - * The following are the requirements for the session bean's home interface: - * - Each create method must be named "create", and it must match one of - * the ejbCreate methods defined in the session bean class. The matching - * ejbCreate method must have the same number and types of arguments. - * (Note that the return type is different.) - * - All the exceptions defined in the throws clause of an ejbCreate method - * of the session bean class must be defined in the throws clause of the - * matching create method of the home interface. - *... - * - * 9.2.8 Entity bean's home interface - * The following are the requirements for the entity bean's home interface: - * - Each create method must be named "create", and it must match one of the - * ejbCreate methods defined in the enterprise Bean class. The matching - * ejbCreate method must have the same number and types of its arguments. - * (Note that the return type is different.) - * - All the exceptions defined in the throws clause of the matching ejbCreate - * and ejbPostCreate methods of the enterprise Bean class must be included in - * the throws clause of the matching create method of the home interface - * (i.e the set of exceptions defined for the create method must be a superset - * of the union of exceptions defined for the ejbCreate and ejbPostCreate methods) - */ - public Method getMatchingHomeCreateMethodExtended(IEJBValidationContext vc, EnterpriseBean bean, JavaClass clazz, Method method) throws InvalidInputException { - vc. terminateIfCancelled(); - if (method == null) { - return null; - } - - if (bean == null) { - return null; - } - - JavaClass homeIntf = bean.getHomeInterface(); - ValidationRuleUtility.isValidTypeHierarchy(bean, homeIntf); - - return ValidationRuleUtility.getMethodExtended(homeIntf, method, IMethodAndFieldConstants.METHODNAME_CREATE); - } - - /** - * Return the name of the parent which the bean must implement. - * For entity beans, it's javax.ejb.EntityBean. - * For session beans, it's javax.ejb.SessionBean. - */ - protected abstract String getParentName(); - - /** - * Returns true if the method passed in is a business method. - * - * Although the EJB 1.1 spec implies that all non-framework methods are business methods, - * developers may create methods on the bean which are meant for internal use only. This - * method (isBusinessMethod) separates the "internal helper" methods from the business - * methods by checking if a corresponding method exists on the remote interface. If it - * does, consider this a business method. - */ - public boolean isBusinessMethod(IEJBValidationContext vc, EnterpriseBean bean, JavaClass clazz, Method method) throws InvalidInputException { - vc.terminateIfCancelled(); - - if (method == null) { - return false; - } - String name = method.getName(); - - if (isFrameworkMethod(name)) { - return false; - } - - if (method.isConstructor()) { - return false; - } - - // Check if there's a matching method on the remote interface. - if (bean == null) { - return false; - } - - JavaClass remoteInterface = bean.getRemoteInterface(); - ValidationRuleUtility.isValidTypeHierarchy(bean, remoteInterface); - Method remoteInterfaceMethod = ValidationRuleUtility.getMethodExtended(remoteInterface, name, method.listParametersWithoutReturn()); - if ((remoteInterfaceMethod == null) || (ValidationRuleUtility.isEJBObjectMethod(bean, remoteInterfaceMethod))) { - // no matching method - // filter out methods from javax.ejb.EJBObject - return false; - } - - return true; - } - - /** - * Return true if the method passed in is inherited from a parent in a - * component inheritance hierarchy. - */ - protected boolean isComponentInherited(IEJBValidationContext vc, EnterpriseBean bean, JavaClass clazz, Method meth) throws InvalidInputException { - if (componentParents == null) { - // Not part of a component inheritance hierarchy - return false; - } - - return (componentParents.contains(meth.getContainingJavaClass())); - } - - public boolean isFrameworkMethod(String name) { - if (name == null) { - return false; - } - else if (name.equals(IMethodAndFieldConstants.METHODNAME_EJBACTIVATE)) { - return true; - } - else if (name.equals(IMethodAndFieldConstants.METHODNAME_EJBPASSIVATE)) { - return true; - } - else if (name.equals(IMethodAndFieldConstants.METHODNAME_EJBREMOVE)) { - return true; - } - else if (name.startsWith(IMethodAndFieldConstants.PREFIX_EJBFIND)) { - return true; - } - else if (name.equals(IMethodAndFieldConstants.METHODNAME_EJBCREATE)) { - return true; - } - else if (name.equals(IMethodAndFieldConstants.METHODNAME_EJBPOSTCREATE)) { - return true; - } - else if (name.equals(IMethodAndFieldConstants.METHODNAME_FINALIZE)) { - return true; - } - return false; - - } - - /** - * Return true if the field can, and should, be validated. - * Filter out faulty fields (i.e., null), and fields which - * belong to the base type, whatever that is. (e.g. java.lang.Object) - */ - protected boolean isValid(IEJBValidationContext vc, EnterpriseBean bean, JavaClass clazz, Field field, List[] fieldsExtendedList) throws InvalidInputException { - if (super.isValid(vc, bean, clazz, field, fieldsExtendedList)) { - // exclude root object methods - if (ValidationRuleUtility.isJavaLangObjectField(bean, field)) { - return false; - } - return true; - } - return false; - } - - /** - * Return true if the method can, and should, be validated. - * Filter out faulty methods (i.e., null), and methods which - * belong to the base type, whatever that is. (e.g. java.lang.Object) - */ - protected final boolean isValid(IEJBValidationContext vc, EnterpriseBean bean, JavaClass clazz, Method method, List[] methodsExtendedList) throws InvalidInputException { - if (super.isValid(vc, bean, clazz, method, methodsExtendedList)) { - // exclude root object methods - if (ValidationRuleUtility.isJavaLangObjectMethod(bean, method)) { - return false; - } - else if (method.getName().equals(IMethodAndFieldConstants.METHODNAME_EJBCREATE)) { - return isValidEjbCreateMethod(vc, bean, clazz, method, methodsExtendedList); - } - else if (method.getName().equals(IMethodAndFieldConstants.METHODNAME_EJBPOSTCREATE)) { - return isValidEjbCreateMethod(vc, bean, clazz, method, methodsExtendedList); - } - else { - return true; - } - } - return false; - } - - /** - * Return true if the ejbCreate method passed in is not inherited - * from a parent in a component inheritance hierarchy, or is inherited, - * but is also defined on this bean's home interface. - * - * This method is used to exclude ejbCreate methods which are inherited - * from a parent in a component inheritance hierarchy, and are not - * exposed anywhere on this bean class instance itself. (i.e., inherited, - * but never used.) Since we generate the code for these methods, we - * should not flag them as warnings. - */ - protected final boolean isValidEjbCreateMethod(IEJBValidationContext vc, EnterpriseBean bean, JavaClass clazz, Method meth, List[] methodsExtendedLists) throws InvalidInputException { - boolean isValid = true; - boolean isComp = isComponentInherited(vc, bean, clazz, meth); - if (isComp) { - Method homeMeth = getMatchingHomeCreateMethod(vc, bean, clazz, meth, methodsExtendedLists); - if (homeMeth == null) { - isValid = false; - } - } - - return isValid; - } - - /** - * 18.1.2 Programming restrictions - *... - * - An enterprise Bean must not use read/write static fields. Using read-only static fields is - * allowed. Therefore, it is recommended that all static fields in the enterprise bean class be - * declared as final. - *... - */ - public void primValidate(IEJBValidationContext vc, EnterpriseBean bean, JavaClass clazz, Field field) throws InvalidInputException { - //super.primValidate(ejbMethod); - - vc.terminateIfCancelled(); - - validateStaticField(vc, bean, clazz, field); - } - - /** - * 6.10.4 Business methods - * The session bean class may define zero or more business methods whose signatures must follow these rules: - * - The method names can be arbitrary, but they must not start with "ejb" to avoid conflicts with the callback methods used by the EJB architecture. - * - * 9.2.6 Business methods - * - The entity bean class may define zero or more business methods whose signatures - * must follow these rules: - * - The method names can be arbitrary, but they must not start with 'ejb' to - * avoid conflicts with the callback methods used by the EJB architecture. - */ - public void validateBusinessMethod(IEJBValidationContext vc, EnterpriseBean bean, JavaClass clazz, Method method) throws InvalidInputException { - // The method names can be arbitrary, but they must not start with "ejb" to avoid conflicts with the callback methods used by the EJB architecture. - if (method.getName().startsWith(IMethodAndFieldConstants.PREFIX_EJB)) { - IMessage message = MessageUtility.getUtility().getMessage(vc, IEJBValidatorMessageConstants.CHKJ2411, IEJBValidationContext.ERROR, bean, clazz, method, this); - vc.addMessage(message); - } - - // Section 6.10.5 (session), 9.2.7 (entity), declare that all exceptions declared - // on the ejbCreate, ejbPostCreate methods must be defined in the throws clause of - // the matching create of the remote interface. - - JavaClass remote = bean.getRemoteInterface(); - ValidationRuleUtility.isValidTypeHierarchy(bean, remote); - - Method remoteMethod = ValidationRuleUtility.getMethodExtended(remote, method, method.getName()); - if (remoteMethod == null) { - // Then this method shouldn't have been called; unless the method exists on the remote, this bean method isn't a business method. - return; - } - - Set exceptions = ValidationRuleUtility.getNotSubsetExceptions(bean, method, remoteMethod); - if (exceptions.size() > 0) { - Iterator iterator = exceptions.iterator(); - while (iterator.hasNext()) { - JavaClass exc = (JavaClass) iterator.next(); - IMessage message = MessageUtility.getUtility().getMessage(vc, IMessagePrefixEjb11Constants.CHKJ2432, IEJBValidationContext.ERROR, bean, clazz, method, new String[] { remote.getQualifiedName(), exc.getQualifiedName()}, this); - vc.addMessage(message); - } - } - - validateMatchingMethodExceptions(vc, bean, clazz, method, bean.getRemoteInterface(), remoteMethod); - } - - /** - * 6.10.2 Session bean class - * The following are the requirements for session bean class: - * - The class must implement, directly or indirectly, the javax.ejb.SessionBean - * interface. - * - The class must be defined as public, must not be final, and must not - * be abstract. - * - The class may, but is not required to, implement the session bean's - * remote interface [4] . - * - If the class is a stateful session bean, it may optionally implement - * the javax.ejb.SessionSynchronization interface. - * - The session bean class may have superclasses and/or superinterfaces. If the - * session bean has superclasses, then the business methods, the ejbCreate methods, - * the methods of the SessionBean interface, and the methods of the optional - * SessionSynchronization interface may be defined in the session bean class, - * or in any of its superclasses. - * - *... - * 9.2.2 Enterprise bean class - * - The following are the requirements for an entity bean class: - * - The class must implement, directly or indirectly, the javax.ejb.EntityBean interface. - * - The class must be defined as public and must not be abstract. - * - The class must not be defined as final. - *... - * - The class may, but is not required to, implement the entity bean's remote interface [9]. - * If the class implements the entity bean's remote interface, the class must provide no-op - * implementations of the methods defined in the javax.ejb.EJBObject interface. The container - * will never invoke these methods on the bean instances at runtime. - * - A no-op implementation of these methods is required to avoid - * defining the entity bean class as abstract. - * - The entity bean class must implement the business methods, and the - * ejbCreate, ejbPostCreate, and ejbFind<METHOD> methods as described - * later in this section. - * - The entity bean class may have superclasses and/or superinterfaces. - * If the entity bean has superclasses, the business methods, the - * ejbCreate and ejbPostCreate methods, the finder methods, and the - * methods of the EntityBean interface may be implemented in the - * enterprise bean class or in any of its superclasses. - * - The entity bean class is allowed to implement other methods (for - * example helper methods invoked internally by the business methods) - * in addition to the methods required by the EJB specification. - *... - */ - public void validateClass(IEJBValidationContext vc, EnterpriseBean bean, JavaClass clazz) throws InvalidInputException { - vc.terminateIfCancelled(); - - buildComponentParents(bean); - - // The class must implement, directly or indirectly, the javax.ejb.EntityBean (for entity beans), - // or the javax.ejb.SessionBean (for session beans), interface. - if (!ValidationRuleUtility.isAssignableFrom(clazz, ValidationRuleUtility.getType(getParentName(), bean))) { - IMessage message = MessageUtility.getUtility().getMessage(vc, IMessagePrefixEjb11Constants.CHKJ2013, IEJBValidationContext.ERROR, bean, clazz, new String[] {clazz.getQualifiedName(), getParentName()}, this); - vc.addMessage(message); - } - - // For both entity and session beans, the class must be public. - if (!clazz.isPublic()) { - IMessage message = MessageUtility.getUtility().getMessage(vc, IEJBValidatorMessageConstants.CHKJ2022, IEJBValidationContext.ERROR, bean, clazz, new String[] { clazz.getQualifiedName()}, this); - vc.addMessage(message); - } - - // For both entity and session beans, the class must not be abstract. - if (clazz.isAbstract()) { - IMessage message = MessageUtility.getUtility().getMessage(vc, IEJBValidatorMessageConstants.CHKJ2014, IEJBValidationContext.ERROR, bean, clazz, new String[] { clazz.getQualifiedName()}, this); - vc.addMessage(message); - } - - // For both entity and session beans, the class must not be final. - if (clazz.isFinal()) { - IMessage message = MessageUtility.getUtility().getMessage(vc, IEJBValidatorMessageConstants.CHKJ2015, IEJBValidationContext.ERROR, bean, clazz, new String[] { clazz.getQualifiedName()}, this); - vc.addMessage(message); - } - - if (ValidationRuleUtility.isUnnamedPackage(clazz.getJavaPackage())) { - IMessage message = MessageUtility.getUtility().getMessage(vc, IEJBValidatorMessageConstants.CHKJ2041, IEJBValidationContext.INFO, bean, clazz, this); - vc.addMessage(message); - } - - validateAppendixB(vc, bean, clazz); - } - - /** - * 9.2.3 ejbCreate methods - * - The entity bean class may define zero or more ejbCreate(...) methods whose signatures - * must follow these rules: - * - The method name must be ejbCreate. - * - The method must be declared as public. - * - The method must not be declared as final or static. - * - The return type must be the entity bean's primary key type. - * - The method argument and return value types must be legal types for RMI-IIOP. - * - The throws clause may define arbitrary application specific exceptions, - * including the javax.ejb.CreateException. - * - Compatibility Note: EJB 1.0 allowed the ejbCreate method to throw the - * java.rmi.RemoteException to indicate a non-application exception. This - * practice is deprecated in EJB 1.1 -- an EJB 1.1 compliant enterprise bean - * should throw the javax.ejb.EJBException or another java.lang.RuntimeException - * to indicate non-application exceptions to the Container (see Section 12.2.2). - * - The entity object created by the ejbCreate method must have a unique primary key. - * This means that the primary key must be different from the primary keys of all - * the existing entity objects within the same home. The ejbCreate method should - * throw the DuplicateKeyException on an attempt to create an entity object with - * a duplicate primary key. However, it is legal to reuse the primary key of a - * previously removed entity object. - * - * 9.2.8 Entity bean's home interface - * The following are the requirements for the entity bean's home interface: - * - Each create method must be named "create", and it must match one of the - * ejbCreate methods defined in the enterprise Bean class. The matching - * ejbCreate method must have the same number and types of its arguments. - * (Note that the return type is different.) - * - All the exceptions defined in the throws clause of the matching ejbCreate - * and ejbPostCreate methods of the enterprise Bean class must be included in - * the throws clause of the matching create method of the home interface - * (i.e the set of exceptions defined for the create method must be a superset - * of the union of exceptions defined for the ejbCreate and ejbPostCreate methods) - *... - * - * 9.4.2 ejbCreate, ejbPostCreate - *... - * - The ejbCreate(...) methods must be defined to return the primary key class type. - * The implementation of the ejbCreate(...) methods should be coded to return a null. - * The returned value is ignored by the Container. - *... - */ - public void validateEjbCreateMethod_homeDep(IEJBValidationContext vc, EnterpriseBean bean, JavaClass clazz, Method method) throws InvalidInputException { - vc.terminateIfCancelled(); - - // The method which calls this method must have already tested that the method name is ejbCreate. - if (method == null) { - return; - } - - Method createMethod = getMatchingHomeCreateMethodExtended(vc, bean, clazz, method); - if (createMethod == null) { - // Can't check the exceptions of a method which doesn't exist. - return; - } - - // Whether this is from a component inheritance or not, if the method exists on the - // home, check that the method follows the spec. - - // Section 6.10.6 (session), 9.2.8 (entity), declare that all exceptions declared - // on the ejbCreate, ejbPostCreate methods must be defined in the throws clause of - // the matching create of the home interface. - Set exceptions = ValidationRuleUtility.getNotSubsetExceptions(bean, method, createMethod); - if (exceptions.size() > 0) { - Iterator iterator = exceptions.iterator(); - while (iterator.hasNext()) { - JavaClass exc = (JavaClass) iterator.next(); - IMessage message = MessageUtility.getUtility().getMessage(vc, IMessagePrefixEjb11Constants.CHKJ2420, IEJBValidationContext.ERROR, bean, clazz, method, new String[] { exc.getQualifiedName(), bean.getHomeInterface().getQualifiedName()}, this); - vc.addMessage(message); - } - } - - } - - public void validateHelperMethod(IEJBValidationContext vc, EnterpriseBean bean, JavaClass clazz, Method method) { - //Default - } - - public void validateNoRemoteException(IEJBValidationContext vc, EnterpriseBean bean, JavaClass clazz, Method method, String messagePrefix) throws InvalidInputException { - // EJB 2.0 added "throws InvalidInputException" above - if (method == null) { - return; - } - - if(!ValidationRuleUtility.doesNotThrowRemoteException(bean, method)) { - IMessage message = MessageUtility.getUtility().getMessage(vc, messagePrefix, IEJBValidationContext.WARNING, bean, clazz, method, this); - vc.addMessage(message); - } - - } - - /** - * 18.1.2 Programming restrictions - *... - * - An enterprise Bean must not use read/write static fields. Using read-only static fields is - * allowed. Therefore, it is recommended that all static fields in the enterprise bean class be - * declared as final. - *... - */ - protected void validateStaticField(IEJBValidationContext vc, EnterpriseBean bean, JavaClass clazz, Field field) throws InvalidInputException { - if (field == null) { - return; - } - - // An enterprise Bean must not use read/write static fields. Using read-only static fields is - // allowed. Therefore, it is recommended that all static fields in the enterprise bean class be - // declared as final. - if (field.isStatic() && !field.isFinal()) { - IMessage message = MessageUtility.getUtility().getMessage(vc, IMessagePrefixEjb11Constants.CHKJ2200, IEJBValidationContext.WARNING, bean, clazz, field, this); - vc.addMessage(message); - } - } - - public void validateMatchingMethodExceptions(IEJBValidationContext vc, EnterpriseBean bean, JavaClass clazz, Method method, JavaClass matchingClazz, Method matchingMethod) { - // Every exception thrown on the bean class' method must be thrown on the component/home method - /* Don't check for this here - let the home & component do it. - Set exceptions = ValidationRuleUtility.getNotSubsetExceptions(bean, method, matchingMethod); - Iterator eiterator = exceptions.iterator(); - while(eiterator.hasNext()) { - } - */ - - // Every exception thrown by the component/home method should be thrown or there may be compile errors - Set exceptions = ValidationRuleUtility.getNotSubsetSubtypeExceptions(bean, matchingMethod, method); - Iterator eiterator = exceptions.iterator(); - while(eiterator.hasNext()) { - JavaClass exception = (JavaClass)eiterator.next(); - IMessage message = MessageUtility.getUtility().getMessage(vc, IEJBValidatorMessageConstants.CHKJ2456, IEJBValidationContext.WARNING, bean, clazz, method, new String[]{exception.getJavaName(), matchingClazz.getJavaName()}, this); - vc.addMessage(message); - } - } - - protected void validateAppendixB(IEJBValidationContext vc, EnterpriseBean bean, JavaClass thisEjbObject) { - // The Java inheritance structure must match the EJB inheritance structure. - // e.g. if EJB B is a child of EJB A, then class B must be a child of class A. - // B could be a grandchild (or great-grandchild or ...) of A. - if(bean == null) { - return; - } - EnterpriseBean supertype = getSuperType(bean); - JavaClass parentEjbObject = null; - if (supertype != null) { - parentEjbObject = supertype.getEjbClass(); - - // EJBObject a Xchild of parent EJBObject (X = child, grandchild, great-grandchild, etc.) - try { - ValidationRuleUtility.isValidType(thisEjbObject); - ValidationRuleUtility.isValidType(parentEjbObject); - if (!ValidationRuleUtility.isAssignableFrom(thisEjbObject, parentEjbObject)) { - String[] msgParm = new String[] { thisEjbObject.getQualifiedName(), parentEjbObject.getQualifiedName()}; - IMessage message = MessageUtility.getUtility().getMessage(vc, IEJBValidatorMessageConstants.CHKJ2103, IEJBValidationContext.ERROR, bean, thisEjbObject, msgParm, this); - vc.addMessage(message); - } - } - catch (InvalidInputException e) { - String[] msgParm = { e.getJavaClass().getQualifiedName(), bean.getName()}; - IMessage message = MessageUtility.getUtility().getMessage(vc, IEJBValidatorMessageConstants.CHKJ2849, IEJBValidationContext.WARNING, bean, msgParm, this); - vc.addMessage(message); - } - } - -// validateAppendixB(vc, supertype, parentEjbObject); - } -} |