Uploaded image for project: 'Camel'
  1. Camel
  2. CAMEL-4857

Endpoint URI normalization: information in path is lost

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 2.9.0
    • 2.11.0
    • camel-core
    • None
    • Unknown

    Description

      A project with a test case is here: https://github.com/alaz/camel290_uri

      The test case with the problem description (the problem occured during migration of camel-beanstalk https://github.com/osinka/camel-beanstalk component onto 2.9.0):

      UriTest.java
      package camel290.uri;
      
      import java.util.Map;
      import org.apache.camel.Consumer;
      import org.apache.camel.Endpoint;
      import org.apache.camel.Processor;
      import org.apache.camel.Producer;
      import org.apache.camel.impl.DefaultComponent;
      import org.apache.camel.impl.DefaultEndpoint;
      import org.apache.camel.test.CamelTestSupport;
      import org.junit.Before;
      import org.junit.Test;
      import static org.junit.Assert.*;
      
      public class UriTest extends CamelTestSupport {
      
        /**
         * An URI of Camel Beanstalk component consists of a hostname, port and a list
         * of tube names. Tube names are separated by "+" character (which is more or less
         * usualy used on the Web to make lists), but every tube name may contain URI special
         * characters like ? or +
         */
      
        class MyEndpoint extends DefaultEndpoint {
          String uri = null;
          String remaining = null;
      
          public MyEndpoint(final String uri, final String remaining) {
            this.uri = uri;
            this.remaining = remaining;
          }
      
          public Producer createProducer() throws Exception {
            throw new UnsupportedOperationException("Not supported yet.");
          }
      
          public Consumer createConsumer(Processor prcsr) throws Exception {
            throw new UnsupportedOperationException("Not supported yet.");
          }
      
          public boolean isSingleton() {
            return true;
          }
        }
      
        class MyComponent extends DefaultComponent {
          @Override
          protected Endpoint createEndpoint(final String uri, final String remaining, final Map<String, Object> parameters) throws Exception {
            return new MyEndpoint(uri, remaining);
          }
        }
      
        @Before
        @Override
        public void setUp() throws Exception {
          super.setUp();
          context.addComponent("my", new MyComponent());
        }
      
        @Test
        public void testExclamationInUri() {
          /**
           * %3F is not an ?, it's part of tube name.
           */
          MyEndpoint endpoint = context.getEndpoint("my:host:11303/tube1+tube%2B+tube%3F", MyEndpoint.class);
          assertNotNull("endpoint", endpoint);
        }
      
        @Test
        public void testPath() {
          /**
           * Here a tube name is "tube+" and written in URI as "tube%2B", but it gets
           * normalized, so that an endpoint sees "tube1+tube+"
           */
          MyEndpoint endpoint = context.getEndpoint("my:host:11303/tube1+tube%2B", MyEndpoint.class);
          assertEquals("Path contains several tube names, every tube name may have + or ? characters", "host:11303/tube1+tube%2B", endpoint.remaining);
        }
      }
      

      Attachments

        1. CAMEL-4857.patch
          17 kB
          Claus Ibsen

        Issue Links

          Activity

            People

              davsclaus Claus Ibsen
              azarov Alexander Azarov
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: