[ 
https://issues.apache.org/jira/browse/CAMEL-7344?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Aki Yoshida updated CAMEL-7344:
-------------------------------

    Description: 
CAMEL-6130 seems to have introduced this issue or more precisely speaking, it 
has made this issue visible.

DefaultEndpoint's toString() method seems to require its endpoint string value 
to be set. If it's not set, the toString method throws an exception. A fully 
built endpoint always has its endpoint string value set, thus there is no 
issue. However, an endpoint being manually set up may not have its endpoint 
string value set from the beginning (e.g., when its super class uses the 
DefaultEndpoint's default constructor to instantiate using a bean based 
instantiation).

The debug log statement introduced in CAMEL-6130 invokes this toString method 
during the endpoint setup.

That means, a spring based CXF endpoint may result in the following exception 
under the debug mode.

SLF4J: Failed toString() invocation on an object of type 
[org.apache.camel.component.cxf.CxfSpringEndpoint]
java.lang.IllegalArgumentException: endpointUri is not specified and 
org.apache.camel.component.cxf.CxfSpringEndpoint does not implement 
createEndpointUri() to create a default value
at 
org.apache.camel.impl.DefaultEndpoint.getEndpointUri(DefaultEndpoint.java:154)
at org.apache.camel.impl.DefaultEndpoint.toString(DefaultEndpoint.java:139)
at 
org.slf4j.helpers.MessageFormatter.safeObjectAppend(MessageFormatter.java:304)
at 
org.slf4j.helpers.MessageFormatter.deeplyAppendParameter(MessageFormatter.java:276)
at org.slf4j.helpers.MessageFormatter.arrayFormat(MessageFormatter.java:230)
at org.slf4j.impl.Log4jLoggerAdapter.debug(Log4jLoggerAdapter.java:271)
at 
org.apache.camel.util.IntrospectionSupport.setProperty(IntrospectionSupport.java:528)
at 
org.apache.camel.util.IntrospectionSupport.setProperty(IntrospectionSupport.java:570)
at 
org.apache.camel.util.IntrospectionSupport.setProperties(IntrospectionSupport.java:454)
at org.apache.camel.util.EndpointHelper.setProperties(EndpointHelper.java:249)
at 
org.apache.camel.component.cxf.CxfEndpoint.setCamelContext(CxfEndpoint.java:840)

I  wonder whether we really need DefaultEndpoint's getEndpointUri() to throw an 
exception when it's endpoint string value is not set. But if we keep this rule, 
we must catch the exception in its toString() method so that we won't throw the 
above exception when the toString() method is called during the endpoint setup

I would propose to add the exception catching in the toString method. If we 
decide to change the getEndpointUri() method to not throw the exception (that 
change will likely require the NPE check at the users of this method), we can 
make that change and remove the exception catch from the toString method

This issue affects camel 2.11.0 and later versions.

  was:
CAMEL-6130 seems to have introduced this issue or more precisely speaking, it 
has made this issue visible.

DefaultEndpoint's toString() method seems to require its endpoint string value 
to be set. If it's not set, the toString method throws an exception. A fully 
built endpoint always has its endpoint string value set, thus there is no 
issue. However, an endpoint being manually set up may not have its endpoint 
string value set from the beginning (e.g., when its super class uses the 
DefaultEndpoint's default constructor to instantiate using a bean based 
instantiation).

The debug log statement introduced in CAMEL-6130 invokes this toString method 
during the endpoint setup.

That means, a spring based CXF endpoint may result in the following exception 
under the debug mode.

SLF4J: Failed toString() invocation on an object of type 
[org.apache.camel.component.cxf.CxfSpringEndpoint]
java.lang.IllegalArgumentException: endpointUri is not specified and 
org.apache.camel.component.cxf.CxfSpringEndpoint does not implement 
createEndpointUri() to create a default value
at 
org.apache.camel.impl.DefaultEndpoint.getEndpointUri(DefaultEndpoint.java:154)
at org.apache.camel.impl.DefaultEndpoint.toString(DefaultEndpoint.java:139)
at 
org.slf4j.helpers.MessageFormatter.safeObjectAppend(MessageFormatter.java:304)
at 
org.slf4j.helpers.MessageFormatter.deeplyAppendParameter(MessageFormatter.java:276)
at org.slf4j.helpers.MessageFormatter.arrayFormat(MessageFormatter.java:230)
at org.slf4j.impl.Log4jLoggerAdapter.debug(Log4jLoggerAdapter.java:271)
at 
org.apache.camel.util.IntrospectionSupport.setProperty(IntrospectionSupport.java:528)
at 
org.apache.camel.util.IntrospectionSupport.setProperty(IntrospectionSupport.java:570)
at 
org.apache.camel.util.IntrospectionSupport.setProperties(IntrospectionSupport.java:454)
at org.apache.camel.util.EndpointHelper.setProperties(EndpointHelper.java:249)
at 
org.apache.camel.component.cxf.CxfEndpoint.setCamelContext(CxfEndpoint.java:840)

I  wonder whether we really need DefaultEndpoint's getEndpointUri() to throw an 
exception when it's endpoint string value is not set. But if we keep this rule, 
we must catch the exception in its toString() method so that we won't throw the 
above exception when this toString() method is  called during the endpoint is 
being set up

.I would propose to do the catching in toString method. If we decide to change 
the getEndpointUri() method to not throw the exception (that change probably 
will require the NPE check at the users of this method), we can make that 
change and revert the exception catch of the toString.

This issue occurs from 2.11.0.


> Some endpoints configured using beans may result in NPE under DEBUG mode
> ------------------------------------------------------------------------
>
>                 Key: CAMEL-7344
>                 URL: https://issues.apache.org/jira/browse/CAMEL-7344
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 2.11.4, 2.12.3, 2.13.0
>            Reporter: Aki Yoshida
>            Assignee: Aki Yoshida
>
> CAMEL-6130 seems to have introduced this issue or more precisely speaking, it 
> has made this issue visible.
> DefaultEndpoint's toString() method seems to require its endpoint string 
> value to be set. If it's not set, the toString method throws an exception. A 
> fully built endpoint always has its endpoint string value set, thus there is 
> no issue. However, an endpoint being manually set up may not have its 
> endpoint string value set from the beginning (e.g., when its super class uses 
> the DefaultEndpoint's default constructor to instantiate using a bean based 
> instantiation).
> The debug log statement introduced in CAMEL-6130 invokes this toString method 
> during the endpoint setup.
> That means, a spring based CXF endpoint may result in the following exception 
> under the debug mode.
> SLF4J: Failed toString() invocation on an object of type 
> [org.apache.camel.component.cxf.CxfSpringEndpoint]
> java.lang.IllegalArgumentException: endpointUri is not specified and 
> org.apache.camel.component.cxf.CxfSpringEndpoint does not implement 
> createEndpointUri() to create a default value
> at 
> org.apache.camel.impl.DefaultEndpoint.getEndpointUri(DefaultEndpoint.java:154)
> at org.apache.camel.impl.DefaultEndpoint.toString(DefaultEndpoint.java:139)
> at 
> org.slf4j.helpers.MessageFormatter.safeObjectAppend(MessageFormatter.java:304)
> at 
> org.slf4j.helpers.MessageFormatter.deeplyAppendParameter(MessageFormatter.java:276)
> at org.slf4j.helpers.MessageFormatter.arrayFormat(MessageFormatter.java:230)
> at org.slf4j.impl.Log4jLoggerAdapter.debug(Log4jLoggerAdapter.java:271)
> at 
> org.apache.camel.util.IntrospectionSupport.setProperty(IntrospectionSupport.java:528)
> at 
> org.apache.camel.util.IntrospectionSupport.setProperty(IntrospectionSupport.java:570)
> at 
> org.apache.camel.util.IntrospectionSupport.setProperties(IntrospectionSupport.java:454)
> at org.apache.camel.util.EndpointHelper.setProperties(EndpointHelper.java:249)
> at 
> org.apache.camel.component.cxf.CxfEndpoint.setCamelContext(CxfEndpoint.java:840)
> I  wonder whether we really need DefaultEndpoint's getEndpointUri() to throw 
> an exception when it's endpoint string value is not set. But if we keep this 
> rule, we must catch the exception in its toString() method so that we won't 
> throw the above exception when the toString() method is called during the 
> endpoint setup
> I would propose to add the exception catching in the toString method. If we 
> decide to change the getEndpointUri() method to not throw the exception (that 
> change will likely require the NPE check at the users of this method), we can 
> make that change and remove the exception catch from the toString method
> This issue affects camel 2.11.0 and later versions.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to