首页 / 浏览问题 / / 问题详情
iserver java api接口频发错误
12月28日, 2020
使用产品:iserver 9d 912 操作系统:win server 2012 x64
数据类型: oracle 11g x64
问题详细描述:最近几天iserver频繁出问题,差不多每天都要重启一次,定位不到原因。

调用RestDataProvider 的updateFeatures()和addFeatures()方法

表现为用java api接口 连接时有的时候连接不上,打印出如下异常:

connecting Gis Data server .............................
com.supermap.services.components.spi.ServiceRuntimeException: com.supermap.services.providers.RestProviderBase$RestRequestException: 访问资源失败,code:1,001,errorMsg:The connector failed to complete the communication with the server,URL:http://192.171.100.10:8090/iserver/services/data-gisdb/rest/data/datasources.json?returnAll=true&currentProxyNode=192.171.100.7%3A8090
    at com.supermap.services.providers.RestProviderBase.handleExeption(SourceFile:695)
    at com.supermap.services.providers.RestDataProvider.getDatasourceInfos(SourceFile:529)
    at com.nari.gis.GisReadThread.gisConnect(GisReadThread.java:214)
    at com.nari.gis.GisReadThread.run(GisReadThread.java:84)
    at java.lang.Thread.run(Thread.java:748)
Caused by: com.supermap.services.providers.RestProviderBase$RestRequestException: 访问资源失败,code:1,001,errorMsg:The connector failed to complete the communication with the server,URL:http://192.171.100.10:8090/iserver/services/data-gisdb/rest/data/datasources.json?returnAll=true&currentProxyNode=192.171.100.7%3A8090
    at com.supermap.services.providers.RestProviderBase.a(SourceFile:546)
    at com.supermap.services.providers.RestProviderBase.executeRequestForByteArray(SourceFile:339)
    at com.supermap.services.providers.RestProviderBase.executeRequestForByteArray(SourceFile:297)
    at com.supermap.services.providers.RestProviderBase.executeRequestForList(SourceFile:432)
    at com.supermap.services.providers.RestProviderBase.executeRequestForList(SourceFile:416)
    at com.supermap.services.providers.RestDataProvider.getDatasourceInfos(SourceFile:527)
    ... 3 more
Gis Data Server connected fail........................

有的时候能连上,打印出如下异常:

java.lang.IllegalArgumentException: 对象已经被释放
 at com.supermap.services.providers.RestProviderBase.handleExeption(SourceFile:701)
 at com.supermap.services.providers.RestDataProvider.a(SourceFile:1339)
 at com.supermap.services.providers.RestDataProvider.a(SourceFile:482)
 at com.supermap.services.providers.RestDataProvider.getFeature(SourceFile:446)
 at com.nari.gis.GisReadThread.ReadBox(GisReadThread.java:1359)
 at com.nari.gis.GisReadThread.run(GisReadThread.java:101)
 at java.lang.Thread.run(Thread.java:748)

出问题的时候,重启iserver就好了。

连接代码如下:

private RestDataProvider gisDataReader=null;

private boolean gisConnect(){
        bGisInit = false;
        System.out.println("Connecting Gis Data server .............................");
        
        try{
            if(gisDataReader != null){
                gisDataReader.dispose();
                gisDataReader=null;
            }
            gisDataReader = new RestDataProvider(setting);
            List<DatasourceInfo> listInfo = gisDataReader.getDatasourceInfos();
            if(listInfo==null || listInfo.size()==0)
            {
                System.out.println(">>>>>>Gis Data Server access error");
                System.out.println(">>>>>> Gis host:"+gisUrl);
                System.out.println(">>>>>>Please check Gis Server status and restart tomcat!!!!!!!!!!!!");
                return false;
            }
        }catch(ServiceRuntimeException e){
            e.printStackTrace();
            System.out.println("Gis Data Server connected fail........................");
            
            return false;
        }
        catch(Exception e){
            e.printStackTrace();
            return false;
        }   
        bGisInit = true;
        System.out.println("Gis Data Server connected........................");
        return true;
    }

