Перенос дополнительных модулей объектов сервера Java на версию 10.1
Перенос дополнительного модуля объектов сервера Java, разработанного для ArcGIS for Server 10.0, на ArcGIS for Server 10.1 требует внесения некоторых изменений в исходный код SOE. В данной статье описываются необходимые изменения и новый мастер Eclipse для экспорта расширений объектов сервера Java. В ней также объясняется отсутствие инструмента SOEManager в ArcGIS 10.1.
-
Изменение аннотации Java ServerObjectExtProperties в SOE.
Когда расширение объектов сервера создается с помощью мастера создания Eclipse, полученный код включает аннотацию Java, называющуюся ObjectExtProperties, которая содержит метаданные для SOE. В ArcGIS 10.0 эта аннотация имела следующие атрибуты:
- displayName – удобное отображаемое имя SOE
- description – многострочное описание SOE
- defaultSOAPCapabilities и allSOAPCapabilities – функции SOE
- properties – свойства SOE в виде имя = пары значений
- supportsMSD – указание на то, что SOE поддерживает сервисы на основе MSD.
В ArcGIS 10.1 из-за появления картографических сервисов на основе определения сервиса атрибут supportsMSD стал не нужен и был удален. Все остальные атрибуты сохранены без изменений. Поэтому для работы в ArcGIS 10.1 необходимо изменить аннотацию ServerObjectExtProperties в SOE Java для ArcGIS 10.0, чтобы она выглядела следующим образом:
@ServerObjectExtProperties(displayName = "Simple REST SOE", description = "My Simple REST Server Object Extension.", defaultSOAPCapabilities = "", allSOAPCapabilities = "", properties = "")
- Изменение SOE для использования картографических сервисов в ArcGIS for Server 10.1.
ArcGIS 10.1 не поддерживает картографические сервисы, основанные непосредственно на документах MXD. Вместо этого он поддерживает картографические сервисы, основанные на определениях сервиса.
Поэтому нужно использовать интерфейс com.esri.arcgis.carto.IMapServerDataAccess для доступа к слоям, доступным через картографический сервис в ArcGIS 10.1. Следующий фрагмент кода показывает, как получить дескриптор для класса пространственных объектов, представленного как слой, через картографический сервис, основанный на определении сервиса:
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));