# Conflicts:
#	pom.xml
#	src/main/java/com/sunyard/SydApiException.java
#	src/main/java/racal/sunyard/main/SydApi4j.java
#	src/test/java/com/sunyard/sydapi/test/TestAllMethods.java
This commit is contained in:
cheney
2022-10-26 17:24:39 +08:00
parent d0ea067870
commit 24161e2ad5
29 changed files with 1806 additions and 3 deletions
@@ -0,0 +1,156 @@
package com.sunyard.proxy;
import com.sunyard.SydApi;
import com.sunyard.SydApiException;
import com.sunyard.pool.HsmLinkInfo;
import racal.sunyard.main.SydApi4j;
import racal.sunyard.main.SydApiMuti;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class ProxyInvocationHandler implements InvocationHandler {
private static Map<String, SydApiException> innerFuncs = new HashMap<String, SydApiException>();
static {
innerFuncs.put("connect", new SydApiException("集群连接模式,不需要该连接", 0));
}
private SydApi4j[] apis;
private HsmLinkInfo[] apisInfos;
private boolean isShortLinkMode = true;
public ProxyInvocationHandler(SydApi4j[] apis) {
this.apis = apis;
}
public ProxyInvocationHandler(SydApi4j[] apis, HsmLinkInfo[] info, boolean isShortLinkMode) {
this.apis = apis;
this.apisInfos = info;
this.isShortLinkMode = isShortLinkMode;
}
public SydApi4j[] getApis() {
return apis;
}
public HsmLinkInfo[] getApisInfos() {
return apisInfos;
}
public SydApi getProxy() {
SydApi api = (SydApi) Proxy.newProxyInstance(
SydApi4j.class.getClassLoader(),
new Class[]{SydApi.class},
this
);
api.setBindObject( this );
return api;
}
public void disconnect() {
if (null != apis && isShortLinkMode) {
for (SydApi4j api4j : this.apis) {
try {
if (null != api4j) {
api4j.disconnect();
}
} catch (Exception e) {
// pass
}
}
}
}
//处理代理实例并返回结果
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
SydApiException le = null;
if ("disconnect".equals(method.getName())) {
this.disconnect();
}
// 屏蔽部分非业务接口
if ("connect".equals(method.getName())) {
throw new RuntimeException("不允许使用此接口");
}
if (innerFuncs.containsKey(method.getName())) {
innerFuncs.get(method.getName());
}
if ("deleteCert".equals(method.getName()) || "SYD_Get_X509_CertInfo_HA".equals(method.getName())) {
for (SydApi4j api : apis) {
if (null == api) {
if ("deleteCert".equals(method.getName())) {
throw new SydApiException("删除失败",56307);
} else {
throw new SydApiException("导入失败",56300);
}
}
try {
Object ret = method.invoke(api, args);
if ( ret instanceof Boolean ) {
if ( ! ( Boolean ) ret ) {
throw new RuntimeException("结果错误");
}
}
} catch (SydApiException e) {
if ("deleteCert".equals(method.getName())) {
throw new SydApiException("删除失败",56307);
} else {
throw new SydApiException("导入失败",56300);
}
}
}
}
for (SydApi4j api : apis) {
if (null == api) {
continue;
}
if ( isShortLinkMode ) {
try {
return method.invoke(api, args);
} catch (SydApiException e) {
le = e;
if (e.getRetCode() < 0) {
continue;
}
throw e;
}
} else {
synchronized (api) {
try {
return method.invoke(api, args);
} catch (SydApiException e) {
le = e;
if (e.getRetCode() < 0) {
continue;
}
throw e;
}
}
}
}
throw le;
}
}