EJB 2.0 bean verifier.
| Method from org.jboss.verifier.strategy.EJBVerifier20 Detail: |
public void checkEntity(EntityMetaData entity) {
if (entity.isCMP1x())
{
cmp1XVerifier.checkEntity(entity);
}
else
{
checkBmpOrCmp2Entity(entity);
}
}
|
public void checkMessageBean(MessageDrivenMetaData mdb) {
boolean beanVerified = false;
if (!verifyBean(mdb))
return;
beanVerified = verifyMessageDrivenBean(mdb);
if (beanVerified)
{
// OK, we're done
fireBeanVerifiedEvent(mdb);
}
}
|
public void checkSession(SessionMetaData session) {
boolean localOrRemoteExists = false;
boolean verified = false;
if (!verifyBean(session))
return;
verified = verifySessionBean(session);
if (hasRemoteInterfaces(session))
{
// Check remote interfaces
localOrRemoteExists = true;
verified = verified && verifySessionRemote(session);
verified = verified && verifySessionHome(session);
}
if (hasLocalInterfaces(session))
{
// Check local interfaces
localOrRemoteExists = true;
verified = verified && verifySessionLocal(session);
verified = verified && verifySessionLocalHome(session);
}
// The session bean MUST implement either a remote home and
// remote, or local home and local interface. It MAY implement a
// remote home, remote, local home or local interface.
//
// Spec 7.10.1
//
if (!localOrRemoteExists)
{
fireSpecViolationEvent(session, new Section("7.10.1"));
verified = false;
}
if (verified)
{
// All OK; full steam ahead
fireBeanVerifiedEvent(session);
}
}
IMPLEMENTS VERIFICATION STRATEGY INTERFACE |
public String getMessageBundle() {
return "EJB20Messages.properties";
}
|
protected boolean hasLocalInterfaces(BeanMetaData bean) {
boolean status = true;
String localHomeName = bean.getLocalHome();
String localName = bean.getLocal();
if (localHomeName == null || localName == null)
return false;
// Verify the < local-home > class
try
{
localHome = classloader.loadClass(localHomeName);
}
catch (ClassNotFoundException cnfe)
{
fireSpecViolationEvent(bean, new Section("22.2.e",
"Class not found on '" + localHomeName + "': " +
cnfe.getMessage()));
status = false;
}
try
{
local = classloader.loadClass(localName);
}
catch (ClassNotFoundException cnfe)
{
fireSpecViolationEvent(bean, new Section("22.2.f",
"Class not found on '" + localName + "': " + cnfe.getMessage()));
status = false;
}
return status;
}
Check whether the bean has declared local interfaces and whether
we can load the defined classes |
protected boolean hasRemoteInterfaces(BeanMetaData bean) {
boolean status = true;
String homeName = bean.getHome();
String remoteName = bean.getRemote();
if (homeName == null || remoteName == null)
return false;
// Verify the < home > class
try
{
home = classloader.loadClass(homeName);
}
catch (ClassNotFoundException cnfe)
{
fireSpecViolationEvent(bean, new Section("22.2.c",
"Class not found on '" + homeName + "': " + cnfe.getMessage()));
status = false;
}
// Verify the < remote > class
try
{
remote = classloader.loadClass(remoteName);
}
catch (ClassNotFoundException cnfe)
{
fireSpecViolationEvent(bean, new Section("22.2.d",
"Class not found on '" + remoteName + "': " + cnfe.getMessage()));
status = false;
}
return status;
}
Check whether the bean has declared local interfaces and whether
we can load the defined classes |
protected boolean verifyBean(BeanMetaData theBean) {
String beanName = theBean.getEjbClass();
if (beanName == null)
return false;
try
{
bean = classloader.loadClass(beanName);
return true;
}
catch (ClassNotFoundException cnfe)
{
fireSpecViolationEvent(theBean, new Section("22.2.b",
"Class not found on '" + beanName + "': " + cnfe.getMessage()));
return false;
}
}
Try to load the beans class declared in the <ejb-class>
element. |
protected boolean verifyMessageDrivenBean(MessageDrivenMetaData mdBean) {
boolean status = true;
// A message driven bean MUST implement, directly or indirectly,
// javax.ejb.MessageDrivenBean interface.
//
// Spec 15.7.2
//
if (!hasMessageDrivenBeanInterface(bean))
{
fireSpecViolationEvent(mdBean, new Section("15.7.2.a"));
status = false;
}
// A message driven bean MUST implement, directly or indirectly,
// javax.jms.MessageListener interface.
//
// Spec 15.7.2
//
if (!hasMessageListenerInterface(bean))
{
fireSpecViolationEvent(mdBean, new Section("15.7.2.b"));
status = false;
}
// The message driven bean class MUST be defined as public.
//
// Spec 15.7.2
//
if (!isPublic(bean))
{
fireSpecViolationEvent(mdBean, new Section("15.7.2.c1"));
status = false;
}
// The message driven bean class MUST NOT be final.
//
// Spec 15.7.2
//
if (isFinal(bean))
{
fireSpecViolationEvent(mdBean, new Section("15.7.2.c2"));
status = false;
}
// The message driven bean class MUST NOT be abstract.
//
// Spec 15.7.2
//
if (isAbstract(bean))
{
fireSpecViolationEvent(mdBean, new Section("15.7.2.c3"));
status = false;
}
// The message driven bean class MUST have a public constructor that
// takes no arguments.
//
// Spec 15.7.2
//
if (!hasDefaultConstructor(bean))
{
fireSpecViolationEvent(mdBean, new Section("15.7.2.d"));
status = false;
}
// The message driven bean class MUST NOT define the finalize() method.
//
// Spec 15.7.2
//
if (hasFinalizer(bean))
{
fireSpecViolationEvent(mdBean, new Section("15.7.2.e"));
status = false;
}
// A message driven bean MUST implement the ejbCreate() method.
// The ejbCreate() method signature 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 void
// - The method arguments MUST have no arguments.
// - The method MUST NOT define any application exceptions.
//
// Spec 15.7.2, 3
//
if (hasEJBCreateMethod(bean, false))
{
Iterator it = getEJBCreateMethods(bean);
Method ejbCreate = (Method)it.next();
if (!isPublic(ejbCreate))
{
fireSpecViolationEvent(mdBean, ejbCreate, new Section("15.7.3.b"));
status = false;
}
if ((isFinal(ejbCreate)) || (isStatic(ejbCreate)))
{
fireSpecViolationEvent(mdBean, ejbCreate, new Section("15.7.3.c"));
status = false;
}
if (!hasVoidReturnType(ejbCreate))
{
fireSpecViolationEvent(mdBean, ejbCreate, new Section("15.7.3.d"));
status = false;
}
if (!hasNoArguments(ejbCreate))
{
fireSpecViolationEvent(mdBean, ejbCreate, new Section("15.7.3.e"));
status = false;
}
if (!throwsNoException(ejbCreate))
{
fireSpecViolationEvent(mdBean, ejbCreate, new Section("15.7.3.f"));
status = false;
}
if (it.hasNext())
{
fireSpecViolationEvent(mdBean, new Section("15.7.3.a"));
status = false;
}
}
else
{
fireSpecViolationEvent(mdBean, new Section("15.7.3.a"));
status = false;
}
// A message driven bean MUST implement the onMessage(...) method.
// The onMessage() method signature MUST follow these rules:
//
// - The method name MUST be onMessage
// - The method MUST be declared as public
// - The method MUST NOT be declared as final or static
// - The return type MUST be void
// - The method arguments MUST have a single argument of type
// javax.jms.Message.
// - The method MUST NOT define any application exceptions.
//
// Spec 15.7.4
//
if (hasOnMessageMethod(bean))
{
Iterator it = getOnMessageMethods(bean);
Method onMessage = (Method)it.next();
if (!isPublic(onMessage))
{
fireSpecViolationEvent(mdBean, onMessage, new Section("15.7.4.b"));
status = false;
}
if ((isFinal(onMessage)) || (isStatic(onMessage)))
{
fireSpecViolationEvent(mdBean, onMessage, new Section("15.7.4.c"));
status = false;
}
try
{
Class message = classloader.loadClass("javax.jms.Message");
if (!hasSingleArgument(onMessage, message))
{
fireSpecViolationEvent(mdBean, onMessage,
new Section("15.7.4.e"));
status = false;
}
if (!throwsNoException(onMessage))
{
fireSpecViolationEvent(mdBean, onMessage,
new Section("15.7.4.f"));
status = false;
}
if (it.hasNext())
{
fireSpecViolationEvent(mdBean, new Section("15.7.4.a"));
status = false;
}
}
catch (ClassNotFoundException cnfe)
{
// javax.jms.Message is not available?!
}
}
else
{
fireSpecViolationEvent(mdBean, new Section("15.7.4.a"));
status = false;
}
// A message driven bean MUST implement the ejbRemove() method.
// The ejbRemove() method signature MUST follow these rules:
//
// - The method name MUST be ejbRemove
// - The method MUST be declared as public
// - The method MUST NOT be declared as final or static
// - The return type MUST be void
// - The method MUST have no arguments.
// - The method MUST NOT define any application exceptions.
//
// Spec 15.7.5
//
if (hasEJBRemoveMethod(bean))
{
Iterator it = getEJBRemoveMethods(bean);
Method ejbRemove = (Method)it.next();
if (!isPublic(ejbRemove))
{
fireSpecViolationEvent(mdBean, ejbRemove, new Section("15.7.5.b"));
status = false;
}
if ((isFinal(ejbRemove)) || (isStatic(ejbRemove)))
{
fireSpecViolationEvent(mdBean, ejbRemove, new Section("15.7.5.c"));
status = false;
}
if (!hasVoidReturnType(ejbRemove))
{
fireSpecViolationEvent(mdBean, ejbRemove, new Section("15.7.5.d"));
status = false;
}
if (!hasNoArguments(ejbRemove))
{
fireSpecViolationEvent(mdBean, ejbRemove, new Section("15.7.5.e"));
status = false;
}
if (!throwsNoException(ejbRemove))
{
fireSpecViolationEvent(mdBean, ejbRemove, new Section("15.7.5.f"));
status = false;
}
if (it.hasNext())
{
fireSpecViolationEvent(mdBean, new Section("15.7.5.a"));
status = false;
}
}
else
{
fireSpecViolationEvent(mdBean, new Section("15.7.5.a"));
status = false;
}
return status;
}
|
protected boolean verifySessionBean(SessionMetaData session) {
boolean status = true;
// A session bean MUST implement, directly or indirectly,
// javax.ejb.SessionBean interface.
//
// Spec 7.10.2
//
if (!hasSessionBeanInterface(bean))
{
fireSpecViolationEvent(session, new Section("7.10.2.a"));
status = false;
}
// Only a stateful container-managed transaction demarcation
// session bean MAY implement the SessionSynchronization
// interface.
//
// A stateless Session bean MUST NOT implement the
// SessionSynchronization interface.
//
// Spec 7.5.3
//
if (hasSessionSynchronizationInterface(bean))
{
if (session.isStateless())
{
fireSpecViolationEvent(session, new Section("7.5.3.a"));
status = false;
}
if (session.isBeanManagedTx())
{
fireSpecViolationEvent(session, new Section("7.5.3.b"));
status = false;
}
}
//
// A session bean MUST implement AT LEAST one ejbCreate method.
//
// Spec 7.10.3
//
if (!hasEJBCreateMethod(bean, true))
{
fireSpecViolationEvent(session, new Section("7.10.3"));
status = false;
}
// A session with bean-managed transaction demarcation CANNOT
// implement the SessionSynchronization interface.
//
// Spec 7.6.1 (table 2)
//
if (hasSessionSynchronizationInterface(bean)
&& session.isBeanManagedTx())
{
fireSpecViolationEvent(session, new Section("7.6.1"));
status = false;
}
// The session bean class MUST be defined as public.
//
// Spec 7.10.2
//
if (!isPublic(bean))
{
fireSpecViolationEvent(session, new Section("7.10.2.b1"));
status = false;
}
// The session bean class MUST NOT be final.
//
// Spec 7.10.2
//
if (isFinal(bean))
{
fireSpecViolationEvent(session, new Section("7.10.2.b2"));
status = false;
}
// The session bean class MUST NOT be abstract.
//
// Spec 7.10.2
//
if (isAbstract(bean))
{
fireSpecViolationEvent(session, new Section("7.10.2.b3"));
status = false;
}
// The session bean class MUST have a public constructor that
// takes no arguments.
//
// Spec 7.10.2
//
if (!hasDefaultConstructor(bean))
{
fireSpecViolationEvent(session, new Section("7.10.2.c"));
status = false;
}
// The session bean class MUST NOT define the finalize() method.
//
// Spec 7.10.2
//
if (hasFinalizer(bean))
{
fireSpecViolationEvent(session, new Section("7.10.2.d"));
status = false;
}
// The ejbCreate(...) method signatures MUST follow these rules:
//
// - The method name MUST have ejbCreate as its prefix
// - The method MUST be declared as public
// - The method MUST NOT be declared as final or static
// - The return type MUST be void
// - The method arguments MUST be legal types for RMI/IIOP
// - The method SHOULD not throw a java.rmi.RemoteException
// (NOTE we don't test for this as it's not a MUST)
//
// Spec 7.10.3
//
if (hasEJBCreateMethod(bean, true))
{
Iterator it = getEJBCreateMethods(bean);
while (it.hasNext())
{
Method ejbCreate = (Method)it.next();
if (!isPublic(ejbCreate))
{
fireSpecViolationEvent(session, ejbCreate,
new Section("7.10.3.b"));
status = false;
}
if ((isFinal(ejbCreate)) || (isStatic(ejbCreate)))
{
fireSpecViolationEvent(session, ejbCreate,
new Section("7.10.3.c"));
status = false;
}
if (!hasVoidReturnType(ejbCreate))
{
fireSpecViolationEvent(session, ejbCreate,
new Section("7.10.3.d"));
status = false;
}
if (!hasLegalRMIIIOPArguments(ejbCreate))
{
fireSpecViolationEvent(session, ejbCreate,
new Section("7.10.3.e"));
status = false;
}
}
}
return status;
}
|
protected boolean verifySessionHome(SessionMetaData session) {
boolean status = true;
// The home interface of a stateless session bean MUST have one
// create() method that takes no arguments.
//
// The create() method MUST return the session bean's remote
// interface.
//
// There CAN NOT be other create() methods in the home interface.
//
// Spec 7.10.6
//
if (session.isStateless())
{
if (!hasDefaultCreateMethod(home))
{
fireSpecViolationEvent(session, new Section("7.10.6.d2"));
status = false;
}
else
{
Method create = getDefaultCreateMethod(home);
if (hasMoreThanOneCreateMethods(home))
{
fireSpecViolationEvent(session, new Section("7.10.6.d2"));
status = false;
}
}
}
// The session bean's home interface MUST extend the
// javax.ejb.EJBHome interface.
//
// Spec 7.10.6
//
if (!hasEJBHomeInterface(home))
{
fireSpecViolationEvent(session, new Section("7.10.6.a"));
status = false;
}
// Method arguments defined in the home interface MUST be
// of valid types for RMI/IIOP.
//
// Method return values defined in the home interface MUST
// be of valid types for RMI/IIOP.
//
// Methods defined in the home interface MUST include
// java.rmi.RemoteException in their throws clause.
//
// Spec 7.10.6
///
Iterator it = Arrays.asList(home.getMethods()).iterator();
while (it.hasNext())
{
Method method = (Method)it.next();
if (!hasLegalRMIIIOPArguments(method))
{
fireSpecViolationEvent(session, method, new Section("7.10.6.b1"));
status = false;
}
if (!hasLegalRMIIIOPReturnType(method))
{
fireSpecViolationEvent(session, method, new Section("7.10.6.b2"));
status = false;
}
if (!throwsRemoteException(method))
{
fireSpecViolationEvent(session, method, new Section("7.10.6.b3"));
status = false;
}
}
// A session bean's home interface MUST define one or more
// create(...) methods.
//
// Spec 7.10.6
//
if (!hasCreateMethod(home))
{
fireSpecViolationEvent(session, new Section("7.10.6.d1"));
status = false;
}
// Each create(...) method in the session bean's home interface
// MUST have a matching ejbCreate(...) method in the session
// bean's class.
//
// Each create(...) method in the session bean's home interface
// MUST have the same number and types of arguments to its
// matching ejbCreate(...) method.
//
// The return type for a create(...) method MUST be the session
// bean's remote interface type.
//
// All the exceptions defined in the throws clause of the matching
// ejbCreate(...) method of the enterprise bean class MUST be
// included in the throws clause of a matching create(...) method.
//
// The throws clause of a create(...) method MUST include the
// javax.ejb.CreateException.
//
// Spec 7.10.6
//
Iterator createMethods = getCreateMethods(home);
while (createMethods.hasNext())
{
Method create = (Method)createMethods.next();
if (!hasMatchingEJBCreate(bean, create))
{
fireSpecViolationEvent(session, create, new Section("7.10.6.e"));
status = false;
}
if (!hasRemoteReturnType(session, create))
{
fireSpecViolationEvent(session, create, new Section("7.10.6.f"));
status = false;
}
if (hasMatchingEJBCreate(bean, create))
{
Method ejbCreate = getMatchingEJBCreate(bean, create);
if (!hasMatchingExceptions(ejbCreate, create))
{
fireSpecViolationEvent(session, create,
new Section("7.10.6.g"));
status = false;
}
}
if (!throwsCreateException(create))
{
fireSpecViolationEvent(session, create, new Section("7.10.6.h"));
status = false;
}
}
return status;
}
Verifies the session bean remote home interface against the EJB 2.0
specification. |
protected boolean verifySessionLocal(SessionMetaData session) {
boolean status = true;
// The local interface MUST extend the javax.ejb.EJBLocalObject
// interface.
//
// Spec 7.10.7
//
if (!hasEJBLocalObjectInterface(local))
{
fireSpecViolationEvent(session, new Section("7.10.7.a"));
status = false;
}
// Methods defined in the local interface MUST NOT include
// java.rmi.RemoteException in their throws clause.
//
// Spec 7.10.7
//
Iterator it = Arrays.asList(local.getMethods()).iterator();
while (it.hasNext())
{
Method method = (Method)it.next();
if (throwsRemoteException(method))
{
fireSpecViolationEvent(session, method, new Section("7.10.7.b"));
status = false;
}
}
// For each method defined in the local interface, there MUST be
// a matching method in the session bean's class. The matching
// method MUST have:
//
// - the same name
// - the same number and types of arguments, and the same
// return type
// - All the exceptions defined in the throws clause of the
// matching method of the session bean class must be defined
// in the throws clause of the method of the remote interface
//
// Spec 7.10.7
//
it = Arrays.asList(local.getDeclaredMethods()).iterator();
while (it.hasNext())
{
Method localMethod = (Method)it.next();
if (!hasMatchingMethod(bean, localMethod))
{
fireSpecViolationEvent(session, localMethod,
new Section("7.10.7.d1"));
status = false;
}
if (hasMatchingMethod(bean, localMethod))
{
try
{
Method beanMethod = bean.getMethod(localMethod.getName(),
localMethod.getParameterTypes());
if (!hasMatchingReturnType(localMethod, beanMethod))
{
fireSpecViolationEvent(session, localMethod,
new Section("7.10.7.d2"));
status = false;
}
if (!hasMatchingExceptions(beanMethod, localMethod))
{
fireSpecViolationEvent(session, localMethod,
new Section("7.10.7.d3"));
status = false;
}
}
catch (NoSuchMethodException ignored)
{
}
}
}
return status;
}
|
protected boolean verifySessionLocalHome(SessionMetaData session) {
boolean status = true;
// The local home interface of a stateless session bean MUST have
// one create() method that takes no arguments.
//
// There CAN NOT be other create() methods in the home interface.
//
// Spec 7.10.8
//
if (session.isStateless())
{
if (!hasDefaultCreateMethod(localHome))
{
fireSpecViolationEvent(session, new Section("7.10.8.d2"));
status = false;
}
else
{
Method create = getDefaultCreateMethod(localHome);
if (hasMoreThanOneCreateMethods(localHome))
{
fireSpecViolationEvent(session, new Section("7.10.8.d2"));
status = false;
}
}
}
// The session bean's home interface MUST extend the
// javax.ejb.EJBLocalHome interface.
//
// Spec 7.10.8
//
if (!hasEJBLocalHomeInterface(localHome))
{
fireSpecViolationEvent(session, new Section("7.10.8.a"));
status = false;
}
// Methods defined in the local home interface MUST NOT include
// java.rmi.RemoteException in their throws clause.
//
// Spec 7.10.8
//
Iterator it = Arrays.asList(localHome.getMethods()).iterator();
while (it.hasNext())
{
Method method = (Method)it.next();
if (throwsRemoteException(method))
{
fireSpecViolationEvent(session, method, new Section("7.10.8.b"));
status = false;
}
}
// A session bean's home interface MUST define one or more
// create(...) methods.
//
// Spec 7.10.8
//
if (!hasCreateMethod(localHome))
{
fireSpecViolationEvent(session, new Section("7.10.8.d1"));
status = false;
}
// Each create(...) method in the session bean's local home
// interface MUST have a matching ejbCreate(...) method in the
// session bean's class.
//
// Each create(...) method in the session bean's home interface
// MUST have the same number and types of arguments to its
// matching ejbCreate(...) method.
//
// The return type for a create(...) method MUST be the session
// bean's local interface type.
//
// All the exceptions defined in the throws clause of the matching
// ejbCreate(...) method of the enterprise bean class MUST be
// included in the throws clause of a matching create(...) method.
//
// The throws clause of a create(...) method MUST include the
// javax.ejb.CreateException.
//
// Spec 7.10.8
//
Iterator createMethods = getCreateMethods(localHome);
while (createMethods.hasNext())
{
Method create = (Method)createMethods.next();
if (!hasMatchingEJBCreate(bean, create))
{
fireSpecViolationEvent(session, create,
new Section("7.10.8.e"));
status = false;
}
if (!hasLocalReturnType(session, create))
{
fireSpecViolationEvent(session, create,
new Section("7.10.8.f"));
status = false;
}
if (hasMatchingEJBCreate(bean, create))
{
Method ejbCreate = getMatchingEJBCreate(bean, create);
if (!hasMatchingExceptions(ejbCreate, create))
{
fireSpecViolationEvent(session, create,
new Section("7.10.8.g"));
}
}
if (!throwsCreateException(create))
{
fireSpecViolationEvent(session, create,
new Section("7.10.8.h"));
status = false;
}
}
return status;
}
Verifies the session bean local home interface against the EJB 2.0
specification. |
protected boolean verifySessionRemote(SessionMetaData session) {
boolean status = true;
// The remote interface MUST extend the javax.ejb.EJBObject
// interface.
//
// Spec 7.10.5
//
if (!hasEJBObjectInterface(remote))
{
fireSpecViolationEvent(session, new Section("7.10.5.a"));
status = false;
}
// Method arguments defined in the remote interface MUST be
// of valid types for RMI/IIOP.
//
// Method return values defined in the remote interface MUST
// be of valid types for RMI/IIOP.
//
// Methods defined in the remote interface MUST include
// java.rmi.RemoteException in their throws clause.
//
// Spec 7.10.5
//
Iterator it = Arrays.asList(remote.getMethods()).iterator();
while (it.hasNext())
{
Method method = (Method)it.next();
if (!hasLegalRMIIIOPArguments(method))
{
fireSpecViolationEvent(session, method, new Section("7.10.5.b1"));
status = false;
}
if (!hasLegalRMIIIOPReturnType(method))
{
fireSpecViolationEvent(session, method, new Section("7.10.5.b2"));
status = false;
}
if (!throwsRemoteException(method))
{
fireSpecViolationEvent(session, method, new Section("7.10.5.b3"));
status = false;
}
}
// For each method defined in the remote interface, there MUST be
// a matching method in the session bean's class. The matching
// method MUST have:
//
// - the same name
// - the same number and types of arguments, and the same
// return type
// - All the exceptions defined in the throws clause of the
// matching method of the session bean class must be defined
// in the throws clause of the method of the remote interface
//
// Spec 7.10.5
//
it = Arrays.asList(remote.getDeclaredMethods()).iterator();
while (it.hasNext())
{
Method remoteMethod = (Method)it.next();
if (!hasMatchingMethod(bean, remoteMethod))
{
fireSpecViolationEvent(session, remoteMethod,
new Section("7.10.5.d1"));
status = false;
}
if (hasMatchingMethod(bean, remoteMethod))
{
try
{
Method beanMethod = bean.getMethod(remoteMethod.getName(),
remoteMethod.getParameterTypes());
if (!hasMatchingReturnType(remoteMethod, beanMethod))
{
fireSpecViolationEvent(session, remoteMethod,
new Section("7.10.5.d2"));
status = false;
}
if (!hasMatchingExceptions(beanMethod, remoteMethod))
{
fireSpecViolationEvent(session, remoteMethod,
new Section("7.10.5.d3"));
status = false;
}
}
catch (NoSuchMethodException ignored)
{
}
}
}
return status;
}
|