camel-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Zoltan Farkas (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CAMEL-10165) DefaultCxfMessageMapper.getBasePath creates a incorrect http path
Date Thu, 04 Aug 2016 18:45:20 GMT

    [ 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)

Mime
View raw message