What's the appUtil.extractResponse looks like?

Did you try to converter the message body into ServiceProviderRequest?

--  
Willem Jiang

Red Hat, Inc.
FuseSource is now part of Red Hat
Web: http://www.fusesource.com | http://www.redhat.com
Blog: http://willemjiang.blogspot.com (http://willemjiang.blogspot.com/) 
(English)
          http://jnn.iteye.com (http://jnn.javaeye.com/) (Chinese)
Twitter: willemjiang  
Weibo: 姜宁willem





On Tuesday, December 11, 2012 at 2:03 PM, anand_tech wrote:

> I have an interface which I am using as Camel Proxy
> <http://camel.apache.org/using-camelproxy.html> . My route is as below:
>  
> from("direct:services")
> .onException(Exception.class)
> .process(new Processor() {
> @Override
> public void process(Exchange arg0) throws Exception {
> Exception e = arg0.getProperty(Exchange.EXCEPTION_CAUGHT,
> Exception.class);
> LOGGER.error(e, e.getMessage());
> }
> }).handled(true).end()
> .setHeader(Exchange.HTTP_URI, simple("${body.url}"))
> .setHeader(Exchange.HTTP_METHOD,simple("${body.httpMethod}"))
> .setHeader(Exchange.CONTENT_TYPE, simple("${body.contentType}"))
> .setBody(simple("${body.requestBody}"))
> .choice()
> .when(simple("${body.proxyRequired} == 'true'"))
> .inOut("{{http.urlProxy}}")
> .otherwise()
> .inOut("{{http.url}}")
> .end()
> .setBody(bean(appUtil, "extractResponse"));
>  
>  
> The interface is :  
>  
> public interface ApiServices {
>  
> ServiceProviderResponse performOperation(ServiceProviderRequest
> request);
>  
> }
>  
> And the ServiceProviderResponse and ServiceProviderRequest classes :  
>  
> public class ServiceProviderRequest {
>  
> private String url;
> private String requestBody;
> private String httpMethod;
> private String contentType;
> private boolean proxyRequired;
> private Map<String, String> headers;
>  
> //getters and setters
>  
> }
>  
> public class ServiceProviderResponse {
>  
> private int statusCode;
> private String body;
> private String errorMessage;
> private String contentType;
> private String url;
>  
> //getters and setters
> }
>  
> This is how this whole thing is working :  
>  
> @Produce(uri = "direct:services")
> ApiServices appServices;
>  
> ServiceProviderResponse response =  
> appServices.performOperation(request);
>  
> Earlier my interface's method was : `ServiceProviderResponse
> performOperation(String url);` and it worked fine(ofcourse my route was
> different earlier). So is it something that we cannot use custom object
> types like this? The exception that I get :  
>  
> Caused by: org.apache.camel.InvalidPayloadException: No body available
> of type: com.common.util.ServiceProviderResponse but has value:
> BeanInvocation public abstract com.common.util.ServiceProviderResponse
> com.common.util.ApiServices.performOperation(com.common.util.ServiceProviderRequest)
> with [com.common.util.ServiceProviderRequest@4ce55b]] of type:
> org.apache.camel.component.bean.BeanInvocation on: Message: BeanInvocation
> public abstract com.common.util.ServiceProviderResponse
> com.common.util.ApiServices.performOperation(com.common.util.ServiceProviderRequest)
> with [com.common.util.ServiceProviderRequest@4ce55b]]. Caused by: No type
> converter available to convert from type:
> org.apache.camel.component.bean.BeanInvocation to the required type:
> com.common.util.ServiceProviderResponse with value BeanInvocation public
> abstract com.common.util.ServiceProviderResponse
> com.common.util.ApiServices.performOperation(com.common.util.ServiceProviderRequest)
> with [com.common.util.ServiceProviderRequest@4ce55b]]. Exchange[Message:
> BeanInvocation public abstract com.common.util.ServiceProviderResponse
> com.common.util.ApiServices.performOperation(com.common.util.ServiceProviderRequest)
> with [com.common.util.ServiceProviderRequest@4ce55b]]]. Caused by:
> [org.apache.camel.NoTypeConversionAvailableException - No type converter
> available to convert from type:
> org.apache.camel.component.bean.BeanInvocation to the required type:
> com.common.util.ServiceProviderResponse with value BeanInvocation public
> abstract com.common.util.ServiceProviderResponse
> com.common.util.ApiServices.performOperation(com.common.util.ServiceProviderRequest)
> with [com.common.util.ServiceProviderRequest@4ce55b]]]
> at
> org.apache.camel.impl.MessageSupport.getMandatoryBody(MessageSupport.java:102)
> at
> org.apache.camel.component.bean.AbstractCamelInvocationHandler.getBody(AbstractCamelInvocationHandler.java:58)
> at
> org.apache.camel.component.bean.AbstractCamelInvocationHandler.afterInvoke(AbstractCamelInvocationHandler.java:148)
> at
> org.apache.camel.component.bean.AbstractCamelInvocationHandler$1.call(AbstractCamelInvocationHandler.java:85)
> at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
> at java.util.concurrent.FutureTask.run(Unknown Source)
> at
> org.apache.camel.component.bean.AbstractCamelInvocationHandler.invokeWithbody(AbstractCamelInvocationHandler.java:101)
> at
> org.apache.camel.component.bean.CamelInvocationHandler.invoke(CamelInvocationHandler.java:44)
> ... 43 more
> Caused by: org.apache.camel.NoTypeConversionAvailableException: No type
> converter available to convert from type:
> org.apache.camel.component.bean.BeanInvocation to the required type:
> com.common.util.ServiceProviderResponse with value BeanInvocation public
> abstract com.common.util.ServiceProviderResponse
> com.common.util.ApiServices.performOperation(com.common.util.ServiceProviderRequest)
> with [com.common.util.ServiceProviderRequest@4ce55b]]
> at
> org.apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo(BaseTypeConverterRegistry.java:147)
> at
> org.apache.camel.impl.MessageSupport.getMandatoryBody(MessageSupport.java:100)
> ... 50 more
>  
> Exception says something about TypeConverters, do I need to implement a type
> converter also now ? If yes how to do it? I have already gone through Camel
> docs for type converter but I dont understand from it much.
> Also I guess most of you have understood what I want to achieve, so if you
> guys have any different methods to accomplish this or some suggestions,
> please post it.
>  
>  
>  
>  
>  
>  
>  
> --
> View this message in context: 
> http://camel.465427.n5.nabble.com/NoTypeConversionAvailableException-When-using-interface-as-Apache-Camel-Proxy-tp5723880.html
> Sent from the Camel - Users mailing list archive at Nabble.com 
> (http://Nabble.com).



Reply via email to