使用iServer JAVA API访问iServer数据服务进行数据操作示例

作者:MR

    之前一篇博客(SuperMap iServer JAVA API介绍)介绍了SuperMap iServer JAVA API(以下简称JAVA API)用处、用法,本篇介绍JAVA API访问iServer数据服务的具体应用,并提供工程源码下载。作为示例,这里使用eclipse创建一个控制台应用。
###一、创建JAVA工程&主类
    创建一个Java工程,工程下新建lib文件夹,复制%iServerROOT%\WEB-INF\lib\iserver-all-8.1.1-14511.jarlib文件夹里,并将iserver-all-8.1.1-14511.jar右键添加到Build Path里。
    本文新建一个包,命名dataSample,其下创建一个类,命名DataSample,添加main方法。工程结构如图(JDK1.8):

目录

###二、获取数据服务提供者
    本文访问的数据服务REST资源根目录如下:

http://support.supermap.com.cn:8090/iserver/services/data-world/rest

    创建/释放RestDataProvider方法如下:

	/**
	 * @param RootURL
	 *            数据服务REST资源根目录
	 * @return
	 */
	private static RestDataProvider getDataProvider( String rootURL )
	{
		// 服务提供者设置
		RestDataProviderSetting ProviderSetting = new RestDataProviderSetting( );
		ProviderSetting.restServiceRootURL = rootURL;
		// 创建服务提供者
		return new RestDataProvider( ProviderSetting );
	}

	/**
	 * @param provider
	 *            待释放资源的服务提供者对象
	 */
	private static void dispose( RestDataProvider provider )
	{
		if ( provider != null )
		{
			provider.clearCache( );
			provider.dispose( );
		}
	}

    RestDataProvider类参考最新在线地址如下(建议使用CHM格式):

http://support.supermap.com.cn:8090/iserver/help/html/mergedProjects/iServerJavadoc/com/supermap/services/providers/RestDataProvider.html

###三、业务逻辑实现

    接下来就可以使用服务提供者对象提供的方法实现各种业务逻辑了,本文实现创建一个点数据集并添加点。main方法如下:

private static final String DATAURL = "http://support.supermap.com.cn:8090/iserver/services/data-world/rest";

	/**
	 * @param args
	 */
	public static void main( String[ ] args )
	{
		long start = System.currentTimeMillis( );
		RestDataProvider dataProvider = getDataProvider( DATAURL );
		final String datasourceName = "World";
		final String copyDSName = "Capitals";
		final String newDSName = "TESTPoints";
		// 新建数据集(这里就不new完挨着赋值了,复制一个,目前通过REST API创建数据集不支持设置字段)
		Boolean flag = true;
		try
		{
			if ( dataProvider.copyDataset( datasourceName, copyDSName, datasourceName, newDSName ) )
			{
				System.out.println( copyDSName + " 数据集已复制,新数据集为 " + newDSName );
			} else
			{
				flag = false;
			}
		} catch ( Exception e )
		{
			System.out.println( newDSName + " 数据集已存在" );
		}
		if ( flag && dataProvider.clearFeatures( datasourceName, newDSName ) )
		{
			System.out.println( newDSName + "数据集已清空" );
			int[ ] ids = new int[ ] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
			List< Feature > targetFeatures = dataProvider.getFeature( datasourceName, copyDSName, ids, null );
			// 未指定全部字段及对应字段值
			Feature pt1 = new Feature( );
			pt1.fieldNames = new String[ ] { "CAPITAL" };
			pt1.fieldValues = new String[ ] { "零零" };
			pt1.geometry = new Geometry( );
			pt1.geometry.parts = new int[ ] { 1 };
			pt1.geometry.points = new Point2D[ ] { new Point2D( 0.0, 0.0 ) };
			targetFeatures.add( pt1 );
			EditResult result = dataProvider.addFeatures( datasourceName, newDSName, targetFeatures );
			System.out.println( newDSName + "数据集增加要素是否成功:" + result.succeed );
			System.out.println( newDSName + "数据集增加要素数量:" + result.ids.length );
		}
		// // 数据集信息
		// DatasetInfo tempif = dataProvider.getDatasetInfo( datasourceName,
		// copyDSName );
		// DatasetVectorInfo dsvctif = new DatasetVectorInfo(
		// (DatasetVectorInfo) tempif );
		// dsvctif.name = newDSName;
		//
		// // 创建点数据集
		// if ( dataProvider.createDataset( datasourceName, dsvctif ) )
		// {
		// System.out.println( "创建数据集 " + newDSName + "成功!所有数据集如下:" );
		// List< String > dtnms = dataProvider.getDatasetNames( datasourceName
		// );
		// for ( String s : dtnms )
		// {
		// System.out.println( s );
		// }
		// System.out.println( "-------------------" );
		// // 创建成功添加点
		// int[ ] ids = new int[ ] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
		// List< Feature > targetFeatures = dataProvider.getFeature(
		// datasourceName, copyDSName, ids, null );
		// EditResult result = dataProvider.addFeatures( datasourceName,
		// newDSName, targetFeatures );
		// System.out.println( newDSName + "数据集添加要素是否成功?" + result.succeed );
		// System.out.println( newDSName + "数据集添加要素数量" + result.ids.length );
		// System.out.println( newDSName + "数据集删除结果: " +
		// dataProvider.deleteDataset( datasourceName, newDSName ) );
		// }
		dispose( dataProvider );
		System.out.println( "done,cost:" + ( System.currentTimeMillis( ) - start ) );
	}

    运行时会有报错**java.lang.NoClassdeFoundError,这是因为我们虽然都只使用了iserver-all-8.1.1-14511.jar包里的方法,但是该包还会import别的包,所以编译没错,运行时就会报错了,目前暂无便捷的依赖管理工具去自动列出需要的依赖项,只能手动和根据报错添加依赖的包;反编译查看import也不是很好用,需要反编译你使用的类,找到它的依赖、依赖的依赖…,所以本文建议排除法,JAVA API所有的依赖都在%iServerROOT%\WEB-INF\lib目录下,把这些jar包都加到Build Path就行了,并且,已知本文使用的方法不涉及SuperMap iObjects Java**,所以可以去掉com.supermap开头的(即Java组件的)的jar包,也不需要配置Java组件环境,剩下的jar先通过文件名排除一部分,然后一个一个去掉看运行结果来排除剩下的。

###结果

结果

###其他&下载
    可以输出工程为jar,使用java命令运行(可以写成批处理脚本或shell脚本)即可,本文不再介绍。
    排除无用jar包后的工程如下,使用eclipse打开工程即可运行查看结果。

使用iServer JAVA API访问iServer数据服务进行数据操作示例工程
http://download.csdn.net/detail/supermapsupport/9833944

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值