users@jaxb.java.net

Why the Injector.class swallows the InvocationTargetException.

From: Jeff.Yu <jeff.yu_at_iona.com>
Date: Tue, 14 Aug 2007 19:15:03 +0800

Hi,

I have an application that uses the JAXB, and when I set the Log level
as FINE, I got following log, but the functionality is ok, so I dig into
code, and found the Injector.class swallows the
InvocationTargetException, and just simply return null, so here the
question is: Is this kind of error is expected? or can someone help me
explain why I got below error stack.

Thanks
Jeff

-------------------------------------------------------------------
FINE: Unable to inject
com/test/schemas/dbservice/config/ConnectionType$JaxbAccessorF_driverClass
java.lang.reflect.InvocationTargetException
    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:585)
    at
com.sun.xml.bind.v2.runtime.reflect.opt.Injector.inject(Injector.java:125)
    at
com.sun.xml.bind.v2.runtime.reflect.opt.Injector.inject(Injector.java:48)
    at
com.sun.xml.bind.v2.runtime.reflect.opt.AccessorInjector.prepare(AccessorInjector.java:51)
    at
com.sun.xml.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.get(OptimizedAccessorFactory.java:128)
    at
com.sun.xml.bind.v2.runtime.reflect.Accessor$FieldReflection.optimize(Accessor.java:204)
    at
com.sun.xml.bind.v2.runtime.reflect.TransducedAccessor$CompositeTransducedAccessorImpl.<init>(TransducedAccessor.java:195)
    at
com.sun.xml.bind.v2.runtime.reflect.TransducedAccessor.get(TransducedAccessor.java:137)
    at
com.sun.xml.bind.v2.runtime.property.SingleElementLeafProperty.<init>(SingleElementLeafProperty.java:47)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
    at
com.sun.xml.bind.v2.runtime.property.PropertyFactory.create(PropertyFactory.java:88)
    at
com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.<init>(ClassBeanInfoImpl.java:135)
    at
com.sun.xml.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:432)
    at
com.sun.xml.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:451)
    at
com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.<init>(SingleElementNodeProperty.java:63)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
    at
com.sun.xml.bind.v2.runtime.property.PropertyFactory.create(PropertyFactory.java:88)
    at
com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.<init>(ClassBeanInfoImpl.java:135)
    at
com.sun.xml.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:432)
    at
com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:265)
    at
com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:76)
    at
com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:55)
    at
com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:124)
    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:585)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:132)
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:286)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:372)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:337)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:244)
    at
com.test.services.dbservice.config.DbConfiguration.<init>(DbConfiguration.java:46)
Caused by: java.lang.LinkageError: duplicate class definition:
com/test/schemas/dbservice/config/ConnectionType$JaxbAccessorF_driverClass
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:465)


--------------------------------------------------------------------------------------------
Injector.java

 private synchronized Class inject(String className, byte[] image) {
        Class c = classes.get(className);
        if(c==null) {
            // we need to inject a class into the
            try {
                c =
(Class)defineClass.invoke(parent,className.replace('/','.'),image,0,image.length);
                resolveClass.invoke(parent,c);
            } catch (IllegalAccessException e) {
                logger.log(Level.FINE,"Unable to inject "+className,e);
                return null;
            } catch (InvocationTargetException e) {
                logger.log(Level.FINE,"Unable to inject "+className,e);
                return null;
            } catch (SecurityException e) {
                logger.log(Level.FINE,"Unable to inject "+className,e);
                return null;
            }
            classes.put(className,c);
        }
        return c;
    }