I suppose the call is failing because you are not setting some
required properties (e.g., the http method) to fake the soap call.
<camel:setHeader headerName="CamelHttpMethod">
<camel:constant>POST</camel:constant>
</camel:setHeader>
<camel:setHeader headerName="Content-Type">
<camel:constant>text/xml;charset="utf-8"</camel:constant>
</camel:setHeader>
regards, aki
2012/12/7 santhosh <[email protected]>:
>
> My requirement is to have a proxy web service which will receive the request
> from clients and then route through camel,enrich it and forward it to real
> webservice at other clients place ,get response and send it back to the
> original requestor.
>
> i basically looked at camel-cxf-proxy example
> (http://camel.apache.org/cxf-proxy-example.html) and camel-cxf-example in
> camel distribution.Its exactly similar to camel-cxf-proxyand came up with
> this route
>
> <from uri="cxf:bean:soapMessageEndpoint?dataFormat=MESSAGE" />
> <camel:convertBodyTo type="java.lang.String"></camel:convertBodyTo>
> <to ref="XService"></to>
>
> where endpoints are
>
> <endpoint id="XService" uri="http://xx.xx.xxx.xx:8080/X_Service" />
>
> <cxf:cxfEndpoint id="soapMessageEndpoint"
> address="http://localhost:8181/ProviderInformationDirectoryService"
> wsdlURL="wsdl/HPD_ProviderInformationDirectory.wsdl"
> endpointName="s:ProviderInformationDirectory_Port_Soap"
> serviceName="s:ProviderInformationDirectory_Service"
> xmlns:s="urn:ihe:iti:hpd:2010"/>
>
> As you can see the second service is http endpoint.And first is the
> camel-cxf proxy.I just have the wsdl and at this point there is no need for
> impl.the dataformat is MESSAGE as i need the entire soap envelope to be sent
> to second web service and there are some useful headers in request from
> client.But when i run this route with a sample soap envelope it always comes
> up with 500 response.I am thinking that message sent to real webservice is
> not what it expects.I even tried the bridgeOption in httpendpoint.
>
> I tried trace on camel route but it didnt show much.I was hoping it will
> show real request to http endpoint.i tried to configure interceptor but that
> didnt work either.Trace only shows following
>
> Failed delivery for (MessageId: ID-ALHCAN0437-63941-1354828653539-45-2 on
> ExchangeId: ID-ALHCAN0437-63941-1354828653539-45-1). Exhausted after
> delivery attempt: 1 caught:
> org.apache.camel.component.http.HttpOperationFailedException: HTTP operation
> failed invoking http://X:8080/X_Service with statusCode: 500
>
> i even tried
>
> <from uri="cxf:bean:soapMessageEndpoint?dataFormat=MESSAGE" />
> <to uri="log:input">
> <camel:convertBodyTo type="java.lang.String"></camel:convertBodyTo>
> <to ref="XService"></to>
>
> I got a soap envelope and couldnt find anything wrong.
>
> should i use wireshark and sniff the message that is actually sent??
>
> I also tried the following which seems to be working.
>
> <from uri="cxf:bean:soapMessageEndpoint?dataFormat=MESSAGE" />
> <camel:convertBodyTo type="java.lang.String"></camel:convertBodyTo>
> <to uri="bean:callRemoteWS"></to>
>
> callRemoteWS (callRemoteMethod) gets the soapenvelope as string and makes a
> HTTPPost request to above endpoint , returns back the response.
>
> public String callRemoteMethod(String request) throws Exception{
>
>
>
> HttpClient client = new HttpClient();
>
> BufferedReader br = null;
>
> PostMethod method = new
> PostMethod("http://x.x.x.x:8080/X_Service");
>
> RequestEntity entity =new StringRequestEntity(request);
>
> method.setRequestEntity(entity);
>
> try{
> int returnCode = client.executeMethod(method);
>
> if (returnCode != HttpStatus.SC_OK) {
> System.err.println("Method failed: " +
> method.getStatusLine());
> return "Error";
> }
>
> // Read the response body.
> byte[] responseBody = method.getResponseBody();
>
> System.out.println(new String(responseBody));
>
> // Deal with the response.
> // Use caution: ensure correct character encoding and is not
> binary data
> return new String(responseBody);
> } finally {
> method.releaseConnection();
> if(br != null) try { br.close(); } catch (Exception fe) {}
> }
>
> }
>
> I am confused why the simple camel-cxf proxy with http webservice didnt work
> and the second one works (it should and it does :P).Is the code i have ok.It
> doesnt seem right to me.I am pretty sure some exchange property is set wrong
> or content sent to real webservice is wrong.The content got from the proxy
> is used to make the Httppost call in second route.so the content from proxy
> cannot be wrong.when it is got from exchange and send to real webservice
> something goes wrong. Can anybody throw some light on it.
>
>
>
>
> --
> View this message in context:
> http://camel.465427.n5.nabble.com/apache-Camel-cxf-proxy-doesnt-work-with-http-endpoint-tp5723753.html
> Sent from the Camel - Users mailing list archive at Nabble.com.