我想用一個聲明服務,但引發錯誤的綁定方法不北京時間入店或沒有找到!聲明服務綁定,找不到方法
消息[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以及
您不在服務描述符中指定任何軟件包名稱 - 您確定沒有歧義嗎? –
是的。您需要完全限定的類型名稱。您還需要確保服務提供者和服務使用者正在使用包含服務類型的相同包。 –