首页 / 浏览问题 / 组件GIS / 问题详情
运行java实例报错找不到类,请问在哪个包
35EXP 2017年05月05日

iserver 版本是8.1.0

Exception in thread "main" java.lang.NoClassDefFoundError: com/supermap/services/rest/MethodResult
    at com.supermap.sample.RestMapProviderDemo.createMapComponent(RestMapProviderDemo.java:36)
    at com.supermap.sample.RestMapProviderDemo.main(RestMapProviderDemo.java:22)
Caused by: java.lang.ClassNotFoundException: com.supermap.services.rest.MethodResult
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)

1个回答

你好,请问是扩展iServer还是使用iServer JAVA API?
建议看看iServer帮助文档的文字说明(不要嫌字多),或者收藏下面这篇博客:
http://blog.csdn.net/supermapsupport/article/details/70158940
里面有些介绍和示例

打开本地数据建议使用JAVA组件或者扩展iServer。

1,780EXP 2017年05月05日

若是使用JAVA API的示例,检查工程引用jar包,嫌一个一个试麻烦可以把WEB-INF/lib下所有jar包都引用,参考JAVA工程:
http://blog.csdn.net/supermapsupport/article/details/71171063

package com.supermap.sample;

import java.util.ArrayList;
import java.util.List;

import com.supermap.services.components.*;
import com.supermap.services.components.commontypes.*;
import com.supermap.services.components.impl.MapImpl;
import com.supermap.services.components.spi.MapProvider;
import com.supermap.services.providers.RestMapProvider;
import com.supermap.services.providers.RestMapProviderSetting;


public class RestMapProviderDemo {
	
	
	 /**
     * @param args
     * @throws MapException
     */
    public static void main(String[] args) throws MapException {
        MapImpl mapComponent = createMapComponent();
        // SQL查询
        queryBySQLSample(mapComponent);
        // 根据显示范围出图
        getMapImageSample(mapComponent);
        mapComponent.dispose();
    }

    public static MapImpl createMapComponent() {
        // 初始化一个REST地图服务提供者。
        RestMapProviderSetting providerSetting = new RestMapProviderSetting();
        //指定REST地图服务提供者所使用的REST服务地址。
        providerSetting.restServiceRootURL = "http://localhost:8090/iserver/services/map-china400/rest";
        // 构建 RestMapProvider 对象
        RestMapProvider restMapProvider = new RestMapProvider(providerSetting);
        List<MapProvider> providers = new ArrayList<MapProvider>();
        providers.add(restMapProvider);

        // 初始化地图服务组件上下文对象。
        MapContext mapContext = new MapContext();
        mapContext.setProviders(providers);
        // 创建地图服务组件。
        MapImpl mapComponent = new MapImpl();
        //指定地图服务组件使用的服务提供者
        mapComponent.setComponentContext(mapContext);
        return mapComponent;

    }

    /**
     * <p>
     * 查询示范
     * </p>
     * @param mapComponent
     * @throws MapException
     */
    public static void queryBySQLSample(MapImpl mapComponent) throws MapException {
        // 属性查询参数集合。
        QueryParameterSet queryParameters = new QueryParameterSet();
        QueryParameter[] queryLayerParams = new QueryParameter[1];
        queryLayerParams[0] = new QueryParameter();
        queryLayerParams[0].name = "China_Capital_P@China400";
        // 属性过滤条件
        queryLayerParams[0].attributeFilter = "SMID<6";
        // 返回的属性字段名称(不区分大小写)。
        queryLayerParams[0].fields = new String[] { "AdminName", "AdminCode" };
        queryParameters.queryParams = queryLayerParams;
        // 设置查询结果包含属性信息及空间信息。
        queryParameters.queryOption = QueryOption.ATTRIBUTEANDGEOMETRY;

        // 查询在“China”地图的“China_Capital_P@China400”图层中 SmID小于6 所有的要素。
        QueryResult queryResult = mapComponent.queryBySQL("China", queryParameters);
        OutputQueryResult(queryResult);
    }

    /**
     * <p>
     * 出图示范
     * </p>
     * @param mapComponent
     * @throws MapException
     */
    public static void getMapImageSample(MapImpl mapComponent) throws MapException {
        // 显示范围。
        Rectangle2D viewBounds = new Rectangle2D(9871111.11 ,2371111.11 , 12128888.89 , 4628888.89);
        // 获取“China”默认的地图参数。
        MapParameter mapParameter = mapComponent.getDefaultMapParameter("China");
        // 图片输出设置,指定了图片输出格式、返回图片地址、出图范围,以及使用默认图片大小(256*256)出图。
        ImageOutputOption outputOption = new ImageOutputOption();
        mapParameter.returnType = ReturnType.URL;
        outputOption.format = OutputFormat.PNG;
        mapParameter.viewBounds = viewBounds;
        MapImage mapImage = mapComponent.getMapImage(mapParameter, outputOption);
        System.out.println("图片路径为:" + mapImage.imageUrl);
    }

    /**
     * <p>
     * 获取要素字段值
     * </p>
     * @param fieldName
     * @param feature
     * @return
     */
    public static String getfieldValueByName(String fieldName, Feature feature) {
        for (int i = 0; i < feature.fieldNames.length; i++) {
            if (feature.fieldNames[i].equalsIgnoreCase(fieldName)) {
                return feature.fieldValues[i];
            }
        }
        return "error";
    }

    /**
     * <p>
     * 输出查询结果
     * </p>
     * @param fieldName
     * @param feature
     * @return
     */
    public static void OutputQueryResult(QueryResult queryResult) {
        System.out.println("\n查询结果如下:\n--------------------------------------------");
        System.out.println("要素总数为" + queryResult.totalCount);
        System.out.println("当前总数为" + queryResult.currentCount);

        Recordset recordset[] = queryResult.recordsets;
        System.out.println("查询结果中有" + recordset.length + "个查询记录集:");

        for (int i = 0; i < recordset.length; i++) {
            System.out.println("查询记录集" + (i + 1) + "对应的数据集为:" + recordset[i].datasetName + ",结果要素的 AdminName 属性列举如下:");
            Feature features[] = recordset[i].getFeatures();
            for (int j = 0; j < features.length; j++) {
                System.out.println((j + 1) + ") " + getfieldValueByName("AdminName", features[j]));
            }
        }
    }
	
}

就是这个实例。

类包我基本都导入了。但还是报错。

你好,你的代码我运行没问题,截图如下:


 

建议检查工程设置,比如Eclips里的Build Path,要把所有引用的jar包都加到Build Path里。

好了。重新导入iserver下面的所有lib就好了。一开始导入的是demo里面的所有包
...