我正在尝试开始将Jetty与Camel一起使用。我已将依赖项添加到我的pom:
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-jetty</artifactId>
<version>2.15.5</version>
</dependency>
我的CamelContext初始化如下:
public void startCamelContext() throws Exception {
CamelContext camelContext = new DefaultCamelContext();
camelContext.addComponent("jetty", new JettyHttpComponent8());
camelContext.start();
}
当我尝试启动我的服务时,该服务具有定义为以下endpoint的路由:
jetty:http://0.0.0.0:9000/httpInput
我得到一个例外:
java.lang.NullPointerException: null
at org.apache.camel.component.jetty8.JettyHttpComponent8.createConnectorJettyInternal(JettyHttpComponent8.java:48)
at org.apache.camel.component.jetty.JettyHttpComponent.createConnector(JettyHttpComponent.java:585)
at org.apache.camel.component.jetty.JettyHttpComponent.getSocketConnector(JettyHttpComponent.java:527)
at org.apache.camel.component.jetty.JettyHttpComponent.getConnector(JettyHttpComponent.java:517)
at org.apache.camel.component.jetty.JettyHttpComponent.connect(JettyHttpComponent.java:320)
at org.apache.camel.component.http.HttpEndpoint.connect(HttpEndpoint.java:185)
at org.apache.camel.component.http.HttpConsumer.doStart(HttpConsumer.java:53)
at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
at org.apache.camel.impl.DefaultCamelContext.startService(DefaultCamelContext.java:2885)
at org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRouteConsumers(DefaultCamelContext.java:3179)
at org.apache.camel.impl.DefaultCamelContext.doStartRouteConsumers(DefaultCamelContext.java:3115)
at org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices(DefaultCamelContext.java:3045)
at org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRoutes(DefaultCamelContext.java:2813)
at org.apache.camel.impl.DefaultCamelContext.startAllRoutes(DefaultCamelContext.java:865)
关于如何设置码头组件的文档最多也缺乏。我发现了一个邮件列表条目,其中说JettyHttpComponent自Camel 2.15以来一直是抽象的,现在该组件必须使用JettyHttpComponent8或9进行配置。链接
在我的例子中,我使用的是Camel 2.15.5,而JettyHttpComponent9在类路径中不可用,使用8会产生上述异常。我在这里还发现了相关的讨论,没有关于如何实际使用该组件的信息。
要在spring之外启动camel上下文,您需要创建一个连续的线程来保持camel活动,如下所述:http://camel.apache.org/running-camel-standalone-and-have-it-keep-running.html
别担心,下面有一些代码可以在localhost:8081上为您设置jetty:
pom.xml
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-jetty</artifactId>
<version>2.16.1</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-core</artifactId>
<version>2.16.1</version>
</dependency>
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.main.Main;
import org.apache.camel.main.MainListenerSupport;
import org.apache.camel.main.MainSupport;
import java.util.Date;
/**
* Created by mkbrv on 22/06/16.
*/
public class CamelJetty {
private Main main;
public static void main(String[] args) throws Exception {
CamelJetty example = new CamelJetty();
example.boot();
}
public void boot() throws Exception {
// create a Main instance
main = new Main();
// bind MyBean into the registry
main.bind("foo", new MyBean());
// add routes
main.addRouteBuilder(new MyJettyRouteBuilder());
// add event listener
main.addMainListener(new Events());
// run until you terminate the JVM
System.out.println("Starting Camel. Use ctrl + c to terminate the JVM.\n");
main.run();
}
private static class MyJettyRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
from("jetty:http://localhost:8081")
.process(exchange -> {
System.out.println("Invoked timer at " + new Date());
exchange.getOut().setBody("Hi, this is Camel!");
})
.bean("foo");
}
}
public static class MyBean {
public void callMe() {
System.out.println("MyBean.callMe method has been called");
}
}
public static class Events extends MainListenerSupport {
@Override
public void afterStart(MainSupport main) {
System.out.println("MainExample with Camel is now started!");
}
@Override
public void beforeStop(MainSupport main) {
System.out.println("MainExample with Camel is now being stopped!");
}
}
}
下一步只需转到http://localhost:8081你应该会看到一条欢迎信息。更进一步地调整它会很有趣。
CamelContext通常不是这样初始化/启动的。请考虑使用原型开始,然后添加Jetty Maven依赖项并查看是否可以重现错误。
骆驼原型可在此处找到:http://camel.apache.org/camel-maven-archetypes.html
我正在尝试配置我的jetty环境,使其能够有一个安全的连接。 我运行了官方jetty文档中描述的步骤:https://www.eclipse.org/jetty/documentation/9.4.31.v20200723/jetty-ssl-distribution.html。但没有成功.. 重新创建的步骤: java-jar start.jar--create-startd--add-to-s
我使用Talend Open Studio 5.6 ESB,创建了一个apache camel路由。我的路线终点是: 在此之前,我覆盖了jetty组件中的url以调用远程服务。此服务需要30秒才能回复,路由关闭连接并发送错误503。如何增加超时。 原木骆驼: 回复:
我正在重构一个遗留的Java代码库,以向泽西资源类提供Guice驱动的依赖注入。 这是一个精简的应用程序,它使用传统的Jetty/泽西设置(请参阅 我无法理解各种组件以及它们是如何协同工作的。因此,我不断得到以下错误: 如果我在< code>FooResource的构造函数中直接访问Guice注入器,它就会工作。这告诉我Jetty/Jersey的东西被正确地设置来服务资源,Guice能够正确地构建
我将从Groovy脚本中启动Jetty Web服务器。Jetty的默认日志记录是stderlog。现在我想配置这个日志记录,但文档中只提到了在使用start时如何进行配置。jar方法启动Jetty。 我如何配置,更具体地说,配置旋转日志文件,与StdErrLog嵌入式码头?
我在Jetty服务器上的JNDI配置有问题。我无论如何都不能配置它,使Spring(3.0.5)之后可以检索JNDI变量。 我有一些凭证,我不想存储在属性中,这样它就不会存在于git repo中。我的web应用程序正在Jetty(最新版本9.2.3)上运行,因此我想到了在Jetty web应用程序上下文中存储这些凭证的想法。Jetty通过。所以我创建了jetty env。我的WEB-INF/中的x
更具体地说,我得到了包含所有依赖项的可执行war。应用程序在没有jndi数据源的情况下启动,就像一个魅力一样,用jndi数据源运行它失败了。我认为在这样的配置中没有jetty.xml的位置,因此jetty-env.xml也不适用,因为jetty在默认情况下不会读取它。我试图使用jetty-web.xml进行jndi数据源配置,但jetty未能部署应用程序,返回503错误代码。我用的是9-M4型飞机