Willem,

That explains it. I did look through the code and noticed the service
locator but couldn't understand how it was used....

Thanks for your help Willem. I posted on the servicemix list to relieve you
a bit since this problem should belong to Servicemix and not Camel (where I
originally posted). But of course, you were here as well :-)

/Bengt

2010/10/9 Willem Jiang <[email protected]>

> Hi Bengt,
>
> I checked the code of servicemix jsr303 bundle, it just include the
> servicemix locator and doesn't use the service locator to find the provider
> for you.
>
> That explain why you get the below exception.
>
>
>  javax.validation.ValidationException: Unable to find a default provider
>
> I will try to do a quick fix today.
>
>
>
> On 10/9/10 6:41 AM, Bengt Rodehav wrote:
>
>> I'm using the servicemix packaging of hibernate-validator and jsr303:
>>
>> *<dependency>*
>> *<groupId>org.apache.servicemix.specs</groupId>*
>> *<artifactId>org.apache.servicemix.specs.jsr303-api-1.0.0</artifactId>
>> *
>> *<version>1.5.0</version>*
>> *</dependency>*
>> *
>> *
>> *<dependency>*
>> *<groupId>org.apache.servicemix.bundles</groupId>*
>> *
>>
>>  <artifactId>org.apache.servicemix.bundles.hibernate-validator</artifactId>*
>> *<version>4.1.0.Final_1</version>*
>> *</dependency>*
>>
>> I use the validator "manually" (not automatically via JPA) as follows:
>> *
>> *
>>
>>  *public static Set<ConstraintViolation<?>>  violations(Object theObject,
>>> Class<?>... theGroups)*
>>>
>>
>> *      throws ConstraintViolationException {*
>>
>> *    /**
>>
>> *     * Perform bean validation*
>>
>> *     */*
>>
>> *    ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
>>
>>> // Throws exception*
>>>
>>
>> *    Validator validator = factory.getValidator();*
>>
>> *    return (Set) validator.validate(theObject, theGroups);*
>>
>> *  }*
>>
>>
>>  The line that creates the ValidatorFactory throws an exception when
>> called
>> from wihin OSGi:
>>
>> javax.validation.ValidationException: Unable to find a default provider
>>
>> at
>>
>>>
>>> javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:264)
>>>
>>
>> at
>>
>>>
>>> javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:111)
>>>
>>
>> at validator.test1.impl.ServiceOne.createEntityOne(ServiceOne.java:17)
>>
>> at validator.test.itest.OsgiTest.createTest(OsgiTest.java:29)
>>
>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>
>> at
>>
>>>
>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>>
>>
>> at
>>
>>>
>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>>
>>
>> at java.lang.reflect.Method.invoke(Method.java:597)
>>
>> at
>>
>>>
>>> org.ops4j.pax.exam.junit.extender.impl.internal.CallableTestMethodImpl.injectContextAndInvoke(CallableTestMethodImpl.java:143)
>>>
>>
>> at
>>
>>>
>>> org.ops4j.pax.exam.junit.extender.impl.internal.CallableTestMethodImpl.call(CallableTestMethodImpl.java:105)
>>>
>>
>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>
>> at
>>
>>>
>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>>
>>
>> at
>>
>>>
>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>>
>>
>> at java.lang.reflect.Method.invoke(Method.java:597)
>>
>> at
>>
>>>
>>> org.ops4j.pax.exam.rbc.internal.RemoteBundleContextImpl.remoteCall(RemoteBundleContextImpl.java:80)
>>>
>>
>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>
>> at
>>
>>>
>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>>
>>
>> at
>>
>>>
>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>>
>>
>> at java.lang.reflect.Method.invoke(Method.java:597)
>>
>> at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
>>
>> at sun.rmi.transport.Transport$1.run(Transport.java:159)
>>
>> at java.security.AccessController.doPrivileged(Native Method)
>>
>> at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
>>
>> at
>> sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
>>
>> at
>>
>>>
>>> sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
>>>
>>
>> at
>>
>>>
>>> sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
>>>
>>
>> at
>>
>>>
>>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
>>>
>>
>> at
>>
>>>
>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
>>>
>>
>> at java.lang.Thread.run(Thread.java:619)
>>
>>
>> When I run the same code outside of OSGi everything works. What am I doing
>> wrong?
>>
>> The test above used Pax-Exam with Felix 3.0.2 but it doesn't seem to
>> matter
>> what OSGi container I use. I've tried different versions of Felix and
>> Equinox but I get the same exception. I suspect I'm doing something wrong
>> but I cannot see what. Can someone help me out?
>>
>> /Bengt
>>
>>
>
> --
> Willem
> ----------------------------------
> Open Source Integration: http://www.fusesource.com
> Blog:    http://willemjiang.blogspot.com (English)
>         http://jnn.javaeye.com (Chinese)
> Twitter: http://twitter.com/willemjiang
>

Reply via email to