首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用标头值作为参数时的Camel-SQL路由ServiceUnavailableException

使用标头值作为参数时的Camel-SQL路由ServiceUnavailableException
EN

Stack Overflow用户
提问于 2016-09-23 21:06:01
回答 1查看 467关注 0票数 0

在ApacheServiceMix 7.0.0中,我使用蓝图定义了以下路由:

代码语言:javascript
复制
 <reference id="dataSource" interface="javax.sql.DataSource" filter="(dataSourceName=connectuserdata)" />

<bean id="sql" class="org.apache.camel.component.sql.SqlComponent">
    <property name="dataSource" ref="dataSource" />
</bean>

<camelContext xmlns="http://camel.apache.org/schema/blueprint">

    <package>com.focuscura</package>

    <dataFormats>
        <!-- here we define a Json data format with the id jack and that it should use the TestPojo as the class type when
             doing unmarshal. The unmarshalTypeName is optional, if not provided Camel will use a Map as the type -->
        <json id="userdata" library="Jackson" />
    </dataFormats>

    <route id="connect.userdata_create">
        <from uri="jetty:http://localhost:8881/userdata?httpMethodRestrict=POST"/>
        <unmarshal ref="userdata"/>
        <!--<process ref="scalaUserDataProcessor"/>-->
        <log message="Received new userdata" />
        <to uri="sql:INSERT INTO public.&quot;UserData&quot; (lastname, firstname) VALUES (:#lastname , :#firstname)"/>
    </route>

    <route id="connect.userdata_get2">
        <from uri="jetty:http://localhost:8881/userdata2?httpMethodRestrict=GET"/>
        <to uri="sql:SELECT * FROM public.&quot;UserData&quot; WHERE id = :#id"/>

        <!--<process ref="scalaUserDataProcessor"/>-->
        <marshal ref="userdata"/>
    </route>
</camelContext>

数据源按照本文中描述的说明作为单独的服务进行安装:How can I install postgresqljdbc to work in Karaf OSGi?

这工作得很好!我可以将JSON发送到Jetty URL,然后将其插入到数据库中。但是,当我尝试从这个端点获取数据时,我得到了以下错误

代码语言:javascript
复制
org.osgi.service.blueprint.container.ServiceUnavailableException: The Blueprint container is being or has been destroyed: (&(dataSourceName=connectuserdata)(objectClass=javax.sql.DataSource))
at org.apache.aries.blueprint.container.ReferenceRecipe.getService(ReferenceRecipe.java:241)
at org.apache.aries.blueprint.container.ReferenceRecipe.access$000(ReferenceRecipe.java:56)
at org.apache.aries.blueprint.container.ReferenceRecipe$ServiceDispatcher.call(ReferenceRecipe.java:306)
at Proxyb6abdd30_6f59_4e89_a419_c4ff0558aa62.equals(Unknown Source)
at java.util.WeakHashMap.eq(WeakHashMap.java:287)
at java.util.WeakHashMap.get(WeakHashMap.java:401)
at org.springframework.jdbc.support.SQLErrorCodesFactory.getErrorCodes(SQLErrorCodesFactory.java:204)
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.setDataSource(SQLErrorCodeSQLExceptionTranslator.java:140)
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.

( org.springframework.jdbc.support.JdbcAccessor.getExceptionTranslator(JdbcAccessor.java:99) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:605) at org.apache.camel.component.sql.SqlProducer.process(SqlProducer.java:100) at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61) at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:145) at org.apache ) (SQLErrorCodeSQLExceptionTranslator.java:103).camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)在org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)在org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)在org.apache.camel.processor.Pipeline.process(Pipeline.java:121)在org.apache.camel.processor.Pipeline.process(Pipeline.java:83)在org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)在org.apache.camel.component.jetty.CamelContinuationServlet.service(CamelContinuationServlet.java:191)在javax.servlet.http.HttpServlet.service(HttpServlet.java:790)在org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)在org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669)在org.eclipse.jetty.servlets.MultiPartFilter.doFilter(MultiPartFilter.java:146)在org.apache.camel.component.jetty.CamelFilterWrapper.org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) at doFilter(CamelFilterWrapper.java:43) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)atorg.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) at org.eclipse.jetty.server.Server.handle(Server.java:499) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)在org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) at java.lang.Thread.run(Thread.java:745)

奇怪的是,当我用<to uri="sql:SELECT * FROM public.&quot;UserData&quot; WHERE id = **2**"/>替换<to uri="sql:SELECT * FROM public.&quot;UserData&quot; WHERE id = **:#id**"/>时,它又可以正常工作了,并且我得到了一个很好的用户nr2的JSON返回。

有什么关于如何解决这个问题的提示吗?

EN

回答 1

Stack Overflow用户

发布于 2016-09-26 20:12:57

问题并不在我的路线或骆驼身上。它是由PostgreSQL引起的。通过在我的路由中使用参数,我需要提供一个显式的类型转换。

为了让它正常工作,我需要将::bigint添加到我的路径中的参数:sql:SELECT lastname FROM public.&quot;UserData&quot; WHERE id = :#id::bigint?dataSource=dataSource&amp;allowNamedParameters=true

由于某种原因,来自Postgres的错误被Camel-sql吞噬了,我得到了关于数据源被销毁的奇怪消息。

感谢大家提出的有用的意见和问题!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39661550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档