// Path: naive-core/src/main/java/com/goribun/naive/core/utils/PropertyUtil.java
// public class PropertyUtil {
// 
//     private static final Logger LOGGER = LoggerFactory.getLogger(PropertyUtil.class);
// 
//     private static Properties props;
// 
//     static {
//         loadProps();
//     }
// 
//     synchronized static private void loadProps() {
// 
//         props = new Properties();
//         InputStream in = null;
//         try {
//             in = PropertyUtil.class.getClassLoader().getResourceAsStream("naive-rpc.properties");
//             props.load(in);
//         } catch (FileNotFoundException e) {
//             LOGGER.warn("naive-rpc.properties not found");
//         } catch (IOException e) {
//             LOGGER.error("loadProps error", e);
//         } finally {
//             try {
//                 if (null != in) {
//                     in.close();
//                 }
//             } catch (IOException e) {
//                 LOGGER.error("naive-rpc.properties close error", e);
//             }
//         }
//     }
// 
//     public static String getProperty(String key) {
//         if (null == props) {
//             loadProps();
//         }
//         return props.getProperty(key);
//     }
// 
//     public static String getProperty(String key, String defaultValue) {
//         if (null == props) {
//             loadProps();
//         }
//         return props.getProperty(key, defaultValue);
//     }
// 
//     public static boolean getBooleanProperty(String key, boolean defaultValue) {
//         if (null == props) {
//             loadProps();
//         }
// 
//         try {
//             return Boolean.valueOf(props.getProperty(key));
//         } catch (Exception e) {
//             return defaultValue;
//         }
//     }
// }


import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import com.goribun.naive.core.annotation.RpcService;
import com.goribun.naive.core.utils.PropertyUtil;
import org.apache.commons.lang3.StringUtils;

        while (entrys.hasMoreElements()) {
            JarEntry jarEntry = entrys.nextElement();
            String entryName = jarEntry.getName();

            if (entryName.endsWith(".class")) {
                String className = entryName.replace("/", ".").substring(0, entryName.lastIndexOf("."));
                Class<?> clazz = Class.forName(className);
                if (clazz != null && clazz.getAnnotation(RpcService.class) != null) {
                    RpcService rpcService = clazz.getAnnotation(RpcService.class);
                    //服务元数据
                    ServiceInfo serviceInfo = new ServiceInfo();
                    serviceInfo.setAppName(strs[0]);
                    serviceInfo.setUrl(this.getUrlByAppName(strs[0]));

                    serviceInfo.setClazz(clazz);
                    //自定义路径
                    if (StringUtils.isNotBlank(rpcService.value())) {
                        serviceInfo.setServiceName(rpcService.value());
                    } else {
                        serviceInfo.setServiceName(clazz.getName());
                    }
                    serviceMap.put(clazz, serviceInfo);
                }
            }
        }
    }

    //根据项目名取得请求地址
    private String getUrlByAppName(String appName) {
// Path: naive-core/src/main/java/com/goribun/naive/core/utils/PropertyUtil.java
// public class PropertyUtil {
// 
//     private static final Logger LOGGER = LoggerFactory.getLogger(PropertyUtil.class);
// 
//     private static Properties props;
// 
//     static {
//         loadProps();
//     }
// 
//     synchronized static private void loadProps() {
// 
//         props = new Properties();
//         InputStream in = null;
//         try {
//             in = PropertyUtil.class.getClassLoader().getResourceAsStream("naive-rpc.properties");
//             props.load(in);
//         } catch (FileNotFoundException e) {
//             LOGGER.warn("naive-rpc.properties not found");
//         } catch (IOException e) {
//             LOGGER.error("loadProps error", e);
//         } finally {
//             try {
//                 if (null != in) {
//                     in.close();
//                 }
//             } catch (IOException e) {
//                 LOGGER.error("naive-rpc.properties close error", e);
//             }
//         }
//     }
// 
//     public static String getProperty(String key) {
//         if (null == props) {
//             loadProps();
//         }
//         return props.getProperty(key);
//     }
// 
//     public static String getProperty(String key, String defaultValue) {
//         if (null == props) {
//             loadProps();
//         }
//         return props.getProperty(key, defaultValue);
//     }
// 
//     public static boolean getBooleanProperty(String key, boolean defaultValue) {
//         if (null == props) {
//             loadProps();
//         }
// 
//         try {
//             return Boolean.valueOf(props.getProperty(key));
//         } catch (Exception e) {
//             return defaultValue;
//         }
//     }
// }


// Path: naive-client/src/main/java/com/goribun/naive/client/context/ServiceManager.java
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import com.goribun.naive.core.annotation.RpcService;
import com.goribun.naive.core.utils.PropertyUtil;
import org.apache.commons.lang3.StringUtils;


        while (entrys.hasMoreElements()) {
            JarEntry jarEntry = entrys.nextElement();
            String entryName = jarEntry.getName();

            if (entryName.endsWith(".class")) {
                String className = entryName.replace("/", ".").substring(0, entryName.lastIndexOf("."));
                Class<?> clazz = Class.forName(className);
                if (clazz != null && clazz.getAnnotation(RpcService.class) != null) {
                    RpcService rpcService = clazz.getAnnotation(RpcService.class);
                    //服务元数据
                    ServiceInfo serviceInfo = new ServiceInfo();
                    serviceInfo.setAppName(strs[0]);
                    serviceInfo.setUrl(this.getUrlByAppName(strs[0]));

                    serviceInfo.setClazz(clazz);
                    //自定义路径
                    if (StringUtils.isNotBlank(rpcService.value())) {
                        serviceInfo.setServiceName(rpcService.value());
                    } else {
                        serviceInfo.setServiceName(clazz.getName());
                    }
                    serviceMap.put(clazz, serviceInfo);
                }
            }
        }
    }

    //根据项目名取得请求地址
    private String getUrlByAppName(String appName) {
        return PropertyUtil.getProperty(appName);