java实现接口通过Groovy加载

接口实体类:InterfaceServiceCache.java
public class InterfaceServiceCache implements Serializable {
	private static final long serialVersionUID = -5855556857352346121L;
	private Integer serviceId;//主键
	private String serviceName;//接口名称
	private String serviceCode;//接口编码
	private String clazz;//上传代码
	private Integer version;//版本
}
后台上传txt格式脚本,解析后存入clazz字段

定义接口:InterfaceService.java
public interface InterfaceService {

    ResultHelp doPost(Order order);

}
脚本重写doPost方法,执行调用第三方接口,Order为需要参数的对象


验证脚本有效性:
  InterfaceService instance = InterfaceServiceUtil.parseGameClass(interfaceServiceCache); 
if (null != instance) {
    return true;
}
return false;
定义InterfaceServiceUtil.java parseGameClass方法

import groovy.lang.GroovyClassLoader;

public static InterfaceService parseGameClass(InterfaceServiceCache interfaceServiceCache) {
        InterfaceService s = null;
        boolean isSuccess = true;
        try {
            GroovyClassLoader classLoader = new GroovyClassLoader();
            Class<?> clazz = classLoader.parseClass(interfaceServiceCache.getClazz(),
                    "S" + interfaceServiceCache.getServiceCode() + ".groovy");
            s = (InterfaceService) clazz.newInstance();
        } catch (Exception e) {
            logger.error("classLoader.parseClass", e);
            isSuccess = false;
        }
        logger.info("初始化接口实现..." + interfaceServiceCache.getServiceCode() + " " + isSuccess);
        return s;
    }

pom.xml
 <dependency>
       <groupId>org.codehaus.groovy</groupId>
       <artifactId>groovy</artifactId>
       <version>2.3.3</version>
 </dependency>
脚本:保存再clazz字段
import net.sf.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sun.misc.BASE64Decoder;
import java.util.HashMap;
import java.util.Map;

public class KeyInterfaceService extends InterfaceService {
    private final static Logger logger = LoggerFactory.getLogger(KeyInterfaceService.class);
    private static final String CHARGE_URL = "http://pubg.com/api/getKey";

    @Override
    public ResultHelp doPost(Order order) {
        ResultHelp resultHelp = new ResultHelp();
        try {
            Map<String, Object> params = new HashMap<String, Object>();
            params.put("orderNo", purchaseOrder.getOrderNo());
            params.put("productDes", purchaseRecord.getProductName());
            params.put("parter", "gamelife_mall");
            String timestamp = (System.currentTimeMillis()) + "";
            params.put("timestamp", timestamp);
            String sign = RSASignature.sign(sign, privateKey, "utf-8");
            params.put("sign", sign);
            String responseText = HttpClientUtil.doPost(CHARGE_URL, params);
            if (StringUtil.isNotNullStr(responseText)) {
                JSONObject json = JSONObject.fromObject(responseText);
                int code = json.getInt("code");
                String key= json.getString("key");
                resultHelp.setKeyValue(key);
                resultHelp.setResultFlag(true);
                return resultHelp;
            } else {
                resultHelp.setKeyValue(null);
                resultHelp.setMsg("接口未返回数据");
                resultHelp.setResultFlag(false);
                return resultHelp;
            }
        } catch (Exception e) {
            logger.error("接口异常:{}", e);
            resultHelp.setKeyValue(null);
            resultHelp.setMsg("接口异常");
            resultHelp.setResultFlag(false);
            return resultHelp;
        }
    }

}
HttpClientUtil.java



猜你喜欢

转载自blog.csdn.net/shiyuezhong/article/details/80446618
今日推荐