Верблюд-SQL-маршрут ServiceUnavailableException при использовании значения заголовка в качестве параметра

В ApacheServiceMix 7.0.0 я определил следующие маршруты, используя Blueprint:

 <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>

Источник данных устанавливается как отдельный сервис, следуя инструкциям, описанным в этом посте: Как я могу установить postgresqljdbc для работы в Karaf OSGi?

Это работает нормально! Я могу опубликовать JSON на Jetty URL, и он будет вставлен в базу данных. Но когда я пытаюсь получить данные из этой конечной точки, я получаю следующую ошибку

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.

(SQLErrorCodeSQLExceptionTranslator.java:103) в org.springframework.jdbc.support.JdbcAccessor.getExceptionTranslator(JdbcAccessor.java:99) в org.springframework.jdbc.core.Jdbc.clate.jjbt camel.component.sql.SqlProducer.process(SqlProducer.java:100) в org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61) в org. SendProcessor.java:145) в org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77) в org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:4ache) в org..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:7lipse или org atsep или.servlet.ServletHolder.handle(ServletHolder.java:812) в org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669) в org.eclipse.jetty.servlets.ilavaF:146) в org.apache.camel.component.jetty.CamelFilterWrapper.doFilter(CamelFilterWrapper.java:43) в org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java: at. 16): jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585) в org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127) в org.eclipse.jetty.servlet.ServletHand Java:515) в org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) в org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) в org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) в org.eclipse.jetty.server.Server.handle(Server.java:499) в org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311) в org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) в org.eclipse.jetty.io.AbstractConnection$2.un Java:544) в org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) в org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThavaPo.ol.5) lang.Thread.run(Thread.java:745)

Странно то, что когда я заменяю <to uri="sql:SELECT * FROM public.&quot;UserData&quot; WHERE id = **:#id**"/> с <to uri="sql:SELECT * FROM public.&quot;UserData&quot; WHERE id = **2**"/> он снова работает нормально, и я получаю симпатичный маленький JSON пользователя nr 2.

Любые намеки относительно того, как решить эту проблему?

1 ответ

Проблема была не в моем маршруте или верблюде. Это было вызвано PostgreSQL. Используя параметр в моем маршруте, мне нужно было предоставить явное приведение типа.

Чтобы это работало, мне нужно было добавить::bigint к параметру в моем маршруте: sql:SELECT lastname FROM public.&quot;UserData&quot; WHERE id = :#id::bigint?dataSource=dataSource&amp;allowNamedParameters=true

По какой-то причине ошибка от Postgres была проглочена Camel-sql, и я получил странное сообщение об уничтожении источника данных.

Спасибо всем за ваши полезные комментарии и вопросы!

Другие вопросы по тегам