当前位置: 首页 > 知识库问答 >
问题:

Bundle正在等待命名空间处理程序[http://camel.apache.org/schema/blueprint]

吕翰飞
2023-03-14

我编写了一个简单的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";
  1. 列表项

} }

注意:验证路线由我的主要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");
}

我有其他单元测试和日志记录,表明这部分正在工作。

共有2个答案

阳博赡
2023-03-14

事实证明,routeContext只存在于xml dsl的上下文中,不能从JavaDSL中引用。在我看来,这是一个错误,因为它限制了混合xml和java配置的灵活性。

通过将routeContext更改为camelContext,解决了这个问题。

另请参见这个问题:Camel:将routeContext导入外部camelContext

也相关:https://issues.apache.org/jira/browse/CAMEL-5717

越姚石
2023-03-14

我也有同样的错误,但后来又有了另一个设置@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可以完全忽略。但如果有多个名称空间,事情可能会变得糟糕。