2012-11-19 34 views
0

我想用一個聲明服務,但引發錯誤的綁定方法不北京時間入店或沒有找到!聲明服務綁定,找不到方法

消息[SCR] ComponentReference.bind():綁定方法'setAreaManagment'未找到或無法訪問!

我找不到我的錯誤。這裏是我的服務接口:

IManagmentService

public interface IAreaManagmentService { 
    SurfacePolygon getAreaByDatabaseID(int id); 

    void setAreaVisibility(int databaseId, boolean visible); 

    public void addArea(Integer objectId, Integer databaseId, double biggestLat, double biggestLon, double smallestLat, 
      double smallestLon, String name, Date date); 

    void removeAllAreas(); 

    public LinkedList<DisplayedArea> getAreas(); 
} 

稱爲GlobeView(擴展ViewPart時)實現了這個接口的類。

這裏是XML的文件,其中的服務是「發佈」

<?xml version="1.0" encoding="UTF-8"?> 
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="visualization-servcieprovider"> 
    <implementation class="GlobeView"/> 
    <service> 
     <provide interface="IAreaManagmentService"/> 
    </service> 
</scr:component> 

這是XML的文件,其中的服務應該綁定:

<?xml version="1.0" encoding="UTF-8"?> 
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" enabled="true" name="visualization-detailsview"> 
    <implementation class="DetailsView"/> 
    <reference bind="setAreaManagment" cardinality="1..1" interface="IAreaManagmentService" name="IAreaManagmentService" policy="dynamic" unbind="unsetAreaManagment"/> 
</scr:component> 

這兩種方法都在DetailsView.java

public void setAreaManagment(IAreaManagmentService areaManagment) { 
     System.out.println("AreaManagmentSet"); 

     this.areaManagment = areaManagment; 

     System.out.println("WAS SET " + this.areaManagment); 
    } 

    public void unsetAreaManagment(IAreaManagmentService areaManagmentIn) { 
     System.out.println("AreaManagmentUnSet"); 
     this.areaManagment = null; 
    } 

(當然還有一個私人的IAreaManagmentService areaMangment ;-))

我的錯誤在哪裏?我從Lars Vogella那裏讀到了這個工廠的教程,但我找不到我的錯誤

編輯:我添加了Service-Component:OSGI-INF/serviceprovider.xml,OSGI-INF/managmentConsumer.xml到我的Manifest以及

+1

您不在服務描述符中指定任何軟件包名稱 - 您確定沒有歧義嗎? –

+0

是的。您需要完全限定的類型名稱。您還需要確保服務提供者和服務使用者正在使用包含服務類型的相同包。 –

回答

0

兩件事情,可能是這個問題:

1)確保你的OSGI-INF文件夾是在構建路徑上通過在清單編輯器的編譯選項卡中選擇它。

2)將這些屬性添加到您的兩個服務activate =「activate」immediate =「true」,強制該包激活。

3)另一個技巧是將策略從動態移除到「靜態」,我敢打賭這將解決您的問題。 - Duncan

P.S 我沒有看到的其他內容是您的實現類的完全限定類名。