企业微信会话存档引用com.tencent.wework.Finance出错?

devtools/2024/11/13 4:12:34/

报错:

会话存档引用com.tencent.wework.Finance出错,找不到该类,报错如下:java.lang.NoClassDefFoundError: Could not initialize class com.tencent.wework.Finance 这个问题怎么解决?

解决方案:需要下载官方的sdk的包
https://developer.work.weixin.qq.com/document/path/91774
下载:在这里插入图片描述
本文以windows举例子
解压找到 Finance.java这个类放到 com/tencent/wework/Finance.java下面如下图
在这里插入图片描述

解压下的dll文件放到resources下也可以新建一个lib目录

在这里插入图片描述

修改Finance.java文件

在这里插入图片描述
所有代码

java">package com.tencent.wework;import com.andleoht.common.core.utils.OsUtils;
import lombok.extern.slf4j.Slf4j;@Slf4j
public class Finance {public native static long NewSdk();/*** 初始化函数* Return值=0表示该API调用成功** @param /[in] sdk         NewSdk返回的sdk指针* @param /[in] corpid      调用企业的企业id,例如:wwd08c8exxxx5ab44d,可以在企业微信管理端--我的企业--企业信息查看* @param /[in] secret      聊天内容存档的Secret,可以在企业微信管理端--管理工具--聊天内容存档查看* @return 返回是否初始化成功* 0   - 成功* !=0 - 失败*/public native static int Init(long sdk, String corpid, String secret);/*** 拉取聊天记录函数* Return值=0表示该API调用成功** @param /[in]  sdk             NewSdk返回的sdk指针* @param /[in]  seq             从指定的seq开始拉取消息,注意的是返回的消息从seq+1开始返回,seq为之前接口返回的最大seq值。首次使用请使用seq:0* @param /[in]  limit           一次拉取的消息条数,最大值1000条,超过1000条会返回错误* @param /[in]  proxy           使用代理的请求,需要传入代理的链接。如:socks5://10.0.0.1:8081 或者 http://10.0.0.1:8081* @param /[in]  passwd          代理账号密码,需要传入代理的账号密码。如 user_name:passwd_123* @param /[in]  timeout         超时时间,单位秒* @param /[out] chatDatas       返回本次拉取消息的数据,slice结构体.内容包括errcode/errmsg,以及每条消息内容。* @return 返回是否调用成功* 0   - 成功* !=0 - 失败*/public native static int GetChatData(long sdk, long seq, long limit, String proxy, String passwd, long timeout, long chatData);/*** 拉取媒体消息函数* Return值=0表示该API调用成功** @param /[in]  sdk             NewSdk返回的sdk指针* @param /[in]  sdkFileid       从GetChatData返回的聊天消息中,媒体消息包括的sdkfileid* @param /[in]  proxy           使用代理的请求,需要传入代理的链接。如:socks5://10.0.0.1:8081 或者 http://10.0.0.1:8081* @param /[in]  passwd          代理账号密码,需要传入代理的账号密码。如 user_name:passwd_123* @param /[in]  timeout         超时时间,单位秒* @param /[in]  indexbuf        媒体消息分片拉取,需要填入每次拉取的索引信息。首次不需要填写,默认拉取512k,后续每次调用只需要将上次调用返回的outindexbuf填入即可。* @param /[out] media_data      返回本次拉取的媒体数据.MediaData结构体.内容包括data(数据内容)/outindexbuf(下次索引)/is_finish(拉取完成标记)* @return 返回是否调用成功* 0   - 成功* !=0 - 失败*/public native static int GetMediaData(long sdk, String indexbuf, String sdkField, String proxy, String passwd, long timeout, long mediaData);/*** @param /[in]  encrypt_key, getchatdata返回的encrypt_key* @param /[in]  encrypt_msg, getchatdata返回的content* @param /[out] msg, 解密的消息明文* @return 返回是否调用成功* 0   - 成功* !=0 - 失败* @brief 解析密文*/public native static int DecryptData(long sdk, String encrypt_key, String encrypt_msg, long msg);public native static void DestroySdk(long sdk);public native static long NewSlice();/*** @return* @brief 释放slice,和NewSlice成对使用*/public native static void FreeSlice(long slice);/*** @return 内容* @brief 获取slice内容*/public native static String GetContentFromSlice(long slice);/*** @return 内容* @brief 获取slice内容长度*/public native static int GetSliceLen(long slice);public native static long NewMediaData();public native static void FreeMediaData(long mediaData);/*** @return outindex* @brief 获取mediadata outindex*/public native static String GetOutIndexBuf(long mediaData);/*** @return data* @brief 获取mediadata data数据*/public native static byte[] GetData(long mediaData);public native static int GetIndexLen(long mediaData);public native static int GetDataLen(long mediaData);/*** @return 1完成、0未完成* @brief 判断mediadata是否结束*/public native static int IsMediaDataFinish(long mediaData);static {log.info("java.library.path============={}", System.getProperty("java.library.path"));if (OsUtils.isWindows()) {String path = Finance.class.getClassLoader().getResource("").getPath();System.load(path.concat("lib/libcrypto-1_1-x64.dll"));System.load(path.concat("lib/libcurl-x64.dll"));System.load(path.concat("lib/libssl-1_1-x64.dll"));System.load(path.concat("lib/WeWorkFinanceSdk.dll"));} else {log.info("Linux library path ======linux======={} {}", System.getProperty("java.library.path"));System.loadLibrary("WeWorkFinanceSdk");}}}

这样就可以解决加载不到文件的问题了,记得重新builder


http://www.ppmy.cn/devtools/132529.html

相关文章

【基于轻量型架构的WEB开发】课程 12.5 数据回写 Java EE企业级应用开发教程 Spring+SpringMVC+MyBatis

12.5 数据回写 12.5.1 普通字符串的回写 接下来通过HttpServletResponse输出数据的案例,演示普通字符串的回写,案例具体实现步骤如下。 1 创建一个数据回写类DataController,在DataController类中定义 showDataByResponse()方法&#xff…

搜维尔科技:【应用】Xsens在荷兰车辆管理局人体工程学评估中的应用

荷兰车辆管理局(RDW)通过数据驱动的人体工程学评估,将职业健康和安全放在首位。 关键信息 01 改进人体工程学评估:RDW使用Xsens动作捕捉和Scalefit Industrial Athlete进行精确、实时的人体工程学评估,识别并降低与…

保障性住房管理:SpringBoot技术优势分析

3系统分析 3.1可行性分析 通过对本城镇保障性住房管理系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本城镇保障性住房管理系统采用SSM框架,JA…

1. pytorch 中冻结模型参数后参数仍会被调整

问题 self.sgf_net.requires_grad_(False)起初设置 requires_grad(False) 优化器也没有添加sgfnet的模型参数。但是在pylightning框架中,每次推理完模型的参数都会被改变,经过仔细排查发现问题 # self.sgf_net.requires_grad_(False)for param in self.s…

安装 deepspeed 报错 | 【CUDA_HOME does not exist, unable to compile CUDA op(s)】

问题: 安装 deepspeed 报错 | 【CUDA_HOME does not exist, unable to compile CUDA op(s)】 解决方法: 原因是因为 deepspeed 需要安装 cuda toolkit (runtime cuda), 不能使用 torch 内置的 cuda toolkit。 安装完成之后使用 nvcc -V, 输…

【Python图像处理】进阶实战指南

在掌握了Python图像处理的基础知识之后,我们可以进一步探讨一些更为复杂的图像处理技术和应用。本指南将涵盖图像配准、物体跟踪、图像风格迁移、图像超分辨率等进阶话题,并通过具体的实战案例加深理解。 1. 图像配准 图像配准是将多个图像对齐到同一坐…

音频模型介绍

在处理音频数据方面,有多种模型表现出色,它们在不同的音频处理任务上有着各自的优势: 自动编码器:包括多通道变分自动编码器、自回归模型和生成对抗网络等,这些模型在音乐生成领域取得了令人印象深刻的成果。 深度生成…

HTML和CSS 介绍

HTML (HyperText Markup Language) 定义 HTML 是一种用于创建网页的标准标记语言。它由一系列的元素组成&#xff0c;这些元素通过标签表示&#xff0c;用于描述网页的结构和内容。 特点 结构化&#xff1a; HTML 使用标签来定义文档的结构&#xff0c;如 <head>, <…