Skip To Content

10.0 Java サーバー オブジェクト エクステンションの 10.1 以降への移行

ArcGIS 10.1 で開発した Java サーバー オブジェクト エクステンション (SOE) は、10.2 以降のバージョンでも使用できます。ただし、ArcGIS Server 10.0 用に開発された SOE を 10.1 以降のバージョンに移行する場合は、SOE のソース コードに変更を加える必要があります。このトピックでは必要な変更について、および Java SOE をエクスポートするための新しい Eclipse ウィザードについて説明します。ArcGIS 10.1 以降のバージョンでは SOEManager ツールを使用しないことも説明します。

  1. SOE の ServerObjectExtProperties Java アノテーションを変更します。

    SOE が Eclipse SOE 作成ウィザードを使用して作成されている場合、生成されたコードには SOE のメタデータを保持する ServerObjectExtProperties という Java アノテーションが含まれています。ArcGIS 10.0 では、このアノテーションには以下の属性がありました。

    • displayName - ユーザーにわかりやすい SOE の表示名
    • description - SOE の複数行の説明
    • defaultSOAPCapabilities および allSOAPCapabilities - SOE のケーパビリティ
    • properties - 「名前 = 値」で表される SOE のプロパティ
    • supportsMSD - SOE が MSD ベースのサービスをサポートすることを示すフラグ

    ArcGIS 10.1 以降のバージョンでは、サービス定義に基づくマップ サービスの導入により supportsMSD 属性が不要になったため、この属性が削除されました。その他の属性に変更はありません。このため、ArcGIS 10.0 の Java SOE の ServerObjectExtProperties アノテーションを次のように変更する必要があります。これで、ArcGIS 10.1 以降で動作するようになります。

    @ServerObjectExtProperties(displayName = "Simple REST SOE", 
    	description = "My Simple REST Server Object Extension.",
    	defaultSOAPCapabilities = "", allSOAPCapabilities = "", 
    properties = "")
  2. ArcGIS 10.1 for Server 以降のバージョンのマップ サービスまたはイメージ サービスを使用するように SOE を変更します。

    ArcGIS バージョン 10.1 以降では、直接 MXD ドキュメントに基づくマップ サービスまたはイメージ サービスはサポートされません。代わりに、サービス定義がバック エンドで使用されます。

    このため、ArcGIS 10.1 以降では、com.esri.arcgis.carto.IMapServerDataAccess インターフェイスを使用して、マップ サービスまたはイメージ サービス経由で利用できるレイヤーにアクセスする必要があります。以下のコード スニペットは、サービス定義ベースのマップ サービスを通してレイヤーとして公開されているフィーチャクラスのハンドルを取得する方法を示しています。

    IServerObjectHelper soh = . . .; //accessible to SOEs at runtime
    IMapServerDataAccess mapServerDataAccess = (IMapServerDataAccess)soh.getServerObject();
    IMapServer3 ms = (IMapServer3) mapServerDataAccess;
    String mapName = ms.getDefaultMapName();
    int layerId = . . .;//integer id of the feature layer you are interested in accessing
    FeatureClass fc = new FeatureClass(mapServerDataAccess.getDataSource(mapName, layerId));