Tomcat ApacheCamelServlet HTTP代理

Tomcat ApacheCamelServlet HTTP代理,tomcat,servlets,apache-camel,Tomcat,Servlets,Apache Camel,我试图在tomcat上使用ApacheCamel作为servlet实现http代理 当我使用camel作为独立应用程序时,Everythink运行良好: public static void main(String[] args) throws Exception { CamelContext context = new DefaultCamelContext(); ConnectionFactory connectionFactory = new ActiveMQConnect

我试图在tomcat上使用ApacheCamel作为servlet实现http代理

当我使用camel作为独立应用程序时,Everythink运行良好:

public static void main(String[] args) throws Exception {
    CamelContext context = new DefaultCamelContext();
    ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("http://localhost:8000");
    context.addComponent("test-http", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));
    context.addRoutes(new Router());
    context.start();
}

static class Router extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("jetty:http://localhost:8000/api2/data/").to("http://localhost:8080/api2/data/?bridgeEndpoint=true");
    }
}
但是如果我尝试在tomcat中作为servlet来做,我会在启动tomcat后立即出错

web.xml:

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

  <display-name>LoadBalancer</display-name>

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:camel-config.xml</param-value>
  </context-param>
</web-app>

我建议您阅读官方文件。您没有将
?bridgeEndpoint=true
放在
camel config.xml
端点中,但它是在独立路径中,这正常吗?
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:camel="http://camel.apache.org/schema/spring"
   xsi:schemaLocation="
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
     http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

  <camelContext xmlns="http://camel.apache.org/schema/spring">
    <route id="loadBalancer">
      <from uri="http://localhost:8000/api2/data/"/>
      <to uri="http://localhost:8080/api2/data/"/>
    </route>
  </camelContext>
</beans>
2017-01-15 14:23:29,104 [8000/api2/data/] ERROR DefaultErrorHandler            - Failed delivery for (MessageId: ID-BobSheknowdas-51310-1484486605582-0-563 on ExchangeId: ID-BobSheknowdas-51310-1484486605582-0-564). Exhausted after delivery attempt: 1 caught: org.apache.camel.component.http.HttpOperationFailedException: HTTP operation failed invoking http://localhost:8080/api2/data/ with statusCode: 405

Message History
---------------------------------------------------------------------------------------------------------------------------------------
RouteId              ProcessorId          Processor                                                                        Elapsed (ms)
[loadBalancer      ] [loadBalancer      ] [http://localhost:8000/api2/data/                                              ] [         1]
[loadBalancer      ] [to1               ] [http://localhost:8080/api2/data/?bridgeEndpoint=true                          ] [         1]

Exchange
---------------------------------------------------------------------------------------------------------------------------------------
Exchange[
    Id                  ID-BobSheknowdas-51310-1484486605582-0-564
    ExchangePattern     InOnly
    Headers             {breadcrumbId=ID-BobSheknowdas-51310-1484486605582-0-563, CamelHttpResponseCode=404, CamelRedelivered=false, CamelRedeliveryCounter=0, Content-Language=en, Content-Length=1006, Content-Type=text/html;charset=utf-8, Date=Sun, 15 Jan 2017 13:23:28 GMT}
    BodyType            org.apache.camel.converter.stream.InputStreamCache
    Body                [Body is instance of org.apache.camel.StreamCache]
]

Stacktrace
---------------------------------------------------------------------------------------------------------------------------------------
org.apache.camel.component.http.HttpOperationFailedException: HTTP operation failed invoking http://localhost:8080/api2/data/ with statusCode: 405
    at org.apache.camel.component.http.HttpProducer.populateHttpOperationFailedException(HttpProducer.java:228)
    at org.apache.camel.component.http.HttpProducer.process(HttpProducer.java:156)
    at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
    at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:110)
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72)
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:398)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
    at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:105)
    at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:87)
    at org.apache.camel.impl.DefaultScheduledPollConsumer.poll(DefaultScheduledPollConsumer.java:64)
    at org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:187)
    at org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:114)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)