[ 
https://issues.apache.org/jira/browse/CAMEL-4857?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13288937#comment-13288937
 ] 

Hadrian Zbarcea commented on CAMEL-4857:
----------------------------------------

@Babak,

Although we never were 100% backward compatible in minor releases, the intent 
is to be 100% backwards compatible. The incompatibility only crept in, I 
believe, because there are no unit tests for enough variations of URIs. When 
the changes got committed all the tests passed and it's not like existing tests 
were deleted or we introduced incompatibilities on purpose. We do strive to be 
100% backwards compatible on patch releases though and we are, with very rare 
exceptions.

I was the one publishing that release, and believe it or not, vanity wasn't 
among the reasons. Sad? Maybe. I have a long list myself. 

That said, I totally agree that the the camel-core should be more stable and 
less incompatibilities should be introduced on minor releases. We can discuss 
on dev@ if and how this could be achieved.

                
> Endpoint URI normalization: information in path is lost
> -------------------------------------------------------
>
>                 Key: CAMEL-4857
>                 URL: https://issues.apache.org/jira/browse/CAMEL-4857
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 2.9.0
>            Reporter: Alexander Azarov
>            Assignee: Claus Ibsen
>             Fix For: Future
>
>
> 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):
> {code:title=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);
>   }
> }
> {code} 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to