从 Apache Camel Blueprint 调用 REST 服务
Call REST service from Apache Camel Blueprint
我想调用 return 一个 JSON 的外部 REST 服务,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.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
除了我得到的错误,我究竟如何使用蓝图从 Apache Camel 调用或调用 REST 服务并获得 returned JSON?
我解决了这个问题,但是使用 Camel HTTP 组件,我可以轻松调用 REST API 并获得 JSON 响应,但首先我必须先设置一些 header。
<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>
我想调用 return 一个 JSON 的外部 REST 服务,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.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
除了我得到的错误,我究竟如何使用蓝图从 Apache Camel 调用或调用 REST 服务并获得 returned JSON?
我解决了这个问题,但是使用 Camel HTTP 组件,我可以轻松调用 REST API 并获得 JSON 响应,但首先我必须先设置一些 header。
<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>