Java调用jar包中的方法
Util.java
@Component
public class Util {
public static String jarPath;
public static String classUrl;
public static String credentialUrl;
public static String szUserName;
public static String szPassWord;
@Value("${encryption.jarPath}")
public void setJarPath(String jarPath) {
EncryptionUtil.jarPath = jarPath;
}
@Value("${encryption.classUrl}")
public void setClassUrl(String classUrl) {
EncryptionUtil.classUrl = classUrl;
}
@Value("${encryption.szUserName}")
public void setSzUserName(String szUserName) {
EncryptionUtil.szUserName = szUserName;
}
@Value("${encryption.szPassWord}")
public void setSzPassWord(String szPassWord) {
EncryptionUtil.szPassWord = szPassWord;
}
/**
* 读取jar包
* @param jarPath jar包存放的路径,可以是部署服务所在的linux上
*/
public static void loadJar(String jarPath) {
File jarFile = new File(jarPath);
if (!jarFile.exists()) {
throw new RuntimeException("找不到jar包");
}
// 从URLClassLoader类中获取类所在文件夹的方法,jar也可以认为是一个文件夹
Method method = null;
try {
method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
} catch (NoSuchMethodException | SecurityException e1) {
e1.printStackTrace();
}
// 获取方法的访问权限以便写回
boolean accessible = method.isAccessible();
try {
method.setAccessible(true);
// 获取系统类加载器
URLClassLoader classLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
URL url = jarFile.toURI().toURL();
method.invoke(classLoader, url);
} catch (Exception e) {
e.printStackTrace();
} finally {
method.setAccessible(accessible);
}
}
/**
*
* @param data
* @throws Exception
*/
public static String test(String data){
String szResult = null;
try {
byte[] dataByte = data.getBytes("UTF-8");
loadJar(jarPath);
Class<?> clazz = Class.forName(classUrl);
Object instance = clazz.newInstance();
Object logInResult = clazz.getDeclaredMethod("LogIn", String.class, String.class).invoke(instance,szUserName,szPassWord);
Object logInIErrCodeObj = clazz.getField("iErrCode").get(logInResult);
int logInCode = (Integer)logInIErrCodeObj;
if (logInCode != 0) {
Object logInIErrMsgObj = clazz.getField("szErrMsg").get(logInResult);
String logInIErrMsg = (String)logInIErrMsgObj;
throw new RuntimeException(logInIErrMsg);
}
} catch (Exception e) {
e.printStackTrace();
}
return szResult;
}
}
application.yml
encryption: jarPath: C:\a\WAsecurity.jar classUrl: Wasecurity.IscJcrypt szUserName: test szPassWord: test
