在IDE里创建一个Web Service工程是很容易的,只要找到【File】-【New】-【Web Service】菜单就可以了,点击这个菜单将会弹出下面的对话框:
这里的Web service type有两种选择:一种是Bottom up、另外一种是Top down。这两种方式分别对应了自下而上和自上而下两种新建Web Service的模式。如果你已经有了实现的功能类,现在想要把它封装成Web Service,那么你应当选择Bottom up模式;如果你首先定义了Web Service的描述文件(wsdl),现在想要实现这个wsdl的功能,那么你应当选择Top down模式。
不管通过Bottom up还是Top down方式,当你把Web Service的框架搭起来以后,剩下的工作就是如何去实现Web Service的功能了。下面让我们通过讲解一个网络分析Web Service的实现,来了解自定义Web Service的运作。
这个网络分析的Web Service需要的功能是预先定义好的,其中有比如上下游追溯、连通性分析等等,这里只挑连通性分析这个小功能进行说明。
首先,我们通过给定的wsdl新建了一个Web Service工程,然后找到实现类,在这个类中已经根据wsdl自动生成了对应各个功能的方法,这里就连通性分析功能进行讲解,对应的方法是connectivity,下面是这个方法的实现:
public
class
TestGISAnalysisSoapBindingImpl implements
TestGISAnalysisPortType
{
private
GeoNetworkAnalysis geoNetAnalysis;
public
TestGISAnalysisSoapBindingImpl()
{
geoNetAnalysis = new
GeoNetworkAnalysis();
}
public
java.lang.String connectivity(String sourceDeviceType
, String sourceDeviceID
, String targetDeviceType
, String targetDeviceID,
String type) throws
java.rmi.RemoteException
{
String result = "";
try
{
result = geoNetAnalysis.findPath(Integer.parseInt
(sourceDeviceType)
, Integer.parseInt
(sourceDeviceID)
, Integer.parseInt
(targetDeviceType)
, Integer.parseInt
(targetDeviceID)
, type);
}
catch
(Exception ex)
{
ex.printStackTrace();
}
return
result;
}
}
怎么这么简单?当然,因为这里对功能做了封装,真正的分析功能在geoNetAnalysis这个对象中,在这个对象中进行的都是直接对AO的操作,我们通过一些代码片段来看一下这个功能的实现:
public
class
GeoNetworkAnalysis
{
public
GeoNetworkAnalysis()
{
try
{
EngineInitializer.initializeEngine();
new
AoInitialize().initialize(esriLicenseProductCode.esriLicenseProductCodeArcInfo);
ResourceBundle bundle = ResourceBundle.getBundle("geometrynetwork");
traceFlowSolver = new
TraceFlowSolver();
INetSolver netSolver = (INetSolver) traceFlowSolver;
geometricNetwork = openNetwork(bundle.getString("workspacePath"),
bundle.getString("datasetName"),bundle.getString("networkName"));
pNetElements = new
INetElementsProxy(geometricNetwork.getNetwork());
netSolver.setSourceNetworkByRef(geometricNetwork.getNetwork());
...
}
catch
(Exception e)
{
e.printStackTrace();
}
}
/**
* 连通性分析
*
* @param
sourceLyrID
* 起点的图层ID
* @param
sourceFeatID
* 起点的要素ID
* @param
targetLyrID
* 终点的图层ID
* @param
targetFeatID
* 终点的要素ID
* @param
type
* @return
*/
public
String findPath(int
sourceLyrID
, int
sourceFeatID
, int
targetLyrID
, int
targetFeatID
, String type) throws
Exception
{
this
.putTraceOrigins(getOriginPoints(sourceLyrID
,sourceFeatID
,targetLyrID
,targetFeatID));
IEnumNetEID[] junctionEIDS = new
IEnumNetEID[1];
IEnumNetEID[] edgeEIDs = new
IEnumNetEID[1];
Object[][] costArray = new
Object[1][1];
traceFlowSolver.findPath(esriFlowMethod.esriFMConnected,
esriShortestPathObjFn.esriSPObjFnMinSum
, junctionEIDS
, edgeEIDs
, 1
, costArray);
...
Set junctions = this
.getSolverResultFeature(junctionEIDS[0]);
Set edges = this
.getSolverResultFeature(edgeEIDs[0]);
return
FeatureUtil.networkResultToJSON(junctions, edges);
}
}
注意,上面只是代码片段,整个功能的实现代码太长了,和我们要了解的Web Service其实又没有什么关系,所以,就看个大概吧。
做完这些,在很多场合都可以调用这个自定义的Web Service了,比如上面这个功能我们是在Flex中调用的:
<!-- [CDATA[
<p>private function analysisConnectivity():void
<p>{
<p>opt = wsAnalysis.getOperation("connectivity");
<p>args = new Object();
<p>args.sourceDeviceType = g1.attributes.layerId;
<p>args.sourceDeviceID = g1.attributes.OBJECTID;
<p>args.targetDeviceType = g2.attributes.layerId;
<p>args.targetDeviceID = g2.attributes.OBJECTID;
<p>args.type = "connectivity";
<p>opt.arguments = args;
<p>opt.send();
<p>}
<p>]]-->
showBusyCursor="true"
concurrency="last"
result="onWsAnalysisResult(event)"
fault="onWsAnalysisFault(event)"/>
试想一下,是不是不同的业务系统之间交互也可以做了呢?
分享到:
相关推荐
《ArcGIS Server Java ADF案例教程》是一本深入探讨地理信息系统(GIS)技术的专业书籍,主要聚焦于Esri公司的ArcGIS Server平台与Java Application Development Framework(ADF)的结合应用。ArcGIS Server是Esri的...
【ArcGIS Server Java ADF案例教程】是一份深入讲解如何使用ArcGIS Server与Java Application Development Framework(ADF)进行地理信息系统开发的教程。本教程旨在帮助IT专业人士,特别是那些在地理信息科学领域...
### ArcGIS Server Java ADF案例教程:深入解析与实践指南 #### 1. 引言:探索ArcGIS Server Java ADF的世界 ArcGIS Server Java ADF(Application Development Framework)为地理信息系统(GIS)开发者提供了一个...
### ArcGIS Server Java ADF 相关知识点 #### 一、概述 在2004年的第六届ArcGIS暨ERDAS中国用户大会上,林青(Cherry Lin)介绍了如何通过Java ADF(Application Development Framework)来开发和部署ArcGIS ...
### ArcGIS Server Java ADF 案例教程 #### 前言与背景介绍 《ArcGIS Server Java ADF 案例教程》是一本针对地理信息系统(GIS)开发人员的专业指南,旨在帮助读者深入了解如何使用Java应用程序开发框架(ADF)...
ArcGIS Server Java ADF案例教程提供了一个非常有价值的资源,对于那些希望深入学习和使用ArcGIS Server进行WebGIS开发的Java开发者来说,了解ADF选择JSF框架的原因以及JSF框架的特性是非常重要的。虽然参考资料有限...
接下来,《ArcGIS_Server_Java_ADF_案例教程》聚焦于使用Java Application Development Framework (ADF)开发GIS应用。ADF是Esri提供的一个基于Java的开发工具包,用于构建桌面和Web GIS应用。此教程可能包括: 1. ...
在Java环境下使用ArcGIS Server,我们可以利用ArcGIS Server for Java ADF(ArcObjects for Java Application Development Framework)进行开发,这是一种专门为构建GIS应用程序而设计的Java库。ADF提供了丰富的API...
《ArcGIS_Server_Java_ADF_案例教程》是针对地理信息系统开发的专业教程,主要关注如何使用ArcGIS Server的Java API(ADF,ArcGIS Data Framework)进行应用开发。ArcGIS Server是一款强大的地理信息处理平台,它...
ArcGIS Server 9.2相关的Web ADF Java Platform应用程序都是基于JavaServer Faces (JSF)框架构建的,用于创建互动式、地图驱动的Web应用程序。JSF是一个标准的Java EE组件模型,它允许开发者构建用户界面并与后端...
【ArcGIS Server Java 讲座】是一系列关于使用Java技术进行ArcGIS Server开发的文档,主要针对的是ArcGIS Server 9.2版本。这个讲座涵盖了多个主题,旨在帮助开发者理解和应用Java Server Faces (JSF) 技术以及...
这个“ArcGIS Server Java ADF 开发培训”教程将引导你逐步深入GISServer ADF Java的世界,通过理论学习和实践操作,提升你的GIS开发技能,使你能更好地利用Esri的平台构建高效、稳定的GIS应用程序。在学习过程中,...
ADF全称是Arcgis java Web Application Developer FrameWork,是为了开发web应用而生的一套开发框架,开发人员可以在ADF的基础上相对容易的开发出WEBGIS应用。
### ArcGIS Server 10 for Java 创建 Web ADF 实例详解 #### 一、概述 在当前电力行业的配网自动化项目中,为了更好地展现电网结构、进行停电模拟以及实时显示电网设备状态等功能,通常需要集成地理信息系统(GIS)...
在本文中,我们将探讨如何在MyEclipse中使用ArcGIS Server 10 for Java创建一个Web ADF实例。ArcGIS Server是一种强大的地理信息系统(GIS)平台,它允许开发者构建地图服务和应用程序,以便在Web环境下提供地理信息...
标题与描述均提到了“定制Java Arcgis server 9.2 Web Tasks WebADF”,这表明内容将围绕在ArcGIS Server 9.2环境下,利用Java技术进行WebADF(Web Application Development Framework)的自定义Web任务开发展开。...
### 构建基于ArcGIS Server Web ADF与Ajax的Java应用程序 #### 一、课程概述与目标 在本次由ESRI Developer Summit 2008提供的培训课程中,主题为“构建基于ArcGIS Server Web ADF与Ajax的Java应用程序”,旨在...
《ArcGis_Server10_for_java创建Web_Adf实例.doc》可能是关于如何使用ArcGIS Server 10与Java Web ADF创建实例的详细教程。这份文档可能涵盖了如下内容: 1. **环境配置**: 如Java SDK、ArcGIS Server SDK for Java...
本篇文章将基于提供的文件信息,深入解析如何使用Java进行ArcGIS Server 9.2 Web应用开发的关键知识点,包括工作坊资料获取、演示文稿大纲、Web ADF任务框架及其配置,以及定制任务的实现。 ### 获取工作坊资料 ...