首页 / 浏览问题 / 组件GIS / 问题详情
SuperMap iObjects Java打开操作iserver数据源失败,报错读取XML信息失败
15EXP 2025年02月17日

在使用Java代码操作数据源往数据源中添加数据时报错。

问题描述:
操作本地数据源文件时操作成功,成功向数据源中添加了一条数据

想要操作iserver中的数据源,以下代码报错,提示读取XML信息失败,什么原因,如何解决?

Exception in thread "main" javax.management.RuntimeErrorException: 读取XML信息失败
    at com.supermap.data.Datasources.open(SourceFile:152)
    at ArticleServiceImplTest.main(ArticleServiceImplTest.java:328)
 

public static void main(String[] args) throws UnsupportedEncodingException {
        // 1. 初始化 SuperMap 环境
        Workspace workspace = new Workspace();
        DatasourceConnectionInfo connectionInfo = new DatasourceConnectionInfo();

        // 2. 设置 UDBX 数据源路径
        //String udbxPath = "D://test.udbx"
        String udbxPath = "http://ip/iserver/services/data-China200Test/rest/data"; // UDBX 文件路径
        connectionInfo.setServer(udbxPath);
        connectionInfo.setEngineType(EngineType.ISERVERREST);
        connectionInfo.setAlias("China");

        // 3. 打开数据源
        Datasource datasource = workspace.getDatasources().open(connectionInfo);
        if (datasource == null) {
            System.out.println("打开数据源失败!");
            return;
        }

        // 4. 获取属性表数据集(假设数据集名称为 "AttributeTable")
        DatasetVector dataset = (DatasetVector) datasource.getDatasets().get("area");
        if (dataset == null) {
            System.out.println("属性表数据集不存在!");
            return;
        }

        // 5. 打开记录集
        Recordset recordset = dataset.getRecordset(false, CursorType.DYNAMIC);
        if (recordset == null) {
            System.out.println("打开记录集失败!");
            return;
        }

        //检查字段信息
        FieldInfos fieldInfos = dataset.getFieldInfos();
        for (int i = 0; i < fieldInfos.getCount(); i++) {
            FieldInfo fieldInfo = fieldInfos.get(i);
            System.out.println("字段名称:"+fieldInfo.getName()+"字段类型"+fieldInfo.getType());

        }

        // 6. 添加新记录
        recordset.addNew(null); // 添加一条空记录
        recordset.setString("id", "4.0"); // 设置属性字段值
        recordset.setString("name", "河北省"); // 设置属性字段值
        recordset.update(); // 更新记录集

        // 7. 关闭记录集
        recordset.close();

        // 8. 保存并关闭数据源
        workspace.getDatasources().closeAll();
        workspace.close();

        System.out.println("属性表数据添加完成!");

    }

1个回答

您好,您这里的数据源类型和引擎有点问题,

其中iServer Rest 服务引擎类型,是指基于 REST 协议发布的地图服务,udbx文件请使用udbx引擎。

希望能帮助到您
1,215EXP 2025年02月17日
这里我想操作的是发布的数据服务中的数据源文件,可以实现吗?可以的话代码应该如何修改?
您好,这个操作是不支持的
...