2016-10-04 140 views
0

我想調用返回JSON的外部REST服務,REST本身具有基本身份驗證(我不知道如何發送基本身份驗證),我已閱讀了一些教程還有CXFRS組件導致我這個blueprint.xml從Apache Camel Blueprint調用REST服務

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

除了我得到了錯誤,究竟我可以打電話或使用藍圖從Apache的駱駝調用REST服務,並得到返回的JSON?

+0

我認爲使用其餘dsl來簡單休息操作要容易得多。看到這裏: http://camel.apache.org/rest-dsl.html。另外,你使用紅帽版本的原因是什麼? –

+0

Rest DSL實際上只是爲了定義或創建REST服務器服務?不消耗或調用外部REST服務?因爲我工作的公司把RedHat JBoss作爲我們集成的要求。哦,順便說一下,當看到休息DSL有'駱駝碼頭',我可以使用它嗎? – Adakbar

回答

1

我解決了這個問題,但使用Camel HTTP組件,我可以輕鬆調用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>