背景
NC规则系统需要与持续集成对接,需要在进行持续构造的过程中与Hudson集成,让持续构造工具能够时刻执行规则系统中的规则,并生成结果。
为了满足这个要求,在OSGi端分离了单独的Equinox OSGi容器,把规则执行所使用的bundle部署至容器中,并通过/cxf-dosgi-ri-singlebundle-distribution对OSGi中的声明式服务包装,发布成Web Service,供外部调用。
使用客户端对Web Service进行调用
在Web Service发布出来之后,需要使用Apache CXF对生成的Web Service进行客户端调用,在调用之前,需要生成客户端源码,这就需要使用cxf/bin目录下的wsdl2java.bat来生成源码(前提:Web Service服务已打开),执行命令:
wsdl2java.bat –d “生成文件目录” –wsdlurl “对应的wsdl地址,比如 http://localhost:9090/ruleexecute?wsdl”,就可以在对应的生成目录找到源码,将其拷贝进工程目录即可。
如何进行调用?客户端代码如何编写?
public static void main(String[] args) throws Exception { JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance(); Client client = clientFactory.createClient("http://127.0.0.1:9090/ruleexecute?wsdl"); Object[] result = client.invoke("execute", "D:\\Develop\\test\\uap631", "D:\\Develop\\test\\NC_MM_PAC6.31_dev_2\\NC6_MM_VOB\\NC_MM_PAC", "nc631_xxq1227"); System.out.println(result[0]); }
|
其中需要依赖的apache cxf jar包列表如下:
/apache-cxf/lib/cxf-2.7.0.jar /apache-cxf/lib/velocity-1.7.jar /apache-cxf/lib/commons-collections-3.2.1.jar /apache-cxf/lib/commons-lang-2.6.jar /apache-cxf/lib/wsdl4j-1.6.2.jar /apache-cxf/lib/jaxb-xjc-2.2.5.jar /apache-cxf/lib/jaxb-impl-2.2.5.jar /apache-cxf/lib/xmlschema-core-2.0.3.jar /apache-cxf/lib/neethi-3.0.2.jar /apache-cxf/lib/httpcore-4.2.2.jar /apache-cxf/lib/httpcore-nio-4.2.2.jar /apache-cxf/lib/httpasyncclient-4.0-beta3.jar /apache-cxf/lib/httpclient-4.2.1.jar /apache-cxf/lib/commons-logging-1.1.1.jar
|
Ant扩展
由于NC产品构造是采用ant进行构建的,因此需要对ant中的Task进行扩展,以支持在构造的前后都可以对产品的规则进行执行,并得出结果。
如果对Ant进行扩展?首先,我们需要将ant执行中的ant.jar放置在工程中的classpath目录下,由于我们的自定义ant任务就是一个比较简单的Task,并不嵌入其他任务类型,只要从标准的org.apache.tools.ant.Task继承并覆盖execute方法即可。
在ant中配置参数就比较简单了,只需要在对应的Task实现中加入相应字段并生成其set/get方法即可(这里假定所有的字段都是String类型),
public class RuleValidatorAntTask extends Task { private String wsUrl; private String methodName; private String ncHome; private String srcFolder; private String dataSourceName; @Override public void execute() throws BuildException { try { SimpleClient.execute(wsUrl, methodName, ncHome, srcFolder, dataSourceName); } catch (Exception e) { throw new BuildException(e); } } //get/set方法省略… |
Ant部署
在开发完成后,如何对其进行验证,这就需要把我们写的插件部署至ant中,进行执行操作,将工程导出为jar包(注意不需要导出依赖的jar包)。
由于我们刚编写的ant插件依赖了一些cxf的包,这些包也需要单独拿出来,一起部署。将生成的jar包和对应的cxf包统一放置在ant/lib中,由ant进行调用。
Ant中是采用build.xml配置文件的方式进行调用构建的,在build.xml中我们需要先对扩展的任务进行声明后才能使用。
<?xml version="1.0" ?> <project name="testRuleValidator" default="test" basedir="."> <taskdef name="rulevalidator" classname="com.yonyou.nc.codevalidator.runtime.RuleValidatorAntTask" classpath="."/> <target name="test"> <rulevalidator wsUrl="http://127.0.0.1:9090/ruleexecute?wsdl" methodName="execute" ncHome="D:\Develop\test\uap631" srcFolder="D:\Develop\test\NC_MM_PAC6.31_dev_2\NC6_MM_VOB\NC_MM_PAC" dataSourceName="nc631_xxq1227" /> </target> </project> |
<taskdef>标签用来定义对应的执行类名以及简称(rulevalidator),在真正的target中就可以直接使用<rulevalidator>对任务进行调用操作,其中配置的属性和类中定义的属性名称保持一致。
在本目录下的命令行中执行ant,即可验证是否可以调用成功。
相关推荐
【Web Service简介】 Web Service是一种基于开放标准的、自包含且自...通过以上步骤,开发者可以快速地在Axis2上构建和部署Web Service,实现跨系统的通信。轴心轴2的特性使其成为开发高效、可扩展Web服务的理想选择。
它实现了SOAP 1.2规范和SOAP with Attachments,使得开发者可以快速构建基于Web Services的应用。 4. **SOAP**:SOAP(Simple Object Access Protocol)是一种基于XML的协议,用于交换结构化信息。它允许Web ...
本实例将深入探讨Web服务的实现和使用,特别是通过XML(可扩展标记语言)和WSDL(Web服务描述语言)进行通信。 1. **Web服务基础** Web服务的核心概念是SOA(Service-Oriented Architecture,面向服务架构),它...
通过使用Spring Web Service,开发者可以轻松地定义服务接口,并基于这些接口自动生成WSDL文件,进而实现服务的发布和调用。 在实战过程中,`build.xml`文件通常是Ant或Maven的构建脚本,用于自动化项目的构建过程...
1. 灵活性:Axis 提供了灵活的方式来调用 Web 服务,无需关心底层的实现细节。 2. 高性能:Axis 使用了高性能的 SOAP messaging 机制来调用 Web 服务。 3. 可扩展性:Axis 提供了丰富的 API,允许开发者自定义和扩展...
最后,执行`ant build-wsdd`命令来生成web service的描述文件(如`server-config.wsdd`)。请注意,执行这个命令时,portlet的路径不应包含中文字符或特殊字符,以防止编译失败。 生成的`server-config.wsdd`文件...
Axis2提供了一种高效、灵活且可扩展的方式来实现服务端和客户端的服务调用。当涉及到“axis2客户端调用服务端,带用户身份认证”时,我们主要关注的是如何在 Axis2 客户端中添加安全机制,确保只有经过验证的用户...
- Ant 文件会调用 GWT 的 Java-to-JavaScript 编译器,该编译器负责将 Java 代码转换成 JavaScript。 **3. 宿主模式与 Web 模式的使用:** - 宿主模式是 GWT 提供的一个开发调试模式,它允许开发者在本地 JVM 上...
【标题】"Axis2 Service Archiver 1.3.0"是针对MyEclipse的一款Web开发插件,专门用于Axis2服务的打包和发布。这个工具简化了在MyEclipse环境中构建和部署基于Axis2的服务的过程,使得开发者可以更加高效地进行WS...
前后端交互使用JWT验证权限,使用Redis调用lua脚本CAS的方式,并且在令牌刷新时,旧令牌续命30秒进行平滑过渡,丝般顺滑地达到了用户无感知动态刷新JWT的目的。 jpa`动态条件查询写起来麻烦`,`项目的逻辑复杂的...
Vue.js是一个轻量级且高度可扩展的前端框架,而Ant Design则是一个美观、实用的React组件库,但在Vue.js项目中也可以通过Vue-Antd-UI来使用其设计风格和组件。 1. **Vue.js**:Vue.js是当前非常流行的前端框架之一...
在Java领域中,Web服务是一种常用的技术手段,用于实现不同系统间的通信。XFire作为一个轻量级且功能强大的Web服务框架,它简化了开发过程,使得开发者能够更容易地创建和部署Web服务。本文将详细介绍如何使用XFire...
前端源码中,你会看到Vue组件的实现、路由配置、状态管理(如Vuex)以及与后端API的接口调用。后端源码则涉及SpringBoot的Controller、Service、Repository层,以及安全配置、数据库连接配置等。 总的来说,这个...
Apache Axis2是Java平台上的一个Web服务引擎,它提供了高效、灵活且可扩展的架构来处理Web服务。在Axis2中,服务存档是一个包含所有必要组件(如WSDL,Java类,配置文件等)的自包含单元,用于部署和执行Web服务。 ...
综上所述,《J2EE WEB开发指南》覆盖了J2EE平台的各个方面,从基本概念到具体实现都有详细的介绍。对于初学者来说,这份指南提供了一个很好的起点,帮助他们理解和掌握J2EE开发的核心技术和实践。
创建一个新的类,扩展`org.apache.axis.deployment.ServiceDeployer`,并在`deploy`方法中加载Spring上下文并获取Web服务Bean。 ```java public class SpringServiceDeployer extends ServiceDeployer { // 加载...
本文主要探讨的是如何在WebLogic 9 中实现SOA的一个具体例子,涉及的关键技术包括Java Web Service(JWS)、JSR-921、JSR-175 和 JSR-181。 **Java Web Service (JWS)** JWS 是Java 2 Platform, Enterprise ...
服务端提供服务,客户端通过WSDL(Web Service Description Language)来查找并调用服务。WSDL是一个XML格式的文档,用于描述Web服务的接口、消息格式、操作和地址。客户端通过WSDL了解服务的使用方法,然后使用SOAP...
这些方法对于开发人员来说非常重要,因为它们提供了灵活性和多种选择来连接到 Web 服务,无论服务提供者如何实现。 1. **通过 WSDL 地址创建动态客户端**: 这是最常见的方法,它允许开发者动态地从 WSDL(Web ...