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

Reply via email to