You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Scott Lewis (JIRA)" <ji...@apache.org> on 2011/02/26 23:13:58 UTC

[jira] Reopened: (AMQ-2256) Unnecessary TcpTransportFactory NumberFormatException and warning

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

Scott Lewis reopened AMQ-2256:
------------------------------


The test case is simply:

new ActiveMQConnectionFactory("tcp://localhost:61616/exampleTopic").createConnection();

The connection is created successfully, bu the NumberFormatException is still being produced to standard error.

Although originally reported on 5.2.0, the same problem exists on 5.3.2 as well (what I happen to be using now).

As stated in the bug, the problem is in TcpTransportFactory.createTransport.  Here is an annotated code fragment that shows the problem (modified slightly from TcpTransportFactory.createTransport)

URI location = new URI("tcp://localhost:61616/exampleTopic");
String path = location.getPath();
// path is "/exampleTopic"
if (path != null && path.length() > 0) {
  int localPortIndex = path.indexOf(':');
// localPortIndex == -1 ...this is wrong, since //exampleTopic has no port in it
  try {
    Integer.parseInt(path.substring(localPortIndex + 1,path.length()));  
// the previous line throws NumberFormatException because path.substring(0.path.length()) does not produce a number, because path is "/exampleTopic"



> Unnecessary TcpTransportFactory NumberFormatException and warning
> -----------------------------------------------------------------
>
>                 Key: AMQ-2256
>                 URL: https://issues.apache.org/jira/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.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira