`

webService(web服务)自动发布工具-源代码

阅读更多

这个小工具特别适合对web服务相关知识了解较少,又急需上web服务的研发队伍使用,呵呵。

 

工具简单介绍:

 

1.整个过程由web程序驱动,程序由用户(程序员等)在IE端驱动。

 

2.目前底层基于axis的web服务引擎。

 

3.一键式操作。

用户点击确认按钮,web服务即可成功发布到指定的应用下。

原理上是可以发布到指定机器的指定的应用中。

 

不过还有很多细节需要完善,加油,呵呵!

 

 

下面是部分源代码,今天限于时间的原因,只能提供部分主要的代码。

限于代码中部分涉及商业机密,所以待逐步整理后,陆续将代码贴出来,直到最后提供完整的src的zip包和jar包。

 

package cn.webservice.autodeploy.service;

import java.io.File;

import org.apache.log4j.Logger;

import cn.lottery.common.exception.BusinessException;
import cn.webservice.autodeploy.util.AntUtil;
import cn.webservice.autodeploy.util.FileUtil;
import cn.webservice.autodeploy.WSDeployConsts;
import cn.webservice.autodeploy.domain.DefaultAntBuildProperties;
import cn.webservice.autodeploy.domain.IAntBuildProperties;
import cn.webservice.autodeploy.dto.WSAutoDeployDTO;


/**
 * web服务业务接口实现
 * @author Administrator
 *
 */
public class WSAutoDeployServiceImpl implements IWSAutoDeployService{
	protected static final Logger logger = Logger.getLogger("WSAutoDeployServiceImpl.class");
	
	/**
	 * 自动部署web服务
	 */
	public void autoDeployWebservice(WSAutoDeployDTO wsDeployDTO) throws BusinessException {
		this.genAndCompileInterfaceSrc(wsDeployDTO);
		this.genJavaSrcWsAbout(wsDeployDTO);
		//this.handleInterfaceImplSrc(wsDeployDTO);
	}
	
	
	/**
	 * 生成并编译接口源文件
	 */
	protected void genAndCompileInterfaceSrc(WSAutoDeployDTO wsDeployDTO) throws BusinessException{
		String interfacePkg = wsDeployDTO.getInterfacePkg().replace('.', File.separatorChar);//包路径
		String filePath = WSDeployConsts.APP_CLASS_ROOT + interfacePkg + File.separator;//文件路径
		logger.info("** interfacePkg = " + interfacePkg);
		logger.info("** filePath = " + filePath);		
		
		FileUtil fileUtil = new FileUtil();
		fileUtil.genDirectory(wsDeployDTO,filePath);
		fileUtil.genInterfaceFile(wsDeployDTO,interfacePkg,filePath);		
		fileUtil.insertSrcToFile(wsDeployDTO,filePath);
		
		this.complieAndMovedSrc(wsDeployDTO,filePath);
	}
	
	
	/**
	 * 生成web服务相关的源文件
	 */
	protected void genJavaSrcWsAbout(WSAutoDeployDTO wsDeployDTO) throws BusinessException{
		try{
			AntUtil antUtil = new AntUtil();
			antUtil.execAntTarget(WSDeployConsts.DEPLOY_WS);
		}catch(Exception e){
			e.printStackTrace();
			throw new BusinessException(e.getMessage());
		}
	}	
	
	/**
	 * 插入接口实现代码
	 * @param wsDeployDTO
	 */
	protected void handleInterfaceImplSrc(WSAutoDeployDTO wsDeployDTO) throws BusinessException {
		
	}	
	
	/**
	 * 编译并移动接口文件src
	 * @param filePath
	 */
	private void complieAndMovedSrc(WSAutoDeployDTO wsDeployDTO,String filePath) throws BusinessException{
		IAntBuildProperties antBuildProperties = new DefaultAntBuildProperties();
		antBuildProperties.modifyAntProps(wsDeployDTO);	//修改build.properties
		
		AntUtil antUtil = new AntUtil();
		//执行ant目标,编译interface
		antUtil.execAntTarget(WSDeployConsts.COMPILE_MOVED_INTERFACE_SRC);
	}	
}

 

 

package cn.webservice.autodeploy.util;

import java.io.File;

import org.apache.log4j.Logger;
import org.apache.tools.ant.DefaultLogger;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.ProjectHelper;

import cn.lottery.common.exception.BusinessException;

/**
 * ant公共类
 * @author Administrator
 *
 */
public class AntUtil {
	protected static final Logger logger = Logger.getLogger("AntUtil.class");
	
	
	/**
	 * 执行ant target
	 * @param antTarget
	 */
	public void execAntTarget(String antTarget) throws BusinessException{
		logger.info("** start execAntTarget");
		
		DefaultLogger consoleLogger = new DefaultLogger();
		consoleLogger.setErrorPrintStream(System.err);
		consoleLogger.setOutputPrintStream(System.out);
		consoleLogger.setMessageOutputLevel(Project.MSG_INFO);
		
		File buildFile = new File("/.../WEB-INF/classes/build.xml");
		Project p = new Project();
		p.addBuildListener(consoleLogger);
		
		p.init();
		
		ProjectHelper helper = ProjectHelper.getProjectHelper();
		logger.info("** helper = " + helper);
		
		helper.parse(p, buildFile);
		p.executeTarget(antTarget);
		
		logger.info("** end execAntTarget");
	}
}

 

package cn.webservice.autodeploy;


/**
 * 全局变量
 * @author Administrator
 *
 */
public class WSDeployConsts {	
	public static final String APP_CLASS_ROOT = "/.../WEB-INF/classes/";
	
	//==================================================================================
	//目前提供的可以自定义的build.properties文件中的key
	public static final String INTERFACE_NAME = "interface.name";//尚未修改
	public static final String INTERFACE_PKG = "interface.pkg";
	public static final String INTERFACE_SRC_PATH = "interface.src.path";//尚未修改
	
	public static final String ABSOLUTE_INTERFACE_PATH = "interface.absolute.path";
	public static final String MOVED_INTERFACE_DIR = "moved.interface.dir";
	
	public static final String APP_NAME = "app.home";	//应用主目录
	public static final String WS_PORT = "webservice.port";	//web服务的端口key
	public static final String WSDL_FILE_NAME = "wsdl.filename";	//WSDL文件名称
	public static final String SERVICE_NAME = "service.name";	//名字空间
	public static final String MOVED_SRC_DIR = "moved.src.dir";	//生成的文件移动到一个指定的文件夹中	
	
	//ant目标名称
	public static final String COMPILE_MOVED_INTERFACE_SRC = "compile-moved-interface-src";
	public static final String DEPLOY_WS = "deploy-ws";
}

 

package cn.webservice.autodeploy.domain;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.Properties;

import org.apache.log4j.Logger;

import cn.lottery.common.exception.BusinessException;
import cn.webservice.autodeploy.WSDeployConsts;
import cn.webservice.autodeploy.dto.WSAutoDeployDTO;

/**
 * ant的build.properties接口default实现类
 * @author Administrator
 *
 */
public class DefaultAntBuildProperties implements IAntBuildProperties{
	protected static final Logger logger = Logger.getLogger("DefaultAntBuildProperties.class");	
	
	/**
	 * 修改build.properties中的值
	 */
	public void modifyAntProps(WSAutoDeployDTO wsDeployDTO) throws BusinessException{
		logger.info("** start modifyAntProps");
		
		String interfacePkgHttp = "/" + wsDeployDTO.getInterfacePkg().replace('.', File.separatorChar);//包路径
		logger.info("** interfacePkgHttp = " + interfacePkgHttp);
		
		try{
			//读数据
			File buildFile = new File(WSDeployConsts.APP_CLASS_ROOT + "build.properties");
			InputStream in = (InputStream) (new FileInputStream(buildFile));
			System.out.println("** 输入流: " + in);
			
			Properties properties = new Properties();
	        properties.load(in);
	        
	        String interfaceName = properties.getProperty(WSDeployConsts.INTERFACE_NAME);
	        String interfacePkg = properties.getProperty(WSDeployConsts.INTERFACE_PKG);
	        String interfaceSrcPath = properties.getProperty(WSDeployConsts.INTERFACE_SRC_PATH);
	        
	        String appNameValue = properties.getProperty(WSDeployConsts.APP_NAME);
	        String wsPortValue = properties.getProperty(WSDeployConsts.WS_PORT);
	        String wsdlNameValue = properties.getProperty(WSDeployConsts.WSDL_FILE_NAME);
	        String serviceNameValue = properties.getProperty(WSDeployConsts.SERVICE_NAME);
	        String movedSrcToDirValue = properties.getProperty(WSDeployConsts.MOVED_SRC_DIR);
	        System.out.println("** interfaceName = " + interfaceName);
	        System.out.println("** interfacePkg = " + interfacePkg);
	        System.out.println("** interfaceSrcPath = " + interfaceSrcPath);
	        
			System.out.println("** appNameValue = " + appNameValue);
			System.out.println("** wsPortValue = " + wsPortValue);
			System.out.println("** wsdlNameValue = " + wsdlNameValue);
			System.out.println("** serviceNameValue = " + serviceNameValue);
			System.out.println("** movedSrcToDirValue = " + movedSrcToDirValue);
			
			if(appNameValue == null || wsPortValue == null || wsdlNameValue == null 
					|| serviceNameValue == null || movedSrcToDirValue == null){
				throw new Exception("** ant属性文件缺少key值");
			}
			
			logger.info("** wsDeployDTO = " + wsDeployDTO.toString());
			
			//写入修改后的数据
			Properties p = new Properties();
			p.setProperty(WSDeployConsts.INTERFACE_NAME,wsDeployDTO.getInterfaceName());
			p.setProperty(WSDeployConsts.INTERFACE_PKG,wsDeployDTO.getInterfacePkg());
			p.setProperty(WSDeployConsts.INTERFACE_SRC_PATH,interfacePkgHttp);//将"."转换为"/"
			
			p.setProperty(WSDeployConsts.MOVED_INTERFACE_DIR,"/.../WEB-INF/wssrc/interface");
			p.setProperty(WSDeployConsts.APP_NAME,wsDeployDTO.getAppPath());
			p.setProperty(WSDeployConsts.WS_PORT,wsDeployDTO.getWsport());
			p.setProperty(WSDeployConsts.WSDL_FILE_NAME,wsDeployDTO.getWsdlFileName());
			p.setProperty(WSDeployConsts.SERVICE_NAME,wsDeployDTO.getServiceName());
			p.setProperty(WSDeployConsts.MOVED_SRC_DIR,"/.../WEB-INF/wssrc");
			
			FileOutputStream fos = new FileOutputStream(buildFile);
			p.store(fos,"end");
			
			logger.info("** end modifyAntProps");
		}catch(Exception e){
			logger.error("修改ant属性文件: " + e.getMessage());
			throw new BusinessException("修改ant属性文件失败");
		}
	}
}

 

4
0
分享到:
评论

相关推荐

    axis发布webservice教程源代码

    【标题】"Axis发布Web服务教程源代码"指的是使用Apache Axis框架来创建并发布Web服务的教学资源,其中可能包含了详细的步骤、示例代码以及相关的配置文件。Apache Axis是开源的Java库,它允许开发者在Java平台上快速...

    c#应用webService实现自动升级源代码

    在本文中,我们将深入探讨如何使用C#语言和Web服务(WebService)来实现应用程序的自动升级功能。这个解决方案的关键在于模块化设计,确保更新过程独立于用户的应用程序,同时提供了下载进度显示,版本检测和自动...

    webservice接口自动生成工具

    这个工具的主要功能是根据定义的接口描述文件(如WSDL,Web Services Description Language),自动生成对应的Java源代码。WSDL文件是一种XML格式的文档,用于描述Web服务及其接口的细节,包括服务的位置、提供的...

    webservice 源代码 vb

    "webservice 源代码 vb"的标题表明这是一个使用VB编写的Web服务的源代码示例,对于学习和理解如何在VB环境中构建Web服务具有很高的参考价值。 描述中提到“值得一看,值得研究,vb办,很有价值,建议收藏”,这暗示...

    webservice源代码.zip

    3. **WSDL生成器**:源代码可能包含自动生成WSDL文件的工具,这样服务提供者可以方便地暴露其接口信息。 4. **部署脚本和配置文件**:这些文件用于在服务器上部署和配置WebService,如web.xml或wsdd.xml。 5. **...

    webService部署tomcat需要的jax-ws jar包

    2. **jaxws-rt-2.1.7-sources.jar** - 这是`JAX-WS`运行时的源代码,包含了服务端和客户端实现,允许开发人员理解和调试`JAX-WS`的内部工作原理。 3. **jaxb-impl-2.1.8.jar** - `JAXB`的实现,用于将Java对象序列...

    webservice服务

    - Web服务的Java源代码或接口定义。 - 配置文件:如axis服务部署文件(.aar格式)或者服务相关的xml配置。 - Wsdl和Schema文件:定义服务接口和数据类型。 - 运行时依赖库:可能包括服务所需的相关jar包。 总结来说...

    xfire发布webservice服务

    "xfireDemo1"可能包含了一个简单的XFire Web服务的源代码、配置文件和运行说明,供读者下载并跟随操作,以理解XFire的工作原理。 详细知识点: 1. **XFire介绍**:XFire是一个基于Java的轻量级Web服务框架,它支持...

    webservice cxf 整合spring例子源代码

    4. **发布Web服务**:在Spring配置完成后,可以通过Spring启动CXF的Bus,使Web服务自动发布到指定的地址。这通常通过`<jaxws:endpoint>`标签的`address`属性完成。 5. **客户端调用**:在Spring环境中,也可以方便...

    Spring+CXF开发WebService源代码

    本教程将基于"Spring+CXF开发WebService源代码"的主题,深入探讨如何利用这两者创建和消费Web服务。 首先,Spring是一个开源的应用框架,提供了一个全面的编程和配置模型,适用于Java应用程序。它为开发企业级应用...

    Webservice使用xfire发布及客户端调用

    在实践中,你可能需要阅读和理解XFire的源代码,或者使用一些IDE插件(如Eclipse的CXF插件)来帮助你更好地集成和调试Web服务。 总之,XFire提供了一种简单的方法来构建和消费Web服务,特别适合初学者和小型项目。...

    Axis1发布webservice服务

    - 可能还包含示例的Java源代码和编译后的类文件,用于演示如何发布和调用Web服务。 要运行此项目,你需要将这些jar文件加入到项目的类路径中,然后按照上述步骤进行操作。如果遇到问题,可以根据描述中的提示寻求...

    通用自动更新程序及源代码,采用WEBSERVICE

    【通用自动更新程序及源代码】是一个基于VB.NET编写的软件更新系统,它利用了WEBSERVICE技术来实现远程数据交换和更新功能。这个系统设计的目的是为了简化应用程序的更新流程,确保用户能够轻松地获取并安装最新的...

    springboot整合CXF发布webservice和客户端调用

    - `src`目录包含源代码,通常分为`main/java`和`test/java`,分别存放源码和测试代码。 - `target`目录是Maven编译后的输出目录,包括编译后的类文件和打包的JAR/WAR文件。 5. **学习资源** - 项目中的详细注释...

    Tomcat下发布webservice1

    标签中的“源码”指的是Web服务的Java源代码,而“工具”可能指的是用于开发、生成WSDL和测试服务的工具,例如Eclipse IDE、IntelliJ IDEA、wsimport命令行工具以及测试工具如SoapUI。 这个过程中,开发者需要熟悉...

    ASP.NET WebService using SoapUI-3.0.1-src

    ASP.NET WebService是微软开发的一种基于.NET Framework的Web服务技术,它允许开发者创建和消费SOAP(Simple Object Access Protocol)协议的Web服务。SoapUI是一款功能强大的SOAP和REST测试工具,可以方便地对Web...

    pb11.5创建以及调用webservice实例

    它可以帮助你更好地理解和实践上述过程,通过查看源代码或执行示例,你可以更直观地了解PB11.5中创建和调用Web服务的具体操作。 总的来说,PB11.5提供了强大的Web服务支持,使得开发者能够轻松地在PowerBuilder应用...

    webservice 打包 开发工具

    3. **UDDI(Universal Description, Discovery, and Integration)**:UDDI是一种标准的目录服务,用于发布和查找Web服务。开发者可以通过UDDI注册他们的Web服务,以便其他开发者可以发现并使用。 4. **WS-* 标准**...

    webservice的jax+ws实现

    3. **发布服务**:使用 JAX-WS 提供的工具来发布服务。这通常涉及创建一个 Web 应用项目并在其中部署服务类。 4. **测试服务**:可以通过浏览器或工具直接访问服务端点 URL 来测试服务是否正常工作。URL 形式通常为...

    AXIS发布webservice

    AXIS发布WebService是一个在IT行业中常见的任务,尤其在企业级应用集成或Web服务开发中扮演着重要角色。AXIS是一个开放源码的Java库,它提供了用于创建、部署和使用Web服务的工具和API。本篇文章将深入探讨AXIS如何...

Global site tag (gtag.js) - Google Analytics