宣言型サービスを使用したいのですが、bind メソッドにアクセスできない、または見つからないというエラーがスローされます。
!MESSAGE [SCR] ComponentReference.bind(): 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>
これら 2 つのメソッドは、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 もマニフェストに追加しました