See also CXF-6706.

I had to adapt Charles' code. Note the addition of the tccl
management; without it, hibernate fails to find WoodStox, which it
looks for.

/**
 * returns the validatorfactory.
 * @return the singleton validatorfactory
 */
public static synchronized ValidatorFactory getValidatorFactory() {
    ClassLoader oldTccl = Thread.currentThread().getContextClassLoader();
    try {
        // our bundle class loader should have wstx in it, which
Hibernate seems to want.
        
Thread.currentThread().setContextClassLoader(OSGIValidationFactory.class.getClassLoader());
        if (validatorFactory == null) {
            final
ProviderSpecificBootstrap<HibernateValidatorConfiguration>
validationBootStrap = Validation
                    .byProvider(HibernateValidator.class);

            // bootstrap to properly resolve in an OSGi environment
            validationBootStrap

.providerResolver(HibernateValidationOSGIServicesProviderResolver
                            .getInstance());

            final HibernateValidatorConfiguration configure =
validationBootStrap
                    .configure();
            validatorFactory = configure.buildValidatorFactory();
        }
        return validatorFactory;
    } finally {
        Thread.currentThread().setContextClassLoader(oldTccl);
    }
}

On Fri, Dec 11, 2015 at 8:13 AM, Benson Margulies <[email protected]> wrote:
> Other news: the CXF bean validation features almost work. I'm fixing
> https://issues.apache.org/jira/browse/CXF-6705.
>
> On Fri, Dec 11, 2015 at 7:26 AM, Benson Margulies <[email protected]> 
> wrote:
>> The good news is, now I have a test case.
>>
>> https://github.com/benson-basis/cxf-karaf-validation-tc
>>
>> This project demonstrates that Apache CXF 3.1.2 somehow causes
>> Hibernate to go off the rails, failing to find it's EL provider, in
>> Karaf. Without the full-started CXF service, it works fine.
>>
>> I did try something like the proposed workaround in that stackoverflow
>> question, but I can't figure out what classloader is going to work.
>> Karaf claims that no bundle exports the class that Hibernate claims to
>> be looking for.
>>
>>
>> On Fri, Dec 11, 2015 at 3:46 AM, Charlie Mordant <[email protected]> wrote:
>>> Hi Benson,
>>>
>>> You should have a more advanced use case than me ^^.
>>> I fell on this thread:
>>> http://stackoverflow.com/questions/29678113/el-implementation-is-not-found-for-hibernate-validator-in-osgi-container
>>>
>>> So my guess is that:
>>> * Either there's no el provider on the provisionned bundles ( but i doubt,)
>>> * Either we should wrap the hibernate validator jar to be weaved by Aries
>>> spi-fly (that allows to make that bundle's serviceloader working).
>>>
>>> You can also try to bump the HV version (I filled a Jira which seems to be
>>> fixed: https://hibernate.atlassian.net/browse/HV-846).
>>>
>>> Regards,
>>> Charlie
>>>
>>> 2015-12-10 19:10 GMT+01:00 Benson Margulies <[email protected]>:
>>>>
>>>> Next problem:
>>>>
>>>> using your stuff, I get a problem with EL. I think I ran into this
>>>> before. Charlie, does this ring any bells for you?
>>>>
>>>>
>>>> Caused by: java.lang.ExceptionInInitializerError
>>>> at
>>>> org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.interpolateExpression(ResourceBundleMessageInterpolator.java:227)
>>>> at
>>>> org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.interpolateMessage(ResourceBundleMessageInterpolator.java:187)
>>>> at
>>>> org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.interpolate(ResourceBundleMessageInterpolator.java:115)
>>>> at
>>>> org.hibernate.validator.internal.engine.ValidationContext.interpolate(ValidationContext.java:370)
>>>> at
>>>> org.hibernate.validator.internal.engine.ValidationContext.createConstraintViolation(ValidationContext.java:284)
>>>> at
>>>> org.hibernate.validator.internal.engine.ValidationContext.createConstraintViolations(ValidationContext.java:246)
>>>> at
>>>> org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateSingleConstraint(ConstraintTree.java:289)
>>>> at
>>>> org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:133)
>>>> at
>>>> org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:91)
>>>> at
>>>> org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:85)
>>>> at
>>>> org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:478)
>>>> at
>>>> org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:424)
>>>> at
>>>> org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:388)
>>>> at
>>>> org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:340)
>>>> at
>>>> org.hibernate.validator.internal.engine.ValidatorImpl.validate(ValidatorImpl.java:158)
>>>> at
>>>> com.basistech.ws.common.api.options.OptionsValidator.validate(OptionsValidator.java:35)
>>>> at
>>>> com.basistech.ws.common.api.options.ProcessingOptions$Builder.setOptions(ProcessingOptions.java:112)
>>>> at
>>>> com.basistech.ws.frontend.service.AbstractRaasRsService.getProcessingOptions(AbstractRaasRsService.java:750)
>>>> at
>>>> com.basistech.ws.frontend.service.AbstractRaasRsService.processRequest(AbstractRaasRsService.java:582)
>>>> at
>>>> com.basistech.ws.frontend.service.AbstractRaasRsService.processHelper(AbstractRaasRsService.java:210)
>>>> at
>>>> com.basistech.ws.frontend.service.RaasRsLanguageService.runRli(RaasRsLanguageService.java:119)
>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>> at
>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>>>> at
>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>>> at java.lang.reflect.Method.invoke(Method.java:497)
>>>> at
>>>> org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:180)
>>>> at
>>>> org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96)
>>>> ... 36 more
>>>> Caused by: javax.el.ELException: Provider
>>>> com.sun.el.ExpressionFactoryImpl not found
>>>> at javax.el.FactoryFinder.newInstance(FactoryFinder.java:101)
>>>> at javax.el.FactoryFinder.find(FactoryFinder.java:197)
>>>> at javax.el.ExpressionFactory.newInstance(ExpressionFactory.java:197)
>>>> at javax.el.ExpressionFactory.newInstance(ExpressionFactory.java:168)
>>>> at
>>>> org.hibernate.validator.internal.engine.messageinterpolation.InterpolationTerm.&lt;clinit&gt;(InterpolationTerm.java:60)
>>>> ... 63 more
>>>> Caused by: java.lang.ClassNotFoundException:
>>>> com.sun.el.ExpressionFactoryImpl not found by
>>>> org.apache.cxf.cxf-rt-transports-http [110]
>>>> at
>>>> org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1558)
>>>> at
>>>> org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:79)
>>>> at
>>>> org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1998)
>>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
>>>> at org.apache.felix.framework.Felix.loadBundleClass(Felix.java:1919)
>>>> at org.apache.felix.framework.BundleImpl.loadClass(BundleImpl.java:959)
>>>> at
>>>> org.ops4j.pax.swissbox.core.BundleClassLoader.findClass(BundleClassLoader.java:176)
>>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
>>>> at
>>>> org.ops4j.pax.swissbox.core.BundleClassLoader.loadClass(BundleClassLoader.java:192)
>>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
>>>> at javax.el.FactoryFinder.newInstance(FactoryFinder.java:87)
>>>> ... 67 more
>>>> </pre>
>>>>
>>>> On Thu, Dec 10, 2015 at 11:21 AM, Benson Margulies <[email protected]>
>>>> wrote:
>>>> > I ran into a hitch. You're import won't accept guava 16. I guess I'll
>>>> > load up two guavas.
>>>> >
>>>> > On Mon, Dec 7, 2015 at 10:46 AM, Charlie Mordant <[email protected]>
>>>> > wrote:
>>>> >> Hi Benson,
>>>> >>
>>>> >> I got it working making my own validation feature, you can find it
>>>> >> here:
>>>> >>
>>>> >> https://github.com/OsgiliathEnterprise/net.osgiliath.parent/blob/master/net.osgiliath.framework/net.osgiliath.features/net.osgiliath.feature.validation/src/main/resources/net.osgiliath.feature.validation.xml
>>>> >>
>>>> >> Regards,
>>>> >>
>>>> >> 2015-12-07 16:10 GMT+01:00 Benson Margulies <[email protected]>:
>>>> >>>
>>>> >>> I could not get the Hibernate bean validation feature to work in
>>>> >>> 4.0.x. For one thing, it's in the 'enterprise' feature set, which does
>>>> >>> not work at all without extra <repository> elements which I can't
>>>> >>> have. Even when I copied it out, I still couldn't get it to work.
>>>> >>>
>>>> >>> So I made a working feature with Apache Bval. However, the Bval
>>>> >>> project seems to be perpetually asleep, and so I can't get a problem
>>>> >>> with one of their bundles fixed. So, I'm hoping that someone has an
>>>> >>> idea about how to rehab the hibernate solution.
>>>> >>
>>>> >>
>>>> >>
>>>> >>
>>>> >> --
>>>> >> Charlie Mordant
>>>> >>
>>>> >> Full OSGI/EE stack made with Karaf:
>>>> >> https://github.com/OsgiliathEnterprise/net.osgiliath.parent
>>>
>>>
>>>
>>>
>>> --
>>> Charlie Mordant
>>>
>>> Full OSGI/EE stack made with Karaf:
>>> https://github.com/OsgiliathEnterprise/net.osgiliath.parent

Reply via email to