2012-02-07 15 views
0

私はCXF /ラクダのWebサービスを作成していたし、私はこのようなテストコードのために作成しました:ラクダHTTPコンポーネント500

@GET 
@Path("/user") 
@ProduceMime({ "application/json" }) 
public String user(@FormParam("token") String token) throws Exception { 

     CamelContext context = new DefaultCamelContext(); 

     context.addRoutes(new RouteBuilder() { 
      public void configure(){ 
       from("direct:start").to("http://google.com"); 
      } 
     }); 

     context.start(); 

     return token; 

    } 

} 

それから私は、FUSE ESBは、フォ​​ルダを展開します、それをコンパイルし、コピーしました。私のWebサービスがインストールされていますが、私は自分のWebサービスでURLを開いたとき、私は応答を得た:

org.apache.cxf.interceptor.Fault: Failed to create route route17 at: >>> To[http://google.com] <<< in route: Route[[From[direct:start]] -> [To[http://google.com]]] because of Failed to resolve endpoint: http://google.com due to: No component found with scheme: http 
Caused by: 

java.lang.RuntimeException: org.apache.cxf.interceptor.Fault: Failed to create route route17 at: >>> To[http://google.com] <<< in route: Route[[From[direct:start]] -> [To[http://google.com]]] because of Failed to resolve endpoint: http://google.com due to: No component found with scheme: http 
    at org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:108) 
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:323) 
    at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) 
    at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:206) 
    at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:209) 
    at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:152) 
    at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:114) 
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:184) 
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:112) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:575) 
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:163) 
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:538) 
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:478) 
    at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:70) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) 
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:480) 
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:225) 
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:937) 
    at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:116) 
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:406) 
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183) 
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:871) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) 
    at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:72) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110) 
    at org.eclipse.jetty.server.Server.handle(Server.java:346) 
    at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:438) 
    at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:905) 
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:561) 
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:214) 
    at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:43) 
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:538) 
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:43) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:529) 
    at java.lang.Thread.run(Thread.java:680) 

さらに私がインポートされている:私はオンになっているESBに

import org.apache.camel.CamelContext; 
import org.apache.camel.builder.RouteBuilder; 
import org.apache.camel.impl.DefaultCamelContext; 
import org.apache.camel.component.http.*; 
import org.apache.camel.component.http.helper.*; 

ラクダのhttp

何が間違っていますか?

-------------- 

私が書いたことは間違っています。このコードは正しく動作するはずですか?

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:osgi="http://www.springframework.org/schema/osgi" 
    xmlns:jaxrs="http://cxf.apache.org/jaxrs" 
    xmlns:camel="http://camel.apache.org/schema/spring" 
    xmlns:cxf="http://camel.apache.org/schema/cxf" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation=" 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd 
    http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd 
    http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd  
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
    http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd 
    http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd"> 

    <import resource="classpath:META-INF/cxf/cxf.xml" /> 
    <import resource="classpath:META-INF/cxf/osgi/cxf-extension-osgi.xml" /> 

    <bean id="cxfSSO" class="com.esb.cxf.SSO" /> 
    <jaxrs:server id="sso" address="/ssocamel2"> 
     <jaxrs:serviceBeans> 
      <ref bean="cxfSSO" /> 
     </jaxrs:serviceBeans> 
    </jaxrs:server> 

     <camelContext xmlns="http://camel.apache.org/schema/spring"> 

     <endpoint id="endpointURL" uri="http://localhost:8080/SSO/?token=test"/> 

     <route> 
      <from uri="direct:start"/> 
      <to uri="callRealWebService"/> 
     </route> 

     </camelContext> 



</beans> 

答えて

0

物事のカップル、「スキームでは見つかりませんでしたコンポーネント:HTTPは、」あなたが次のバンドル

にラクダのhttp依存性が不足している、あなたは一度セットアップあなたのラクダのコンテキスト/ルートをすべきであることを意味..このようなメソッド呼び出しではありません。

+0

私はバンドルをチェックしますが、私は私のバンドルにcamel-httpがあることを覚えています - 私は確認します。約2番目 - Apache Camelのウェブサイトに表示されているように、私は 'from(" direct:start ") .setHeader(Exchange.HTTP_URI、simple(" http:// myserver/orders/$ {header.orderId} " )) .to( "http:// dummyhost"); '。このようなものを使うことができれば、なぜ私はそれをどのような方法でも使用できないのですか? – Ilkar

+0

メソッドから、ルート(template.send( "direct:start"、message)など)を呼び出すことはできますが、ルート自体は定義しません。http://camel.apache.org/producertemplate.html –

5

camel-http機能をインストールする必要があります。ヒューズESBコンソールから次のように入力できます。

features:install camel-http 

その後、バンドルをインストール/起動できます。

ベンが言っているように、あなたがレストサービスの中でやっていることはまったく間違っています。あなたはCamelルートを一度設定する必要があります。 Camelを使用してJavaコードからhttpエンドポイントを呼び出す場合は、ルートは必要ありませんが、ProducerTemplateを使用できます。詳細については、Camelのドキュメントを参照してください。

+0

OK、だから私はXMLでeverythigをやろうとします - 私が '-----------'の下に追加したコードは正しいのですか?私はこのアプリケーションを実行し、私はそれがworkignだとは思わない... :( – Ilkar

+0

@Clauslbsen私は同じ問題がある[ここで私の質問を見て](http://stackoverflow.com/questions/19248596/activemq- camel-can-not-to-uri-http)を使用して、この問題をどのように解決できるかを教えてください。 – niren

関連する問題