You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Hadrian Zbarcea (JIRA)" <ji...@apache.org> on 2012/06/04 21:20:22 UTC
[jira] [Commented] (CAMEL-4857) Endpoint URI normalization:
information in path is lost
[ https://issues.apache.org/jira/browse/CAMEL-4857?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13288831#comment-13288831 ]
Hadrian Zbarcea commented on CAMEL-4857:
----------------------------------------
I beg to differ.
The question is not if Camel is too restrictive, but rather if camel uses URIs or not. What a URI is and isn't is clearly defined by a spec. The changes for CAMEL-4256 were intended to still support the invalid uris we now use in Camel and provide a migration path for 3.0. If some scenarios were missed, that can be fixed.
However the question still remains, does Camel use URIs or not? Today, I wouldn't know how to define the concept of URI flexibility. I totally agree that that component writers should have complete control on how to handle URIs but those should be URIs to start with. That's not the case today, is it?
> 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