You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Zoltan Farkas (JIRA)" <ji...@apache.org> on 2016/08/04 18:45:20 UTC

[jira] [Commented] (CAMEL-10165) DefaultCxfMessageMapper.getBasePath creates a incorrect http path

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

Zoltan Farkas commented on CAMEL-10165:
---------------------------------------


basically all routes from jetty 9 to cxf 3.1.5 like:

{code}
    from("jetty:http://{{http.host}}:{{http.port}}/somePath?matchOnUriPrefix=true")
        .to("cxfbean:someJaxRSService");

{code}

were was not finding destination anymore after the 2.17.2 upgrade (from 2.14.4). (404)
All unit tests that were testing routes like above were failing, however they are unfortunately proprietary code coupled to a lot of non camel stuff...

if I would be to write a unit test to reproduce this that would depend solely on camel, camel-jetty9 and camel-cxf what would be the right place to put it in?

I patched the getBaseBath method in DefaultCxfMessageMapper to get past this issue for now.


> DefaultCxfMessageMapper.getBasePath creates a incorrect http path
> -----------------------------------------------------------------
>
>                 Key: CAMEL-10165
>                 URL: https://issues.apache.org/jira/browse/CAMEL-10165
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-cxf
>    Affects Versions: 2.17.2
>            Reporter: Zoltan Farkas
>
> in DefaultCxfMessageMapper.java:
> {code}
>     protected String getBasePath(Exchange camelExchange) {
>         String answer = camelExchange.getIn().getHeader(Exchange.HTTP_BASE_URI, String.class);
>         if (answer == null) {
>             answer = camelExchange.getFromEndpoint().getEndpointUri();
>         }        
>         return answer;
>     }
> {code}
> camelExchange.getFromEndpoint().getEndpointUri()
> in 2.14 returns a valid http URL for the jetty endpoint...]
> meanwhile in 2.17 it return a camel url that includes the scheme and it breaks the semantics of this method. I had to change the method to:
> {code}
>     protected String getBasePath(Exchange camelExchange) {
>         String answer = camelExchange.getIn().getHeader(Exchange.HTTP_BASE_URI, String.class);
>         if (answer == null) {
>             Endpoint fromEndpoint = camelExchange.getFromEndpoint();
>             if (fromEndpoint instanceof HttpCommonEndpoint) {
>               try {
>                 URI u = ((HttpCommonEndpoint) fromEndpoint). getHttpUri();
>                 answer = new URI(u.getScheme(), u.getUserInfo(), u.getHost(), u.getPort(), u.getPath(),
>                         null, null).toString();
>               } catch (URISyntaxException ex) {
>                 throw new RuntimeException(ex);
>               }
>             } else {
>               return null;
>             }
>         }
>         return answer;
>     }
> {code}
> I am not sure this is the best way to deal with this, but it works...



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)