2016-06-02 48 views
1

リモートホストから連絡先を取得する簡単なルートを作成しました。しかし、bridgeEndpointオプションには多くの混乱があるようです。Apache-camel:httpエンドポイントでbridgeEndpointを有効にする

は当初、私は次のようにJavaのDSLを使用してルートを追加しました:

 from("direct:getContact") 
       .marshal().json(JsonLibrary.Jackson) 
       .setHeader("Content-Type", constant("application/json")) 
       .setHeader("Accept", constant("application/json")) 
       .setHeader(Exchange.HTTP_METHOD, constant("GET")) 
       .recipientList(simple("http://<remoteHost>:8080/api/contact" + 
         "/${header.contactId}")) 
       .unmarshal().json(JsonLibrary.Jackson); 

このルートは、リモートホストのGET接触APIのためだけのプロキシです。 私は、次のエラーを得た:

Invalid uri: /ib/contact/51702/contact/51702. If you are forwarding/bridging http endpoints, then enable the bridgeEndpoint option on the endpoint: Endpoint[http://<remoteHost>:8080/api/contact/51702] 

/IB/*あなたが見るには、TomcatサーブレットのベースURLです。エラーで示唆したように、以下に示すように、私はエンドポイントに真bridgeEndpoint =を追加しました:

 from("direct:getContact") 
       .marshal().json(JsonLibrary.Jackson) 
       .setHeader("Content-Type", constant("application/json")) 
       .setHeader("Accept", constant("application/json")) 
       .setHeader(Exchange.HTTP_METHOD, constant("GET")) 
       .recipientList(simple("http://<remoteHost>:8080/api/contact" + 
         "/${header.contactId}?bridgeEndpoint=true")) 
       .unmarshal().json(JsonLibrary.Jackson); 

をその後、私は別のエラーが表示されます。

org.apache.camel.component.http.HttpOperationFailedException: 
HTTP operation failed invoking 
http://<remoteHost>:8080/api/contact/51702/contact/51702 with statusCode: 404 
at org.apache.camel.component.http.HttpProducer.populateHttpOperationFailedException(HttpProducer.java:233) 
at org.apache.camel.component.http.HttpProducer.process(HttpProducer.java:158) 
at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61) 
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:448) 
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190) 
at org.apache.camel.processor.MulticastProcessor.doProcessSequential(MulticastProcessor.java:652) 
at org.apache.camel.processor.MulticastProcessor.doProcessSequential(MulticastProcessor.java:580) 
at org.apache.camel.processor.MulticastProcessor.process(MulticastProcessor.java:227) 
at org.apache.camel.processor.RecipientList.sendToRecipientList(RecipientList.java:167) 
at org.apache.camel.processor.RecipientList.process(RecipientList.java:120) 
at org.apache.camel.processor.Pipeline.process(Pipeline.java:118) 
at org.apache.camel.processor.Pipeline.process(Pipeline.java:80) 

それはまだ「接触/ 51702」を付加しています404を提供しているリモートホストのURLに移動します。 私はここで何が欠けていますか? FAQ

In camel there are a number of components that use the http protocol headers to do their business.

から

答えて

0

私はあなたのプロデューサーは、同様にそれをしないと信じています。だからあなたの問題を解決できるのは次のようなものです。

from("direct:getContact") 
    .marshal().json(JsonLibrary.Jackson) 
    .setHeader("Content-Type", constant("application/json")) 
    .setHeader("Accept", constant("application/json")) 
    .setHeader(Exchange.HTTP_METHOD, constant("GET")) 
    .removeHeader(Exchange.HTTP_PATH) 
    .recipientList(simple("http://<remoteHost>:8080/api/contact" + 
     "/${header.contactId}?bridgeEndpoint=true")) 
    .unmarshal().json(JsonLibrary.Jackson); 

エンドポイントからcontact/${header.contactId}を削除することもできます。冗長に見えるので。しかし、これはあなたが達成したいことにかかっています。

+0

ありがとう、これは動作します。 FAQを読んで、すべてのhttpヘッダー.removeHeaders( "CamelHttp *")を削除しました。それから、bridgeEndpointを有効にする必要はないことが分かりました。 .recipientList( "http:// :8080/api/contact" + "/${header.contactId}"))はうまく動作します。 – ndsurendra

関連する問題