You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Daniel Langevin <da...@shq.gouv.qc.ca> on 2018/02/22 19:20:24 UTC
Rest Service / redirect with camel-http / No serializer found
for class
org.apache.camel.converter.stream.CachedOutputStream$WrappedInputStream
Hi,
i try to implement a Rest service In OSGI Karaf 4.0.9 with Camel 2.17.7
this service redirect with camel-http to another URL.
like
http://serverA.org:8181/rest/XXX/geocode/30%20rue%20larue,%20quebec/adress/geom
redirect to
http://www.servername.org/search/geocode?q=300%20rue%20larue,%20quebec&type=adress&geometries=geom
the servername.org already format the response in JSON format, so don't have to transform the BODY receive.
When i try with a standard Browser like, Firefox, Safari, Google Chrome, etc. it works very well .
When i try with application Browser like utl_http from Oracle or wget or Curl i receive and HTTP error 500 from Jetty ????
Nothing in the karaf LOG
The request send to my remote server, it respond 200 OK and return de DATA as well
but after all data was receive
jetty return an error to my application
witch TCPDUMP i saw:
HTTP/1.1 500 Server Error
Date: Thu, 22 Feb 2018 18:54:23 GMT
Server: Jetty(9.2.19.v20160908)
Content-Type: text/plain; charset=ISO-8859-1
Connection: close
com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class org.apache.camel.converter.stream.CachedOutputStream$WrappedInputStream and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) )
I DON'T find what happend ?????? Any idea ????????
Thank's in Advance
Daniel
Here my code:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:cxf="http://camel.apache.org/schema/cxf"
xmlns:camel="http://camel.apache.org/schema/spring"
xmlns:osgi="http://www.springframework.org/schema/osgi"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring-2.17.7.xsd
http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd">
<osgi:reference id="httpService" interface="org.osgi.service.http.HttpService"/>
<bean id="TERCamelServlet" class="org.apache.camel.component.servlet.CamelHttpTransportServlet"/>
<bean class="org.apache.camel.component.servlet.osgi.OsgiServletRegisterer"
init-method="register"
destroy-method="unregister">
<property name="alias" value="/rest/XXX"/>
<property name="httpService" ref="httpService"/>
<property name="servlet" ref="XXXCamelServlet"/>
<property name="servletName" value="XXXCamelServlet"/>
</bean>
<camelContext id="Contexte-XXX-XXX" xmlns="http://camel.apache.org/schema/spring" trace="false" >
<restConfiguration bindingMode="auto" component="servlet" port="8181" contextPath="/rest/XXX" >
<endpointProperty key="servletName" value="XXXCamelServlet" />
<dataFormatProperty key="prettyPrint" value="true"/>
</restConfiguration>
<rest path="/geocode">
<get uri="/{geoRequete}">
<to pattern="InOut" uri="direct:xxxGeocode" />
</get>
<get uri="/{geoRequete}/{geoType}">
<to pattern="InOut" uri="direct:xxxGeocode" />
</get>
<get uri="/{geoRequete}/{geoType}/{Geogeometries}">
<to pattern="InOut" uri="direct:xxxGeocode" />
</get>
<route id="route.XXX.geocode" startupOrder="004" streamCache="true">
<from uri="direct:xxxGeocode" />
...
...
some validation
...
...
<setHeader headerName="Exchange.HTTP_URI"><simple>http://www.servername.org/search</setHeader>
<setHeader headerName="Exchange.HTTP_PATH"><simple>geocode</simple></setHeader>
<setHeader headerName="Exchange.HTTP_QUERY"><simple>q=${header.geoRequete}${header.geoType}${header.geoGeometries}${headergeoFiltre}</simple></setHeader>
<to uri="http://dummyhost>
<onException>
<exception>org.apache.camel.http.common.HttpOperationFailedException</exception>
<handled> <constant>true</constant> </handled>
<log message="*** Error receive from remote server ***"/>
</onException>
</route>
</camelContext>
</beans>
"Le pr�sent courriel peut contenir des renseignements confidentiels et ne s'adresse qu'au destinataire dont le nom appara�t ci-dessus. Si ce courriel vous est parvenu par m�garde, veuillez le supprimer et nous en aviser aussit�t."
Rest Service / redirect with camel-http / No serializer found
for class
org.apache.camel.converter.stream.CachedOutputStream$WrappedInputStream
Posted by Daniel Langevin <da...@shq.gouv.qc.ca>.
Hi,
i try to implement a Rest service In OSGI Karaf 4.0.9 with Camel 2.17.7
this service redirect with camel-http to another URL.
like
http://serverA.org:8181/rest/XXX/geocode/30%20rue%20larue,%20quebec/adress/geom
redirect to
http://www.servername.org/search/geocode?q=300%20rue%20larue,%20quebec&type=adress&geometries=geom
the servername.org already format the response in JSON format, so don't have to transform the BODY receive.
When i try with a standard Browser like, Firefox, Safari, Google Chrome, etc. it works very well .
When i try with application Browser like utl_http from Oracle or wget or Curl i receive and HTTP error 500 from Jetty ????
Nothing in the karaf LOG
The request send to my remote server, it respond 200 OK and return de DATA as well
but after all data was receive
jetty return an error to my application
witch TCPDUMP i saw:
HTTP/1.1 500 Server Error
Date: Thu, 22 Feb 2018 18:54:23 GMT
Server: Jetty(9.2.19.v20160908)
Content-Type: text/plain; charset=ISO-8859-1
Connection: close
com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class org.apache.camel.converter.stream.CachedOutputStream$WrappedInputStream and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) )
I DON'T find what happend ?????? Any idea ????????
Thank's in Advance
Daniel
Here my code:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:cxf="http://camel.apache.org/schema/cxf"
xmlns:camel="http://camel.apache.org/schema/spring"
xmlns:osgi="http://www.springframework.org/schema/osgi"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring-2.17.7.xsd
http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd">
<osgi:reference id="httpService" interface="org.osgi.service.http.HttpService"/>
<bean id="TERCamelServlet" class="org.apache.camel.component.servlet.CamelHttpTransportServlet"/>
<bean class="org.apache.camel.component.servlet.osgi.OsgiServletRegisterer"
init-method="register"
destroy-method="unregister">
<property name="alias" value="/rest/XXX"/>
<property name="httpService" ref="httpService"/>
<property name="servlet" ref="XXXCamelServlet"/>
<property name="servletName" value="XXXCamelServlet"/>
</bean>
<camelContext id="Contexte-XXX-XXX" xmlns="http://camel.apache.org/schema/spring" trace="false" >
<restConfiguration bindingMode="auto" component="servlet" port="8181" contextPath="/rest/XXX" >
<endpointProperty key="servletName" value="XXXCamelServlet" />
<dataFormatProperty key="prettyPrint" value="true"/>
</restConfiguration>
<rest path="/geocode">
<get uri="/{geoRequete}">
<to pattern="InOut" uri="direct:xxxGeocode" />
</get>
<get uri="/{geoRequete}/{geoType}">
<to pattern="InOut" uri="direct:xxxGeocode" />
</get>
<get uri="/{geoRequete}/{geoType}/{Geogeometries}">
<to pattern="InOut" uri="direct:xxxGeocode" />
</get>
<route id="route.XXX.geocode" startupOrder="004" streamCache="true">
<from uri="direct:xxxGeocode" />
...
...
some validation
...
...
<setHeader headerName="Exchange.HTTP_URI"><simple>http://www.servername.org/search</setHeader>
<setHeader headerName="Exchange.HTTP_PATH"><simple>geocode</simple></setHeader>
<setHeader headerName="Exchange.HTTP_QUERY"><simple>q=${header.geoRequete}${header.geoType}${header.geoGeometries}${headergeoFiltre}</simple></setHeader>
<to uri="http://dummyhost>
<onException>
<exception>org.apache.camel.http.common.HttpOperationFailedException</exception>
<handled> <constant>true</constant> </handled>
<log message="*** Error receive from remote server ***"/>
</onException>
</route>
</camelContext>
</beans>
"Le pr�sent courriel peut contenir des renseignements confidentiels et ne s'adresse qu'au destinataire dont le nom appara�t ci-dessus. Si ce courriel vous est parvenu par m�garde, veuillez le supprimer et nous en aviser aussit�t."