Skip to content

Guice 4.0b: CreationException hidden by Guava $ComputationException #782

@gissuebot

Description

@gissuebot

From tebulin on November 22, 2013 07:54:11

Description of the issue: Every time my Guice mapping is borked I'm completely helpless, because I'll only receive a IllegalArgumentException instead of the root cause com.google.inject.CreationException.

The issue is, that the .toString() Method of the CreationException leads to another com.google.inject.internal.guava.collect.$ComputationException: java.lang.IllegalArgumentException on executing Errors.format()

I'm only able to read the original exception by setting a breakpoint there. Steps to reproduce: 1. Create an illegal / missing injection with guice-servlet in Tomcat 7  and Guice 4 Beta
2. Build a Guice Injector in the contextInitialized() method of a GuiceServletContextListener
3. Instead of a meaningful CreationException you'll receive an IllegalArgumentException.

com.google.inject.internal.guava.collect.$ComputationException: java.lang.IllegalArgumentException
        at com.google.inject.internal.guava.collect.$ComputingConcurrentHashMap$ComputingMapAdapter.get(ComputingConcurrentHashMap.java:397)
        at com.google.inject.internal.util.StackTraceElements.forMember(StackTraceElements.java:56)
        at com.google.inject.internal.Errors.formatInjectionPoint(Errors.java:729)
        at com.google.inject.internal.Errors.formatSource(Errors.java:691)
        at com.google.inject.internal.Errors.format(Errors.java:568)
        at com.google.inject.CreationException.getMessage(CreationException.java:50)
        at foo.bar.MyGuiceServletContextListener.contextInitialized(MyGuiceServletContextListener.java:75)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4887)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5381)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
        at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1552)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
        at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
        at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:622)
        at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:569)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
        at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
        at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1466)
        at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
        at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1307)
        at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1399)
        at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:828)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:323)
        at sun.rmi.transport.Transport$1.run(Transport.java:178)
        at sun.rmi.transport.Transport$1.run(Transport.java:175)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.rmi.transport.Transport.serviceCall(Transport.java:174)
        at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:557)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:812)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.r...

Original issue: http://code.google.com/p/google-guice/issues/detail?id=782

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions