SpringBoot项目接入Jco调用SAP接口遇到的问题

简介: 在SpringBoot项目中接入SAP接口通过Jco时遇到两个主要问题。首先,Jco不允许重命名或重新打包"sapjco3.jar",解决方案是将jar安装到本地和服务器的Maven仓库,配置pom.xml避免打包,并在服务器上更新环境变量。其次,调用后需释放`DestinationDataProvider`以防止异常。此外,调用SAP函数的步骤包括设置入参、执行和获取结果,涉及字段、结构和表类型的数据操作。

SpringBoot项目接入Jco调用SAP接口遇到的问题

1.1 It is not allowed to rename or repackage the original archive "sapjco3.jar".

由于jar包是下载到本地的,所以将 jar包添加到本地仓库。再在项目中引用。

maven命令:

mvn install:install-file -Dfile=D:\sapjco3.jar -DgroupId=sapjco3 -D artifactId=sapjco3 -Dversion=1.0 -Dpackaging=jar

pom.xml中添加引用

        <!--sap jco-->
        <dependency>
            <groupId>sapjco3</groupId> 
            <artifactId>sapjco3</artifactId> 
            <version>IDE</version>
        </dependency>

项目打包时,会生成sapjco3-IDE.jar包,这个包名会引发Jco的异常。

Illegal JCo archive "sapjco3-IDE.jar". 
It is not allowed to rename or repackage the original archive "sapjco3.jar".

项目打包后,需要手动将项目包中的sapjco3-IDE.jar重命名为sapjco3.jar,然后重新启动项目即可。

1.2更新解决办法:

1.将sapjco3.jar安装到本地maven仓库与服务器中。

2.项目中使用本地仓库的引用

3.在pom文件中配置,在项目打包时,过滤sapjco3.jar,不将其打包到最后的包中
4.把sapjco3.jar拷贝到服务器上,更新服务器的环境变量,classPath中添加sapjco3.jar

5.正常启动项目即可。

优点:一劳永逸,不需要每次更新包时,去手动修改包名;

缺点:一劳;

2.DestinationDataProvider already registered

注册过DestinationDataProvider后,使用结束,需要手动释放,否则再次调用方法会报异常。

void test(){
    try{
        ···
        Environment.registerDestinationDataProvider(myDataProvider);        
        ···
    }catch(Exception ex){
        log.info(ex.getMessage());
    }finally{
        Environment.unregisterDestinationDataProvider(myDataProvider);
    }
}

3.call function

方法调用操作顺序: 1.设置入参 -> 2.执行方法 -> 3.获取返回结果

JCoFunction function =  destination.getRepository().getFunction("your function name");
0.数据类型

sap数据类型一共有三种

字段 / 结构(Structure) / 表(Table)
1.入参

在调用function之前,可以修改function的入参。

// 字段类型的入参
JCoParameterList inputParameterList = function.getImportParameterList();
inputParameterList.setValue("param_name","value");

// table类型的入参
JCoParameterList tableParameterList = function.getTableParameterList();
JCoTable jCoTable = tableParameterList.getTable("table_param_name");
jCoTable.appendRow(); // 添加行
jCoTable.setValue("columnName", "value");

// 执行方法
function.execute(destination);

···
2.出参
···
// 执行方法
function.execute(destination);
// 字段类型的出参
String feildResult = function.getExportParameterList().getString("fieldName");

// table类型的出餐
JCoTable result_table = function.getTableParameterList().getTable("result_table_name");

for (int i = 0; i < result_table.getNumRows(); i++, result_table.nextRow()) {
    result_table.setRow(i); // 打开行数据
    result_table.getString("columnName"); // 获取对应列的值
    ···
}
目录
相关文章
|
1月前
|
Java 数据库连接 Maven
springBoot:项目建立&配置修改&yaml的使用&resource 文件夹(二)
本文档介绍了如何创建一个基于Maven的项目,并配置阿里云仓库、数据库连接、端口号、自定义启动横幅及多环境配置等。同时,详细说明了如何使用YAML格式进行配置,以及如何处理静态资源和模板文件。文档还涵盖了Spring Boot项目的`application.properties`和`application.yaml`文件的配置方法,包括设置数据库驱动、URL、用户名、密码等关键信息,以及如何通过配置文件管理不同环境下的应用设置。
|
12天前
|
Java 应用服务中间件
SpringBoot获取项目文件的绝对路径和相对路径
SpringBoot获取项目文件的绝对路径和相对路径
49 1
SpringBoot获取项目文件的绝对路径和相对路径
|
3天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
11 2
|
7天前
|
分布式计算 关系型数据库 MySQL
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型 图像处理 光通信 分布式计算 算法语言 信息技术 计算机应用
27 8
|
1月前
|
JavaScript 前端开发 Java
解决跨域问题大集合:vue-cli项目 和 java/springboot(6种方式) 两端解决(完美解决)
这篇文章详细介绍了如何在前端Vue项目和后端Spring Boot项目中通过多种方式解决跨域问题。
313 1
解决跨域问题大集合:vue-cli项目 和 java/springboot(6种方式) 两端解决(完美解决)
|
14天前
|
JavaScript 前端开发 Java
SpringBoot项目的html页面使用axios进行get post请求
SpringBoot项目的html页面使用axios进行get post请求
38 2
|
14天前
|
前端开发 Java Spring
SpringBoot项目thymeleaf页面支持词条国际化切换
SpringBoot项目thymeleaf页面支持词条国际化切换
42 2
|
14天前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
28 1
|
16天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
16天前
|
Java 开发者 Spring
精通SpringBoot:16个扩展接口精讲
【10月更文挑战第16天】 SpringBoot以其简化的配置和强大的扩展性,成为了Java开发者的首选框架之一。SpringBoot提供了一系列的扩展接口,使得开发者能够灵活地定制和扩展应用的行为。掌握这些扩展接口,能够帮助我们写出更加优雅和高效的代码。本文将详细介绍16个SpringBoot的扩展接口,并探讨它们在实际开发中的应用。
35 1