Born For SOA--Server对于SOAP的支持

 ArcGIS Server的服务可以通过Local或者Internet两种方式进行连接,Local方式直接连接到SOM上,本地的对象如何和SOM进行交互呢?事实上是通过AO进行交互的,所以你必须在本地有AO对象才可以进行连接,我们平常使用ArcCatlog就可以这样连接,或者通过Engine也可以进行这样的连接。而Internet方式直接连接到Web Service的引用地址,它是通过本地对象连接的,对于Java ADF而言,本地对象表示连接ArcGIS Server的类存在于本地JRE中。Local连接可以改变Server Object的状态,而Internet连接由于只是通过SOAP API进行访问,所有的交互都是无状态的。
对于SOAP的支持是在AO这一级,所以处理每一次SOAP请求,都会需要AO的介入。有两个接口特别要注意一下,一个是IServiceCatalogAdmin,一个是IRequestHandler,IRequestHandler我们已经在上面一节提到过,而IserviceCatalogAdmin是用来得到Server Object所提供服务的WSDL的。
SOM用来向客户端提供WSDL,所有支持的服务类型的WSDL保存在ArcGIS Server的XMLSchema目录下。
我们可以使用IServiceCatalogAdmin接口得到所有服务类型的WSDL,如下面的代码所示:


[Copy to clipboard] [ - ]
CODE:
private void getWSDL(String domain,String username,String password,String myserver){
ServerInitializer initializer = new ServerInitializer();
initializer.initializeServer(domain,username, password);
ServerConnection gisconnection;
try {
       gisconnection = new ServerConnection();
       gisconnection.connect(myserver);
// Get reference to ServerObjectManager class.

IServerObjectManager som =gisconnection.getServerObjectManager();
IServerContext serverContext = som.createServerContext("usa", "MapServer");
IServiceCatalogAdmin2 isc = (IServiceCatalogAdmin2)serverContext.createObject(ServiceCatalog.getClsid());
//       Catalog WSDL
byte[] bitscatalog = isc.getCatalogDescriptionDocument("Catalog","http://localhost");
String catalog_wsdl = new String(bitscatalog,"UTF8");
System.out.println(catalog_wsdl);
//       Service WSDL
byte[] bitsservice =isc.getDescriptionDocument("usa", "MapServer","http://localhost");
String service_wsdl = new String(bitsservice, "UTF8");
System.out.println(service_wsdl);
} catch (UnknownHostException
e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}

 
事实上,ArcGISServer每一个ServerObject都实现了IRequestHandler接口,都可以响应SOAP的请求,可以使用下面的方法得到ServerObject的IRequestHandler,并且得到当前地图的Default Map Name.

[Copy to clipboard] [ - ]
CODE:
private void getMapName(IServerContext serverContext){
                  IRequestHandler irh;
                  try {
                            irh =(IRequestHandler)serverContext.getServerObject();
                           String soap_request ="<?xml version='1.0' encoding='utf-8' ?>";
                          soap_request +="<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/' xmlns:tns='http://www.esri.com/schemas/ArcGIS/9.2'>";
                        soap_request +="<soap:Body>";
                      soap_request +="<tns:GetDefaultMapName>";
                      soap_request +="</tns:GetDefaultMapName>";
                      soap_request +="</soap:Body>";
                      soap_request +="</soap:Envelope>";
                    String soap_response =irh.handleStringRequest("map,query,data", soap_request);
                  } catch (AutomationException e) {
                            e.printStackTrace();
                  } catch (IOException e) {
                            e.printStackTrace();
                  }
         }

 
所以,ArcGIS Server处理SOAP请求的能力是与生俱来的,从Server Object诞生那一天起,它就能处理SOAP请求。从而使通过Web Service的方式调用GIS功能变得异常简单。当然,我们一般都不会想Server Object直接发送请求,根据WSDL的描述,通过发送和接受SOAP请求来访问ArcGIS Server工作量十分巨大,那么我们来看看如何在ADF中使用Web Service

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值