[ https://issues.apache.org/jira/browse/CAMEL-4857?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13288900#comment-13288900 ]
Babak Vahdat commented on CAMEL-4857: ------------------------------------- IMHO the *CORE* question should not be if Camel uses URIs correctly or not but more important than that if Camel is *REALLY* 100% backward-compatible by it's minor releases which to my understanding is much much more important than to be 100% IETF RFC_XYZ complaint. In this concrete case the user reporting this issue (on Jan. 3rd) was struggeling to upgrade to a newer Camel version a day before (on Jan. 2nd) which then ended up with: https://plus.google.com/103504600126086444972/posts/5q1aFtYLryi @Alexander please correct me if I'm wrong. Anyway, I think this's really sad :-( > 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