1. Camel
  2. CAMEL-4857

Endpoint URI normalization: information in path is lost


    • Type: Bug Bug
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 2.9.0
    • Fix Version/s: 2.11.0
    • Component/s: camel-core
    • Labels:
    • Estimated Complexity:


      A project with a test case is here:

      The test case with the problem description (the problem occured during migration of camel-beanstalk component onto 2.9.0):
      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 {
          protected Endpoint createEndpoint(final String uri, final String remaining, final Map<String, Object> parameters) throws Exception {
            return new MyEndpoint(uri, remaining);
        public void setUp() throws Exception {
          context.addComponent("my", new MyComponent());
        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);
        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);

        Issue Links



            • Assignee:
              Claus Ibsen
              Alexander Azarov
            • Votes:
              0 Vote for this issue
              5 Start watching this issue


              • Created: