我编写了一个简单的apache camel项目,该项目最终将部署在FUSE容器中。现在,我只是想让一个基本的单元测试正常工作。我使用这个例子作为起点。
我编写了有效的单元测试,但当我包含蓝图文件时,我在测试输出中得到以下条目:
Bundle TestMainRoute正在等待命名空间处理程序[http://camel.apache.org/schema/blueprint]
测试失败,堆栈跟踪如下:
java.lang.RuntimeException: Gave up waiting for service (objectClass=org.apache.camel.CamelContext)
at org.apache.camel.test.blueprint.CamelBlueprintHelper.getOsgiService(CamelBlueprintHelper.java:240)
at org.apache.camel.test.blueprint.CamelBlueprintHelper.getOsgiService(CamelBlueprintHelper.java:202)
at org.apache.camel.test.blueprint.CamelBlueprintTestSupport.createCamelContext(CamelBlueprintTestSupport.java:352)
at org.apache.camel.test.junit4.CamelTestSupport.doSetUp(CamelTestSupport.java:247)
at org.apache.camel.test.junit4.CamelTestSupport.setUp(CamelTestSupport.java:217)
at org.apache.camel.test.blueprint.CamelBlueprintTestSupport.setUp(CamelBlueprintTestSupport.java:183)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
我的xml很简单:
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
<routeContext id="validationRoute" xmlns="http://camel.apache.org/schema/blueprint" >
<route id="validation">
<from uri="direct:validation" />
<log message="validating..." />
</route>
</routeContext>
代码是:
public class RouteTest extends CamelBlueprintTestSupport {
@Test
public void testValidationRoute() throws Exception {
DefaultExchange r1 = new DefaultExchange(context);
r1.getIn().setBody("");
Exchange response1 = template.send("direct:validation", r1);
}
protected String getBlueprintDescriptor() {
return "OSGI-INF/blueprint/blueprint.xml";
} }
注意:验证路线由我的主要camel上下文引用:
public class IntegrationFramework extends RouteBuilder {
public void configure() {
from("netty-http:http://localhost:8457/broker/router.jsp").convertBodyTo(String.class)
.log("http router "+simple("${body}").getText())
.to("direct:validation");
}
我有其他单元测试和日志记录,表明这部分正在工作。
事实证明,routeContext只存在于xml dsl的上下文中,不能从JavaDSL中引用。在我看来,这是一个错误,因为它限制了混合xml和java配置的灵活性。
通过将routeContext更改为camelContext,解决了这个问题。
另请参见这个问题:Camel:将routeContext导入外部camelContext
也相关:https://issues.apache.org/jira/browse/CAMEL-5717
我也有同样的错误,但后来又有了另一个设置@mdarwin,所以我也想与您分享我的解决方案。
我使用驼峰原型蓝图启动了一个项目,因此我的名称空间如下所示:
blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
xsi:schemaLocation="
http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd
http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0 http://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.1.0.xsd">
起初,它是一个非常简单的蓝图,带有计时器和文件endpoint,因此这里的实现并不重要。我将包部署到Karaf,为此我安装了aries blueprint功能。
我错过的,我感到非常惭愧的是,也安装了camel。为此,我必须添加repo并安装它,您可以在这里阅读:
feature:repo-add camel
feature:install camel
现在命名空间处理程序就在那里。
我认为这是显而易见的,但仍然需要几分钟才能弄清楚。
问题内容: 我编写了一个简单的Apache骆驼项目,该项目最终将部署在FUSE容器中。现在,我只是在尝试进行基本的单元测试。我以此处的示例为起点。 我已经编写了可以工作的单元测试,但是当我包含一个蓝图文件时,我在测试输出中得到以下条目: 并且测试失败并显示以下堆栈跟踪: 我的xml很简单: 如代码所示: 项目清单 }} 注意,验证路径由我的主要骆驼上下文引用: 我还有其他单元测试和日志记录,表明该
我试图在fuse容器中部署我的应用程序,但我得到一个错误-Bundle正在等待命名空间处理程序[http://camel.apache.org/schema/blueprint、http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0、http://karaf.apache.org/xmlns/jasypt/v1.0.0. 当我尝试创
我正在创建一个JavaFX应用程序。我可以启动应用程序并登录,但当我尝试访问客户场景时,会出现以下错误: (提前为所有代码道歉 这里是CustomerScene。fxml: 以下是我的控制器类(正在进行中): 错误说它找不到事件处理程序。我不知道为什么,因为我已将@FXML附加到函数。我还尝试将函数公开(fxml文档仍然建议这两者,在第27行显示错误-
XPath如何处理XML命名空间? 如果我使用 为了解析下面的XML文档,我得到了0个节点。 但是,我没有在XPath中指定名称空间(即不是路径的每个标记的前缀)。如果我没有明确告诉XPath,它怎么知道我想要哪个?我认为在这种情况下(因为只有一个名称空间),XPath可以完全忽略。但如果有多个名称空间,事情可能会变得糟糕。