我正在尝试导出接口(ITestRunable),我确定我已经正确链接了context.xml和osgi.xml文件中的所有内容,但它无法正常工作。错误是:

“ me.overlaymanagement”的应用程序上下文初始化已超时等待(objectClass = me.overlaymanagement.testing.ITestRunable)

有任何想法吗?

代码:ITestRunable的Spring文件

context.xml

  <bean id="testingRunable"   class="me.overlaymanagement.testing.Testing"
init-method="startUp" destroy-method="shutDown">
  </bean>


osgi.xml

<osgi:service id="testingRunable" ref="testingRunable">
    <osgi:interfaces>
      <value>me.overlaymanagement.testing.ITestRunable</value>
    </osgi:interfaces>
 </osgi:service>


Spring文件导入到主系统

context.xml

<bean id="overlaymanagementsystem"
    class="me.overlaymanagementsystem.OverlayManagementSystem"
    init-method="startUp" destroy-method="shutDown">
    <property name="testingRunable" ref="testingRunable"/>
 </bean>


osgi.xml

<osgi:reference id="testingRunable" cardinality="1..1"
  interface="me.overlaymanagement.testing.ITestRunable">
</osgi:reference>


主系统中ITestRunable的Gettor和Settors

public class OverlayManagementSystem{
     ...
    protected ITestRunable testingRunable;
    ....
    public ITestRunable getTestRunable() {
    return testingRunable;
    }

    public void setTestRunable(ITestRunable testingRunable) {
    this.testingRunable = testingRunable;
    }
 }


谁能看到一个问题?

最佳答案

好的,所以我设法找到了问题。实际上有两件事:


它不喜欢我在ITestRunable代码所在的位置设置了bean ID和服务ID。一旦将服务ID名称更改为其他名称,它就给我带来了有关无效的gettor和settor的新错误,这是下一步。
经过一番研究后,我发现导入服务的getter和setter必须与该服务的bean属性名称相同。在我的bean中注意到:




和获取/设置被定义为:“ getTestRunable / setTestRunable”。将它们更改为getTestingRunable和setTestingRunable为我解决了这个问题。

我希望这对其他人有帮助。

09-27 13:01