[ 
https://issues.apache.org/jira/browse/ONAMI-88?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13618021#comment-13618021
 ] 

Mikhail Mazursky commented on ONAMI-88:
---------------------------------------

I experimented a bit with catching RuntimeException and wrapping it in 
ProvisionException vs just letting exception propagate. I used existing code in 
UUIDConverter as a testcase. So, the current behaviour (catch&wrap) results in 
this output (i obused a test in other project for experiments - don't take it 
into account):

com.google.inject.ConfigurationException: Guice configuration errors:

1) String value 'abcasd' is not a valid UUID
  while locating java.util.UUID annotated with 
@com.google.inject.name.Named(value=a)
    for field at 
org.apache.onami.converters.net.URLConverterTestCase.u(URLConverterTestCase.java:43)
  while locating org.apache.onami.converters.net.URLConverterTestCase

1 error
        at 
com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1004)
        [...]
Caused by: java.lang.IllegalArgumentException: Invalid UUID string: abcasd
        at java.util.UUID.fromString(UUID.java:194)
        [...]

If we don't catch - this is the output:

com.google.inject.ConfigurationException: Guice configuration errors:

1) Error converting 'abcasd' (bound at 
org.apache.onami.converters.net.URLConverterTestCase$1.configure(URLConverterTestCase.java:54))
 to java.util.UUID
 using java.util.UUID which matches only(java.util.UUID) (bound at 
org.apache.onami.converters.core.AbstractConverter.configure(AbstractConverter.java:44)).
 Reason: java.lang.IllegalArgumentException: Invalid UUID string: abcasd
  while locating java.util.UUID annotated with 
@com.google.inject.name.Named(value=a)
    for field at 
org.apache.onami.converters.net.URLConverterTestCase.u(URLConverterTestCase.java:43)
  while locating org.apache.onami.converters.net.URLConverterTestCase

1 error
        at 
com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1004)
        [...]
Caused by: java.lang.IllegalArgumentException: Invalid UUID string: abcasd
        at java.util.UUID.fromString(UUID.java:194)
        [...]

As you can see, wrapping in ProvisionException gives us less information - 
apparently Guice treats ProvisionException somehow not like other exceptions. I 
propose to get rid of wrapping in ProvisionException and wrap only checked 
exceptions in RuntimeException where necessary. WDYT?
                
> Consistent policy for exception handling
> ----------------------------------------
>
>                 Key: ONAMI-88
>                 URL: https://issues.apache.org/jira/browse/ONAMI-88
>             Project: Apache Onami
>          Issue Type: Improvement
>          Components: configuration
>    Affects Versions: configuration-6.3.0
>            Reporter: Mikhail Mazursky
>            Priority: Minor
>
> No consistent policy for exception handling - for example 
> SQLTimestampConverter catches Throwable and rethrows it as ProvisionException 
> but CharsetConverter do not catch anything at all. Should we catch at all or 
> Guice handles this itself?
> I guess we should rethrow only checked exceptions. Also no need to catch 
> Errors in such places in any case (catch Exception vs Throwable).

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to