Вызов службы REST из Apache Camel Blueprint

Я хочу вызвать внешнюю службу REST, которая возвращает JSON, сам REST имеет базовую аутентификацию (которую я не знаю, как отправить базовую аутентификацию), я прочитал некоторый учебник, а также компонент CXFRS, который привел меня к этому blueprint.xml .

<?xml version="1.0" encoding="UTF-8"?>

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:cxf="http://camel.apache.org/schema/cxf"
       xmlns:jaxrs="http://cxf.apache.org/jaxrs"
       xsi:schemaLocation="
       http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
       http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd
       http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd">

  <bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.json.JSONProvider"/>

  <cxf:rsClient id="rsClient" address="http://localhost/test.php">
    <cxf:providers>
      <ref bean="jsonProvider"/>
    </cxf:providers>
  </cxf:rsClient>

  <camelContext xmlns="http://camel.apache.org/schema/blueprint">
    <propertyPlaceholder location="classpath:sql.properties" id="placeholder"/>

    <route>
      <from uri="cxfrs://bean://rsClient"/>
      <log message="${body}"/>
    </route>

  </camelContext>

</blueprint>

Если это даже уместно, я использую JBoss Developer Studio для разработки и тестирования, щелкнув правой кнопкой мыши blueprint.xml -> Run As -> Local Camel Context (without tests), вот результат этого.

[ERROR] *************************************
[ERROR] Error occurred while running main from: org.apache.camel.test.blueprint.Main
[ERROR] 
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.camel.maven.RunMojo$1.run(RunMojo.java:488)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.RuntimeException: Gave up waiting for service (objectClass=org.apache.camel.CamelContext)
    at org.apache.camel.test.blueprint.CamelBlueprintHelper.getOsgiService(CamelBlueprintHelper.java:265)
    at org.apache.camel.test.blueprint.CamelBlueprintHelper.getOsgiService(CamelBlueprintHelper.java:226)
    at org.apache.camel.test.blueprint.Main.doStart(Main.java:110)
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
    at org.apache.camel.main.MainSupport.run(MainSupport.java:150)
    at org.apache.camel.main.MainSupport.run(MainSupport.java:354)
    at org.apache.camel.test.blueprint.Main.main(Main.java:84)
    ... 6 more
[ERROR] *************************************
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:07 min
[INFO] Finished at: 2016-10-04T12:11:28+07:00
[INFO] Final Memory: 30M/314M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.camel:camel-maven-plugin:2.15.1.redhat-621084:run (default-cli) on project dsource: null: MojoExecutionException: InvocationTargetException: Gave up waiting for service (objectClass=org.apache.camel.CamelContext) -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

Помимо полученной ошибки, как именно я могу вызвать или вызвать службу REST из Apache Camel с помощью Blueprint и получить возвращенный JSON?


person Adakbar    schedule 04.10.2016    source источник
comment
Я бы подумал, что гораздо проще использовать остальные dsl для простых операций отдыха. См. здесь: camel.apache.org/rest-dsl.html . Кроме того, по какой причине вы используете версию Red Hat?   -  person Souciance Eqdam Rashti    schedule 04.10.2016
comment
Действительно ли Rest DSL предназначен только для определения или создания службы сервера REST? не потреблять и не вызывать внешнюю службу REST? Потому что компания, в которой я работаю, поставила RedHat JBoss в качестве требования для нашей интеграции. Да, кстати, при просмотре Rest DSL есть camel-jetty, могу ли я его использовать?   -  person Adakbar    schedule 04.10.2016


Ответы (1)


Я решил эту проблему, но с помощью HTTP-компонента Camel я могу легко вызвать REST API и получить ответ JSON, но сначала мне нужно установить некоторый заголовок.

<route>
  <from uri="timer:foo?repeatCount=1"/>

  <setHeader headerName="Exchange.HTTP_METHOD">
    <constant>GET</constant>
  </setHeader>

  <to uri="http:localhost/api/test"/>
  <log message="${body}"/>
</route>
person Adakbar    schedule 06.10.2016