Unnecessary TcpTransportFactory NumberFormatException and warning
-----------------------------------------------------------------

                 Key: AMQ-2256
                 URL: https://issues.apache.org/activemq/browse/AMQ-2256
             Project: ActiveMQ
          Issue Type: Bug
          Components: Transport
    Affects Versions: 5.2.0
         Environment: Windows XP
            Reporter: Scott Lewis


When executing TcpTransportFactory.createTransport(URI location, WireFormat wf) 
the following warning is incorrectly generated:

WARNING: path isn't a valid local location for TcpTransport to use
java.lang.NumberFormatException: For input string: "/exampleTopic"
        at 
java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
        at java.lang.Integer.parseInt(Integer.java:447)
        at java.lang.Integer.parseInt(Integer.java:497)
        at 
org.apache.activemq.transport.tcp.TcpTransportFactory.createTransport(TcpTransportFactory.java:125)
        at 
org.apache.activemq.transport.TransportFactory.doConnect(TransportFactory.java:141)
        at 
org.apache.activemq.transport.TransportFactory.doConnect(TransportFactory.java:51)
        at 
org.apache.activemq.transport.TransportFactory.connect(TransportFactory.java:80)
        at 
org.apache.activemq.ActiveMQConnectionFactory.createTransport(ActiveMQConnectionFactory.java:237)
        at 
org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:252)
        at 
org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:224)
        at 
org.apache.activemq.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:172)
...

With the topic name set to "/exampleTopic"

The code responsible for this looks like:

        URI localLocation = null;
        String path = location.getPath();
        // see if the path is a local URI location
        if (path != null && path.length() > 0) {
            int localPortIndex = path.indexOf(':');
            try {
                Integer.parseInt(path.substring(localPortIndex + 1, 
path.length()));
                String localString = location.getScheme() + ":/" + path;
                localLocation = new URI(localString);
            } catch (Exception e) {
                LOG.warn("path isn't a valid local location for TcpTransport to 
use", e);
            }
        }
        SocketFactory socketFactory = createSocketFactory();
        return createTcpTransport(wf, socketFactory, location, localLocation);
    }


The problem seems to be that for the path="/exampleTopic", the following line:

           int localPortIndex = path.indexOf(':');

returns -1 (no colon and no port specified in path

and the subsequent line:

             Integer.parseInt(path.substring(localPortIndex + 1, 
path.length()));
  
generates the NumberFormatException (because the path does not have any 
integer).

It seems that perhaps there should be some test like:

if (localPortIndex != -1) {
...
}

I will create a patch if desired.  Just LMK.




-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to