JSR 303 Validation with Spring (MVC) on WebSphere

心已入冬 提交于 2019-12-06 05:25:28

First af all, you have to force to use shipped Hibernate Validator 5 instead of WebLogic one. Just add WEB-INF/validation.xml

<?xml version="1.0" encoding="UTF-8"?>
<validation-config
    xmlns="http://jboss.org/xml/ns/javax/validation/configuration"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/configuration http://www.jboss.org/xml/ns/javax/validation/configuration/validation-configuration-1.0.xsd">

    <default-provider>org.hibernate.validator.HibernateValidator</default-provider>
</validation-config>

Most probably, you need to set classloaderMode to PARENT_LAST in deployment.xml. In case of EAR, it should look like

<?xml version="1.0" encoding="UTF-8"?>
<appdeployment:Deployment xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:appdeployment="http://www.ibm.com/websphere/appserver/schemas/5.0/appdeployment.xmi" xmi:id="Deployment_1">
  <deployedObject xmi:type="appdeployment:ApplicationDeployment" xmi:id="ApplicationDeployment_1" deploymentId="0" startingWeight="1">
    <modules xmi:type="appdeployment:WebModuleDeployment" xmi:id="WebModuleDeployment_1" deploymentId="1" startingWeight="10000" uri="foureyes-ri.war" classloaderMode="PARENT_LAST"/>
  </deployedObject>
</appdeployment:Deployment>

I am not sure, but I pack validation-api 1.1.0 to WAR and it works for me.

I think I finally found a working solution. It appears that I need to explicitly tell the Spring MethodValidationPostProcessor bean to use the container-provided javax.validation.ValidatorFactory, which apparently I can get from a JNDI lookup of "java:comp/ValidatorFactory".

<jee:jndi-lookup id="validatorFactory" jndi-name="java:comp/ValidatorFactory" resource-ref="false"/>

<bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor">
    <property name="validatorFactory" ref="validatorFactory"/>
</bean>

(Incidentally, based on this simple JNDI lookup JSP, in this version of WebSphere, the implementation class is org.apache.bval.jsr303.ApacheValidatorFactory)

Edit: I wrote up this whole process at Blog entry: https://www.ibm.com/developerworks/community/blogs/Dougclectica/entry/Spring_MVC_JSR_303_Validation_and_WebSphere

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!