blob: 2f2ee93a617aeec0657682114a1e1d3b45e61719 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (c) 1997, 2020 Oracle and/or its affiliates. All rights reserved.
This program and the accompanying materials are made available under the
terms of the Eclipse Public License v. 2.0, which is available at
http://www.eclipse.org/legal/epl-2.0.
This Source Code may also be made available under the following Secondary
Licenses when the conditions for such availability set forth in the
Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
version 2 with the GNU Classpath Exception, which is available at
https://www.gnu.org/software/classpath/license.html.
SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-->
<project name="hello-jsp" default="default" basedir=".">
<property file="build.properties"/>
<property file="${ws.root}/gfproject/${deploy.platform}-config.properties"/>
<description>
Builds, tests, and runs an integration test to verify that the way
glassfish uses JSR-303 Bean Validation is correctly supported by the
implementation of Bean Validation provided in glassfish.
The following classes were examined for usage patterns for JSR 303 Bean
Validation.
connectors/connectors-runtime/src/main/java/com/sun/enterprise/connectors/module/ConnectorDeployer.java
- This class loads validation mappings from an XML file so it can obtain
a jakarta.validation.Validator instance, which it then puts in the
ConnectorRegistry.
In method registerBeanValidator(),
Validator beanValidator = null;
ValidatorFactory validatorFactory = null;
GenericBootstrap bootstrap = Validation.byDefaultProvider();
Configuration config = bootstrap.configure();
InputStream inputStream = null;
for (String fileName : mappingsList) {
inputStream = archive.getEntry(fileName);
config.addMapping(inputStream);
}
validatorFactory = config.buildValidatorFactory();
ValidatorContext validatorContext = validatorFactory.usingContext();
beanValidator = validatorContext.getValidator();
fileName is the name of a file conforming to
xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/mapping validation-mapping-1.0.xsd"
If we don't have a Validator instance after the above, we get a default one:
if (beanValidator == null) {
validatorFactory = Validation.byDefaultProvider().configure().buildValidatorFactory();
beanValidator = validatorFactory.getValidator();
}
ConnectorRegistry registry = ConnectorRegistry.getInstance();
registry.addBeanValidator(rarName, beanValidator);
This validator is used in
connectors/connectors-runtime/src/main/java/com/sun/enterprise/connectors/util/ConnectorJavaBeanValidator.java method validateJavaBean().
public void validateJavaBean(Object bean, String rarName) {
if (bean != null) {
Validator validator = ConnectorRegistry.getInstance().getBeanValidator(rarName);
if (validator != null) {
BeanDescriptor bd =
validator.getConstraintsForClass(bean.getClass());
bd.getConstraintDescriptors();
Class array[] = new Class[]{};
Set constraintViolations = validator.validate(bean, array);
if (constraintViolations != null AND.size() > 0) {
ConstraintViolationException cve = new ConstraintViolationException(constraintViolations);
StringBuffer msg = new StringBuffer();
Iterator it = constraintViolations.iterator();
while (it.hasNext()) {
ConstraintViolation cv = (ConstraintViolation) it.next();
msg.append("\n Bean Class : ").append(cv.getRootBeanClass());
msg.append("\n Bean : ").append(cv.getRootBean());
msg.append("\n Property path : " ).append(cv.getPropertyPath());
msg.append("\n Violation Message : " ).append(cv.getMessage());
}
Object[] args = new Object[]{bean.getClass(), rarName, msg.toString()};
_logger.log(Level.SEVERE, "validation.constraints.violation",args);
throw cve;
}
} else {
if(_logger.isLoggable(Level.FINEST)){
_logger.log(Level.FINEST, "No Bean Validator is available for RAR [ " + rarName + " ]");
}
}
}
</description>
<import file="${ws.root}/gfproject/build-impl.xml"/>
<import file="${ws.root}/gfproject/${deploy.platform}-targets.xml"/>
<target name="all" depends="build,deploy,runtest,undeploy" />
<target name="build-deploy" depends="build,deploy" />
<target name="build" depends="compile-tests">
<antcall target="build-impl"/>
</target>
<target name="deploy">
<antcall target="deploy-${deploy.platform}-impl"/>
</target>
<target name="runtest">
<antcall target="runtest-impl">
<param name="contextroot" value="${contextroot}"/>
<param name="testng.test.name" value="${testng.test.name}"/>
<param name="testng.testclient" value="IntegrationBVServletTestNG"/>
</antcall>
</target>
<target name="undeploy">
<antcall target="undeploy-${deploy.platform}-impl"/>
</target>
</project>