All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.alogic.together.catalog.TogetherServantCatalog Maven / Gradle / Ivy

package com.alogic.together.catalog;

import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

import org.apache.commons.lang3.StringUtils;
import org.w3c.dom.Element;

import com.alogic.together.service.TogetherServant;
import com.anysoft.util.Properties;
import com.anysoft.util.PropertiesConstants;
import com.anysoft.util.Settings;
import com.logicbus.models.catalog.CatalogNode;
import com.logicbus.models.catalog.Path;
import com.logicbus.models.servant.DefaultServiceDescription;
import com.logicbus.models.servant.impl.ServantCatalogNodeImpl;
import com.logicbus.models.servant.impl.XMLResourceServantCatalog;

/**
 * TogetherServantCatalog
 *
 * @version 1.6.14.11 [20210524 duanyy] 
* - 修复jar搜索问题
*/ public class TogetherServantCatalog extends XMLResourceServantCatalog{ /** * 缺省的服务实现类 */ private String servant = TogetherServant.class.getName(); protected String suffix = ".xml"; @Override public void configure(Properties p) { servant = PropertiesConstants.getString(p,"servant",servant,true); suffix = PropertiesConstants.getString(p,"suffix",suffix,true); loadDocument(p); } @Override protected CatalogNode createCatalogNode(Path _path,Object _data){ ServantCatalogNodeImpl catalogNode = new ServantCatalogNodeImpl(_path,_data); Element node = (Element)_data; String home = node.getAttribute("home"); String clazz = node.getAttribute("bootstrap"); if (StringUtils.isNotEmpty(home) && StringUtils.isNotEmpty(clazz)){ ClassLoader cl = Settings.getClassLoader(); try { Class bootstrap = cl.loadClass(clazz); scanResource(node,catalogNode,home,bootstrap); }catch (Exception ex){ logger.error("Can not load class:" + clazz,ex); } } return catalogNode; } protected void scanResource(Element element,ServantCatalogNodeImpl node, String home, Class bootstrap) { URL url = bootstrap.getResource(home); if(url.toString().startsWith("file:")){ File file; try { file = new File(url.toURI()); } catch (URISyntaxException e) { logger.error("Can not scan home:" + home,e); return; } scanFileSystem(element,node,home,file,bootstrap); } else{ if (url.toString().startsWith("jar:")){ JarFile jfile; try { String jarUrl = url.toString(); jarUrl = jarUrl.substring(9, jarUrl.indexOf('!')); jfile = new JarFile(jarUrl); } catch (IOException e) { logger.error("Can not scan home:" + home,e); return; } scanJar(element,node,home,jfile,bootstrap); } } } protected void scanJar(Element element,ServantCatalogNodeImpl node, String home, JarFile jfile,Class bootstrap) { Enumeration files = jfile.entries(); while (files.hasMoreElements()) { JarEntry entry = files.nextElement(); String name = entry.getName(); if (name.endsWith(suffix)){ int end = name.lastIndexOf('/'); if (end > 0) { String path = '/' + name.substring(0, end); if (path.equals(home)) { serviceFound(element, node, "/" + name, bootstrap); } } } } } protected void scanFileSystem(Element element,ServantCatalogNodeImpl node, String home,File file,Class bootstrap) { File[] files = file.listFiles(); for (File item:files){ if (item.getName().endsWith(suffix)){ serviceFound(element,node,home + "/" + item.getName(),bootstrap); } } } private void serviceFound(Element element,ServantCatalogNodeImpl node, String src,Class bootstrap) { //从xml文件名中获取服务id int end = src.lastIndexOf('.'); int start = src.lastIndexOf('/'); String id = src.substring(start + 1, end); Path childPath = node.getPath().append(id); DefaultServiceDescription sd = new DefaultServiceDescription(childPath.getId()); sd.setModule(servant); sd.setName(id); sd.setNote(id); sd.setPath(childPath.getPath()); String visible = element.getAttribute("visible"); sd.setVisible(StringUtils.isNotEmpty(visible)?visible:"public"); String log = element.getAttribute("log"); sd.setLogType(StringUtils.isNotEmpty(log)?log:"brief"); sd.getProperties().SetValue("script", src); sd.getProperties().SetValue("bootstrap", bootstrap.getName()); node.addService(sd.getServiceID(), sd); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy