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

在蓝图声明中找不到“camel blueprint”命名空间(Felix中的Aries)

皇甫飞飙
2023-03-14

我正在尝试运行一个独立的OSGi框架来运行其中的blueprint捆绑包,以执行驼峰路由。OSGi框架是Apache Felix,蓝图实现是Apache Aries。

以下捆绑包加载到框架的BundleContext

现在,我有一个测试包,它有一个蓝图定义,其中包含一个如下所示的camelContext:

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
       http://www.osgi.org/xmlns/blueprint/v1.0.0 http://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">

    <camelContext xmlns="http://camel.apache.org/schema/blueprint">
        <route id="testRoute1">
            <from uri="timer:foo?period=5000" />
            <log message="Hello world!" />
        </route>
    </camelContext>

</blueprint>

即使加载了所有捆绑包并解决了需求,蓝图容器也会给出以下日志:

[de.hff.yosgi.test1.Test] : Installing test bundle
[org.apache.aries.blueprint.container.BlueprintExtender] : Starting BlueprintContainer destruction process for bundle osgi-test1
[org.apache.aries.blueprint.container.BlueprintExtender] : Not a blueprint bundle or destruction of BlueprintContainer already finished for osgi-test1.
[org.apache.aries.blueprint.container.BlueprintExtender] : Starting BlueprintContainer destruction process for bundle osgi-test1
[org.apache.aries.blueprint.container.BlueprintExtender] : Not a blueprint bundle or destruction of BlueprintContainer already finished for osgi-test1.
[de.hff.yosgi.test1.Test] : Test bundle installed, starting
[org.apache.aries.blueprint.container.BlueprintExtender] : Starting BlueprintContainer destruction process for bundle osgi-test1
[org.apache.aries.blueprint.container.BlueprintExtender] : Not a blueprint bundle or destruction of BlueprintContainer already finished for osgi-test1.
[org.apache.aries.blueprint.container.BlueprintExtender] : Starting BlueprintContainer destruction process for bundle osgi-test1
[org.apache.aries.blueprint.container.BlueprintExtender] : Not a blueprint bundle or destruction of BlueprintContainer already finished for osgi-test1.
[org.apache.aries.blueprint.container.BlueprintExtender] : Scanning bundle osgi-test1 for blueprint application
[org.apache.aries.blueprint.container.BlueprintExtender] : Found blueprint application in bundle osgi-test1 with paths: [bundle://24.0:0/OSGI-INF/blueprint/blueprint.xml]
[org.apache.aries.blueprint.container.BlueprintExtender] : Scheduling creation of blueprint bundle osgi-test1 asynchronously
[org.apache.aries.blueprint.container.BlueprintContainerImpl] : Running blueprint container for bundle osgi-test1 in state Unknown
[org.apache.aries.blueprint.container.BlueprintEventDispatcher] : Sending blueprint container event BlueprintEvent[type=CREATING] for bundle osgi-test1
[de.hff.yosgi.test1.Test] : Test bundle started
[org.apache.aries.blueprint.container.BlueprintContainerImpl] : Running blueprint container for bundle osgi-test1 in state WaitForNamespaceHandlers
[org.apache.aries.blueprint.container.BlueprintContainerImpl] : Bundle osgi-test1 is waiting for namespace handlers [http://camel.apache.org/schema/blueprint]
[org.apache.aries.blueprint.container.BlueprintEventDispatcher] : Sending blueprint container event BlueprintEvent[type=GRACE_PERIOD, dependencies=[(&(objectClass=org.apache.aries.blueprint.NamespaceHandler)(osgi.service.blueprint.namespace=http://camel.apache.org/schema/blueprint))]] for bundle osgi-test1

这里的重要行是等待命名空间处理程序:测试包找不到骆驼蓝图命名空间。但是这个命名空间应该在安装的骆驼蓝图包中定义。

如果蓝图中没有camelContext,一切都可以正常工作(蓝图服务被加载和初始化)。

有人有过类似的问题吗?是什么阻止了测试包访问camel blueprint提供的名称空间?

共有1个答案

从经略
2023-03-14

我们通过清理依赖项修复了此问题。实际上只需要以下内容:

此外,要成功地让Camel在Aries Blueprint中运行,实例化框架时需要一个附加参数。这允许捆绑包访问sun.*包。

Iterator<FrameworkFactory> iterator = 
        ServiceLoader.load(FrameworkFactory.class).iterator();
FrameworkFactory factory = iterator.next();

Map<> configuration = new HashMap<String, String>();
configuration.put("org.osgi.framework.bootdelegation", "sun.*");
this.framework = factory.newFramework(configuration);
 类似资料:
  • 我已在中声明了命名空间。d、 ts应在全球范围内提供,如下所示: 我想将此命名空间用于TSX文件中的接口: Types cript现在告诉我:。 我的tsconfig如下所示:

  • 如何在命名空间中转发声明类。例如,下面是一个库的头文件,用户不需要知道私有的myPtr,所以当包含在头文件下面时,不需要包含boost头文件。那么我如何向前声明boost::shared_ptr以启用用户代码编译呢? MyClass.h

  • 我试图在头文件中使用前向声明来减少#includes used,从而减少用户包含我的头文件时的依赖关系。 但是,我无法在使用名称空间的地方转发decalre。参见下面的示例。 这里是我非常做作的工作代码使用下面的答案。

  • 我有困难建立一个有3个类的结构。我不确定包含/转发声明。 下面的代码一直在编译,直到我在inclino.h中添加名称空间和枚举。我从Inclinomeasure.h收到“Inclino尚未声明”。 倾斜度。h 倾斜度 倾角读数.h 结构正确吗?如何访问其他类中的枚举? 提前道谢。 编辑:我修复了名称空间的问题,把它放在一个新的文件,包括由3类。但我似乎误用了include/forward声明。

  • 问题内容: 如何在JavaScript中创建名称空间,以使我的对象和函数不会被其他同名对象和函数覆盖?我使用了以下内容: 有没有更优雅或更简洁的方法? 问题答案: 我喜欢这个:

  • 在调用axis2 1.7.5(Wsdl2Java)生成的存根时,有人知道如何解决以下问题吗? 我发现存根发送了以下请求,但没有添加/定义SOAP版本(xmlns:soapenv=”http://schemas.xmlsoap.org/soap/envelope/)这是问题的根源 因此,我尝试如下设置SoapVersionURL 甚至可以直接将存根中的名称空间设置为 但是,这两种方法仍然忽略“xml