camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jim Newsham <jnews...@referentia.com>
Subject Re: TypeConverterLoaderException in webstart
Date Sat, 28 May 2011 01:07:44 GMT

Hmm... the proposed resolution did not work for me after all.  I'm not 
using xml configuration, so I didn't define the resolver as a bean, 
however it's my understanding that I can call 
context.setPackageScanClassResolver().  For example, my new test code:

       CamelContext context = new DefaultCamelContext();
       context.setPackageScanClassResolver(new 
DoNothingPackageScanClassResolver());
       context.getTypeConverterRegistry();

This causes the same exception as before -- but this time the exception 
occurs when run from my IDE (not webstart).  Seems to make sense to me 
since our resolver returns nothing and the AnnotationTypeConverterLoader 
throws an exception when it finds nothing.

Did I miss something?  I assumed that registering my own type converters 
was optional.

Thanks,
Jim

On 5/26/2011 9:23 PM, Kuhtz, Andreas wrote:
> Hi,
>
> I had the same problem and the solution is easy. Just create a class
> that implements PackageScanClassResolver and define it as bean [1].
> Camel will find it during startup of the context and use this bean
> instead of creating the DefaultPackageScanClassResolver that scans the
> classpath. Maybe you have to register some core TypeConverters manually
> (this has been changed in 2.8-SNAPSHOT).
>
> See my sample class below. Hope this helps.
>
> Cheers Andi
>
> /**
>   * The DoNothingPackageScanClassResolver is a replacement for the
> DefaultPackageScanClassResolver
>   * to solve the problems with starting the client from webstart cache.
>   * You just have to define a bean of this class and camel will replace
> the
>   * DefaultPackageScanClassResolver during startup with this bean.
>   *
>   */
> public class DoNothingPackageScanClassResolver implements
> PackageScanClassResolver {
>
> 	public void setClassLoaders(Set<ClassLoader>  classLoaders) {
> 		// do nothing here
> 	}
>
> 	public Set<ClassLoader>  getClassLoaders() {
>          // return a new set to avoid any concurrency issues in other
> runtimes such as OSGi
>          return Collections.unmodifiableSet(new
> LinkedHashSet<ClassLoader>());
> 	}
>
> 	public void addClassLoader(ClassLoader classLoader) {
> 		// do nothing here
> 	}
>
> 	public Set<Class<?>>  findAnnotated(Class<? extends Annotation>
> annotation,
> 			String... packageNames) {
> 		return new LinkedHashSet<Class<?>>();
> 	}
>
> 	public Set<Class<?>>  findAnnotated(
> 			Set<Class<? extends Annotation>>  annotations,
> 			String... packageNames) {
> 		return new LinkedHashSet<Class<?>>();
> 	}
>
> 	public Set<Class<?>>  findImplementations(Class<?>  parent,
> 			String... packageNames) {
> 		return new LinkedHashSet<Class<?>>();
> 	}
>
> 	public Set<Class<?>>  findByFilter(PackageScanFilter filter,
> 			String... packageNames) {
> 		return new LinkedHashSet<Class<?>>();
> 	}
>
> 	public void addFilter(PackageScanFilter filter) {
> 		// do nothing here
> 	}
>
> 	public void removeFilter(PackageScanFilter filter) {
> 		// do nothing here
> 	}
>
> }
>
> [1]
> http://camel.apache.org/advanced-configuration-of-camelcontext-using-spr
> ing.html
>
> -----Original Message-----
> From: Jim Newsham [mailto:jnewsham@referentia.com]
> Sent: Freitag, 27. Mai 2011 04:55
> To: users@camel.apache.org
> Subject: TypeConverterLoaderException in webstart
>
>
> We've come across a problem in Camel 2.7.1 where Camel fails to start up
>
> due to a TypeConverterLoaderException.  This is a regression, as we've
> had no such problem in Camel 2.5.0.  Is this a known issue?  Googling
> around, I've found [1], which states:
>
>>   My second problem is that it's currently not possible to start camel
>>   without the AnnotationTypeConverterLoader added. In case of a
> webstart
>>   based client application this causes startup errors that prevents
> using
>>   camel.
>>   I added an attribute to suppress the usage of
>>   AnnotationTypeConverterLoader in my local sources and I've prepared a
>>   patch for this problem and the problem described above with test
> case.
>>   Should I create a JIRA issue?
> I can't say that I understand his description of the problem or his
> fix.  Has a jira issue been created?
>
> My reproduction is simple:
>
>     public static void main(String... args) {
>       try {
>         CamelContext context = new DefaultCamelContext();
>         context.getTypeConverterRegistry();
>
>         LOGGER.info("Success");
>       }
>       catch(Exception e) {
>         LOGGER.error("Failed", e);
>       }
>     }
>
> This runs fine in my ide and fails with [2] when deployed via webstart.
>
> Thanks,
> Jim
>
> [1]
> http://mail-archives.apache.org/mod_mbox/camel-users/201104.mbox/%3C1302
> 240811211-4290078.post@n5.nabble.com%3E
>
> [2] exception:
>
> 2011-05-26 16:52:57,550 [javawsApplicationMain] ERROR
> test.TestCamelContext - Failed
> org.apache.camel.RuntimeCamelException:
> org.apache.camel.TypeConverterLoaderException: Failed to load type
> converters because of: Cannot find any type converter classes from the
> following packages: [org.apache.camel.component.file,
> org.apache.camel.component.bean, org.apache.camel.converter]
>       at
> org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelpe
> r.java:1139)
>       at
> org.apache.camel.impl.DefaultCamelContext.getTypeConverter(DefaultCamelC
> ontext.java:986)
>       at
> org.apache.camel.impl.DefaultCamelContext.getTypeConverterRegistry(Defau
> ltCamelContext.java:1001)
>       at test.TestCamelContext.test(TestCamelContext.java:54)
>       at test.TestCamelContext.main(TestCamelContext.java:48)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>       at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>       at java.lang.reflect.Method.invoke(Unknown Source)
>       at com.sun.javaws.Launcher.executeApplication(Unknown Source)
>       at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
>       at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
>       at com.sun.javaws.Launcher.run(Unknown Source)
>       at java.lang.Thread.run(Unknown Source)
> Caused by: org.apache.camel.TypeConverterLoaderException: Failed to load
>
> type converters because of: Cannot find any type converter classes from
> the following packages: [org.apache.camel.component.file,
> org.apache.camel.component.bean, org.apache.camel.converter]
>       at
> org.apache.camel.impl.converter.AnnotationTypeConverterLoader.load(Annot
> ationTypeConverterLoader.java:79)
>       at
> org.apache.camel.impl.converter.BaseTypeConverterRegistry.loadTypeConver
> ters(BaseTypeConverterRegistry.java:395)
>       at
> org.apache.camel.impl.converter.DefaultTypeConverter.doStart(DefaultType
> Converter.java:41)
>       at
> org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:67)
>       at
> org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:54)
>       at
> org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:60)
>       at
> org.apache.camel.impl.DefaultCamelContext.startServices(DefaultCamelCont
> ext.java:1613)
>       at
> org.apache.camel.impl.DefaultCamelContext.addService(DefaultCamelContext
> .java:899)
>       at
> org.apache.camel.impl.DefaultCamelContext.getTypeConverter(DefaultCamelC
> ontext.java:984)
>       ... 12 more
>


Mime
View raw message