出问题时打开iserver web页面,相关地图的map服务空白,data服务没数据,但是用idesktop打开就没问题。

程序出问题时会调用gisConnect()自动重连,所以重启iserver后一切恢复正常。前一段时间都没问题,就是最近几天开始每天都要重启iserver一遍,请问这种故障怎么定位,是不是某个iserver的服务故障导致的?

1个回答

从错误信息反映出,你的:http://192.171.100.10:8090/iserver/services/data-gisdb/rest/data/  这个数据服务在使用时访问失败了。该数据是你的Oracle数据源的吗?
张亮  (2,842分)  名扬四海
12月29日, 2020
是的,还报过这样的错误

com.supermap.services.components.spi.ServiceRuntimeException: org.json.JSONException: A JSONObject text must begin with '{' at 1 [character 2 line 1]
    at com.supermap.services.providers.RestProviderBase.handleExeption(SourceFile:695)
    at com.supermap.services.providers.RestDataProvider.getDatasourceInfos(SourceFile:529)
    at com.nari.gis.GisReadThread.gisConnect(GisReadThread.java:214)
    at com.nari.gis.GisReadThread.run(GisReadThread.java:84)
    at java.lang.Thread.run(Thread.java:748)
Caused by: org.json.JSONException: A JSONObject text must begin with '{' at 1 [character 2 line 1]
    at org.json.JSONTokener.syntaxError(JSONTokener.java:505)
    at org.json.JSONObject.<init>(JSONObject.java:214)
    at org.json.JSONObject.<init>(JSONObject.java:357)
    at com.supermap.services.providers.RestProviderBase.a(SourceFile:575)
    at com.supermap.services.providers.RestProviderBase.executeRequestForByteArray(SourceFile:339)
    at com.supermap.services.providers.RestProviderBase.executeRequestForByteArray(SourceFile:297)
    at com.supermap.services.providers.RestProviderBase.executeRequestForList(SourceFile:432)
    at com.supermap.services.providers.RestProviderBase.executeRequestForList(SourceFile:416)
    at com.supermap.services.providers.RestDataProvider.getDatasourceInfos(SourceFile:527)
    ... 3 more
Gis Data Server connected fail........................

为什么每天都要重启iserver一遍才能正常连接?
你是在使用什么功能时导致的问题,或者说在做什么操作时出现的问题
就是不知道啊,iserver的log文件我也给了焦工了,这是用户现场的,我不知道他们到底做了什么操作。我在公司的环境里反复刷都刷不出来。
请确认一下在使用过程中用到了哪些服务,调用了哪些接口。是在iserver上做的操作还是使用iclient或者是其他产品对数据做过什么操作,我这边好定位一下呢,您描述的信息确实不足以判断问题。
这么说吧,java api只有RestDataProvider 的updateFeatures()和addFeatures()两个方法。

最近他们没有用idesktop画过图。

以前没有这个问题,某一天之后突然iserver不正常。后来我检查过,我们的底图是arcgis的瓦片,他们用idesktop画图时,需要把iserver的这个底图的服务插进idesktop再画图,但是画图的时候把底图存进去了,于是iserver就死了。后来我把他们的地图都整理了一次,把iserver的图源全删光了。但是iserver还是得每天重启一次。于是我重新解压了一个iserver,重新发布服务,现场还是每天重启。

据说以前没有这么频繁调用java api的两个方法,但是我在公司试了跑批都不会挂,现场手工操作肯定没我测试的量大。

至于是不是现场的数据库里存进了奇怪的数据,我就不知道了。
web页面的操作肯定用的java api接口,因为web涉及很多个页面,前端的人不愿意在页面里包supermap的前端js插件。

idesktop据我了解最近没有做操作。
你是在iserver上发布arcgis缓存为地图服务吗?然后在idesktop中打开web型数据源的方式加载进来的?
是的,买来的地图只有道路是数据,其它都是给的arcgis瓦片图。这个源在idesktop里现在已经删掉了,不然iserver都起不来。
请问这些数据的java 接口是线程安全的吗,如果不是的话,我在外面加锁。

另外java接口里我没找到保存workspace的,前端的脚本里有。
...