The service locator will be activated if it is deployed into a OSGi container. We just need to use the locator as a fall back, it's a common solution in ServiceMix API wrapper.

On 10/9/10 3:44 PM, Johan Edstrom wrote:
Willem,

If that fix goes in, how do you suggest we mix/match this in code in camel?
Is there a good pattern to check if we are "running" in osgi?



On Oct 9, 2010, at 1:01 AM, Willem Jiang wrote:

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

Johan Edstrom

[email protected]

They that can give up essential liberty to purchase a little temporary safety, 
deserve neither liberty nor safety.

Benjamin Franklin, Historical Review of Pennsylvania, 1759








--
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