camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sergey Beryozkin <sberyoz...@gmail.com>
Subject Re: URL overwriting - SOAP vs restful
Date Wed, 13 Feb 2013 16:41:31 GMT
Actually, you mentioned that

 >> Map<String, Object> requestContext = new HashMap<String, Object>();
 >> 
requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,endPointURL);
 >>
 >> exchange.getOut().setHeader(Client.REQUEST_CONTEXT, requestContext);

actually affects the RS path too - I can see WS & RS request context 
property is actually named identically (in CXF code). So give it another 
try with the above code but replace

requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,endPointURL);

with

requestContext.put("org.apache.cxf.request.uri",endPointURL);

and possibly add

requestContext.put(Message.ENDPOINT_ADDRESS,endPointURL);


if that does not work then then we can take it offline to minimize the 
noise - actually, if that does not work still - have a look in the 
debugger and make sure that whatever properties are set there which make 
the invocation work as expected are reset to the new values and not 
lost, AFAIK, CXF RS runtime has a default request context on the message 
already set...so may be you have to do

exchange.getOut().getHeader(Client.REQUEST_CONTEXT) and if the context 
is not null then update request uri and endpoint address on it

Cheers, Sergey

On 13/02/13 16:15, Sergey Beryozkin wrote:
> Hi,
> On 13/02/13 15:45, jdev.hari wrote:
>> Hi,
>>
>> I define my end point in camel context xml and during runtime I override
>> them as I get it from a Service catalogue service.
>>
>> For SOAP webservice invocations, I am able to do the following in a
>> processor just before the cxf bean invocation.
>>
>> Map<String, Object> requestContext = new HashMap<String, Object>();
>> requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,endPointURL);
>>
>> exchange.getOut().setHeader(Client.REQUEST_CONTEXT, requestContext);
>>
>> And this works as well. However if I try to do the same with restful
>> services. I get the following error (note, without overriding the call
>> goes
>> through fine with restful services)
>>
> BindingProvider.ENDPOINT_ADDRESS_PROPERTY is not recognized by the
> client RS runtime, can you try
>
> final String REQUEST_URI = "org.apache.cxf.request.uri";
> exchange.getOut().setHeader(REQUEST_URI, endPointURL);
>
> Not sure if it will work in Camel right now, though I'm pretty sure we
> have a CXF test for changing the original address, let me know please
>
> Cheers, Sergey
>
>> Caused by: org.apache.camel.component.cxf.CxfOperationException: JAXRS
>> operation failed invoking direct://matching with statusCode: 404
>> at
>> org.apache.camel.component.cxf.jaxrs.CxfRsProducer.populateCxfRsProducerException(CxfRsProducer.java:317)
>>
>> at
>> org.apache.camel.component.cxf.jaxrs.CxfRsProducer.invokeHttpClient(CxfRsProducer.java:177)
>>
>> at
>> org.apache.camel.component.cxf.jaxrs.CxfRsProducer.process(CxfRsProducer.java:87)
>>
>> at
>> org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
>>
>>
>> I turned on the outgoing Webservice logging interceptor and I see the
>> following
>>
>> INFO : Outbound Message
>> ---------------------------
>> ID: 4
>> Address: http://localhost:9084/yyy/services/ABC
>> Content-Type: */*
>> Headers:
>> {RequestContext=[{javax.xml.ws.service.endpoint.address=http://xxx:9080/yyy/services/ABC}],
>>
>> Content-Type=[*/*], Connection=[Keep-Alive], Accept=[*/*]}
>> --------------------------------------
>>
>>
>> The URL http://locahost:9084/yyy/services/ABC is present in camel
>> endpoint
>> xml, whereas http://xxx:9080/yyy/services/ABC is the URL that needs to be
>> overridden.
>>
>> The same service if I model as SOAP based, the url overwriting works
>> well.
>> The outgoing request was
>>
>>
>> INFO : Outbound Message
>> ---------------------------
>> ID: 2
>> Address: http://XXX:9080/yyy/services/ABC
>> Encoding: UTF-8
>> Content-Type: text/xml
>> Headers: {Accept=[*/*], Connection=[Keep-Alive], SOAPAction=[""]}
>> Payload:<soap:Envelope
>> xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body>......content
>>
>> removed for brevity.......</soap:Envelope>
>> --------------------------------------
>>
>> Any inputs on this.
>>
>> Regards,
>> Hari
>>
>>
>>
>>
>> --
>> View this message in context:
>> http://camel.465427.n5.nabble.com/URL-overwriting-SOAP-vs-restful-tp5727526.html
>>
>> Sent from the Camel - Users mailing list archive at Nabble.com.


-- 
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Mime
View raw message