使用iServer REST API发布工作空间(Java)

作者:MR

    前面的博客介绍了什么是iServer REST API(SuperMap iServer REST API介绍),本文介绍其中一种应用的具体实现-JAVA语言通过 REST API 在 SuperMap iServer 服务器上发布一个工作空间为REST地图服务和REST数据服务。
###一、使用到的iServer REST 资源
    本文采用先登录iServer再设置cookie以访问iServer管理资源的方式实现发布工作空间,所以使用到的iServer REST资源有两个,登录工作空间资源。


     登录URI:http://{服务器域名/IP}:{端口,默认8090}/iserver/services/security/login.{表述},其中,支持的表述有: rjson、json、html、xml,不同的表述请求体和响应会不同。

    登陆资源POST请求参数如下:

名称类型含义
usernameString【必选参数】 用户名。
passwordString【必选参数】 密码。
remembermeboolean记住我。如果为 true,系统会记住用户的登录状态,
下次打开页面不需要重复登录。默认为 false。

 
     登录资源响应如下:

字段类型说明
succeedboolean是否成功登录。
refererString登陆后跳转的页面。

     工作空间URI:http://{服务器域名/IP}:{端口,默认8090}/iserver/manager/workspaces.{表述},其中,支持的表述有: rjson、json、html、xml,不同的表述请求体和响应会不同。
     工作空间资源参数较多,不再详细列出,只列出本文使用到的POST请求参数,详情请参考iServer帮助文档

名称类型含义
workspaceConnectionInfoString【必选参数】工作空间路径或者数据库的连接信息。
如数据库型工作空间(以下是ORACLE)表示如下:
“workspaceConnectionInfo”:
“server=orcl203;username=test;
password=test;type=ORACLE;database=;
name=testWorkSpace;driver=null”
servicesTypesServiceType[]【必选参数】 发布的服务类型,
发布多个服务时用逗号隔开。
isDataEditableboolean当 servicesTypes 为 RESTDATA、WFS100、
WCS111、WCS112 时必选。
表示数据服务中的数据是否可编辑,
如果为 false 则不可编辑。

 
     工作空间资源响应数组每项如下:

字段类型说明
serviceAddressString发布服务的地址。
serviceTypeServiceType发布服务的类型。

###二、登陆获取cookie
    使用 工作空间资源需要iServer身份认证,必须是具有发布工作空间权限的iServer用户才能使用,认证的方式有两种,Token和登陆,这里使用登陆。
    使用json表述(json字符串)的请求体如下:

{
	"username":"admin",
	"password":"Admin@123",
	"rememberme":"true"
}

    使用java.net.HttpURLConnection的实例去发送POST请求即可,登陆方法如下:

	/**
	 * 登陆iServer
	 * 
	 * @param ipport
	 *            iServer服务根目录,比如:"http://localhost:8090"
	 * @param username
	 *            登陆iServer的用户名
	 * @param passwor
	 *            登陆iServer的密码
	 * @return String cookie
	 */
	private String login( String ipport, String username, String passwor )
	{
		try
		{

			String json = "{\"username\": \"" + username + "\",\"password\": \"" + passwor
					+ "\",\"rememberme\": \"true\"}";

			URL url = new URL( ipport + "/iserver/services/security/login.json" );
			HttpURLConnection connection = (HttpURLConnection) url.openConnection( );
			connection.setDoInput( true );
			connection.setDoOutput( true );
			connection.setRequestMethod( "POST" );
			connection.setUseCaches( false );
			connection.setInstanceFollowRedirects( true );
			connection.setRequestProperty( "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8" );
			connection.connect( );
			DataOutputStream out = new DataOutputStream( connection.getOutputStream( ) );

			out.writeBytes( json );
			out.flush( );
			out.close( );
			
			// 读取响应结果sbf,本文只需要拿到cookie
			//BufferedReader reader = new BufferedReader( new InputStreamReader( connection.getInputStream( ) ) );
			//String lines;
			//StringBuffer sbf = new StringBuffer( );
			//while ( ( lines = reader.readLine( ) ) != null )
			//{
			//	lines = new String( lines.getBytes( ), "utf-8" );
			//	sbf.append( lines );
			//}
			//reader.close( );
			//connection.disconnect( );
			
			return connection.getHeaderField( "set-cookie" );
		} catch ( MalformedURLException e )
		{
			e.printStackTrace( );
		} catch ( Exception e )
		{
			e.printStackTrace( );
		}
		return "";
	}

###三、发布工作空间
    发布工作空间的方法与登陆一样,不过发布工作空间需要iServer身份认证,在请求头带上登陆后拿到的cookie就能通过身份认证了,请求头设置cookie的方法如下:

// String cookie = login( ipport, username, passwor );
HttpURLConnection connection = (HttpURLConnection) url.openConnection( );
connection.setRequestProperty( "cookie", cookie );

    使用json表述(json字符串)的请求体如下(发布文件型工作空间为REST 地图服务、REST 数据服务,且数据服务可编辑):

{
	"servicesTypes":["RESTMAP", "RESTDATA"],
	"workspaceConnectionInfo":"F:/Data/TestData.smwu",
	"isDataEditable":"true"
}

    需要注意上述路径是iServer 服务器上的路径,需要保证服务器上该文件存在,且注意Windows、Linux上路径都使用“/”分隔;发布数据库工作空间需要使用iServer服务器上的数据库链接字符串,保证服务器使用该链接信息能连上对应数据库。
    另,若需要上传文件型工作空间(和数据源)可以使用REST API uploadTask资源,该资源同样需要对应权限的身份验证。

本文示例代码下载地址:http://download.csdn.net/detail/supermapsupport/9870147

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值