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 <ramukhsohtna...@gmail.com>:
>
> 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.

Reply via email to