`

ofbiz的webservice接口提供(1)-WSDL的生成

 
阅读更多

ofbiz的service:这个是ofbiz赖以骄傲的设计方式。她可以将所有内部实体对象的CRUD都使用service的方式提供,不同系统之间可以通过互相调用service来完成业务操作。这种松耦合的方式是很多框架梦寐以求的效果。 

 在ofbiz4的文档中提到,如果想将ofbiz的某个服务开放成webservice只是需要轻轻的将我们定义service文件中的service属性中的export设定为true。

 例如:我的一个ofbiz项目的servicedef目录下的services.xml文件中定义了一个服务

 

[xhtml] view plaincopy
 
 
  1. <service   
  2.     name="findSeniorService"    
  3.     engine="java"   
  4.     location="com.hc360.cem.ws.CEMSeniorMemberService"   
  5.     invoke="findSeniorService"   
  6.     export="true"   
  7.     validate="false"   
  8.     auth="false">  
  9.     <description>CRM call CEM findSeniorService soap</description>  
  10.     <attribute name="userid" type="String" mode="INOUT" optional="true"/>  
  11.     <attribute name="salt" type="String" mode="IN" optional="true"/>  
  12.     <attribute name="aaa" type="String" mode="OUT" optional="true"/>        
  13.     <attribute name="bbb" type="String" mode="OUT" optional="true"/>        
  14.     <attribute name="ccc" type="String" mode="OUT" optional="true"/>        
  15. </service>  

 

上边图片的意思就是将:com.hc360.cem.ws.CEMSeniorMemberService类中的findSeniorService作为soap接口提供出去。输入参数有userid、salt,输出参数有userid、aaa、bbb、ccc。

而我实际类如下:

 

[c-sharp] view plaincopy
 
 
  1. import java.util.Map;  
  2. import javolution.util.FastMap;  
  3. import org.ofbiz.base.util.Debug;  
  4. import org.ofbiz.service.DispatchContext;  
  5.   
  6. public class CEMSeniorMemberService {  
  7.    /** 
  8.     * 开放一个service供测试使用 
  9.     * wsdl的访问方式:http://yourip:port/project/control/SOAPService/findSeniorService?wsdl 
  10.     * 但是ofbiz给我们生成的wsdl使用任何的客户端生成工具都无法正确生成,但是这个webservice接口是可以使用的 
  11.     * @author kongqz 
  12.     * @date 2009-03-11 
  13.     *  
  14.     * */  
  15.     public static Map<String, Object> findSeniorService(DispatchContext ctx, Map<String, ? extends Object> context) {  
  16.         //存放结果的map  
  17.         Map<String, Object> result = FastMap.newInstance();  
  18. //        GenericDelegator delegator = ctx.getDelegator();  
  19.   
  20.         String userid = (String) context.get("userid");  
  21.         String salt = (String) context.get("salt");  
  22.         Debug.logInfo("salt is ["+salt+"],userid is ["+userid+"] ""findSeniorService");  
  23.   
  24.         result.put("aaa""test_aaaaa");  
  25.         result.put("bbb""test_bbbbb");  
  26.         result.put("ccc""test_ccccc");  
  27.         result.put("userid", userid);  
  28.         return result;  
  29.     }  
  30. }  

 

 

 

我传入的参数将从ofbiz的这个context中获取,而我返回的参数将通过result这个map来put出去。

这里我想说明的是:这个时候如果我调用如下链接:

http://yourip:port/projectname/control/SOAPService/findSeniorService?wsdl

就可以看到我这个服务的wsdl文件。

 

如果想看整个项目所有暴露给外部访问的webservice有哪些,我可以使用

http://yourip:port/projectname/control/SOAPService?wsdl

来进行查看。

通过上边wsdl链接我们需要知道一点,我们的SOAPService哪里来的?

这里就需要指出,如果想将你的SOAPService暴露给外部,需要ofbiz的controller来做点贡献。因为ofbiz的外部请求都是通过ofbiz的servlet来处理的,入口点是项目的controller文件,我们需要给controller文件增加支持。

controller文件:ofbiz当前项目的所有请求的入口,通过对应request-map:将所有的请求uri对应到指定的处理函数上。

增加如下:

 

[xhtml] view plaincopy
 
 
  1. <!-- 引擎接口 -->  
  2. <request-map uri="httpService">  
  3.     <event type="java" path="org.ofbiz.service.engine.HttpEngine" invoke="httpEngine"/>  
  4.     <response name="success" type="none"/>  
  5.     <response name="error" type="none"/>  
  6. </request-map>  
  7. <request-map uri="SOAPService">  
  8.     <event type="soap"/>  
  9.     <response name="error" type="none"/>  
  10.     <response name="success" type="none"/>  
  11. </request-map>  
  12. <request-map uri="xmlrpc" track-serverhit="false" track-visit="false">  
  13.     <event type="xmlrpc"/>  
  14.     <response name="error" type="none"/>  
  15.     <response name="success" type="none"/>  
  16. </request-map>  

 

 通过在controller.xml文件上的支持,你才能将httpService,SOAPService,xmlrpc这些服务对外提供,你的链接才能写成上边的方式。

  总结下ofbiz的webservice提供前提:

  1、controller的支持,SOAPService的接口暴露】

  2、service类的提供,这个类是static方式的,数据的传入传出使用map方式(注意那个context)

  3、services.xml文件的定义,将你的webservice定义在这里,并设定export=true,否则只能是一个内部的service了。

  4、访问我们项目提供的所有webservice,看wsdl文件是否可用

分享到:
评论

相关推荐

    开源工作流的比较和描述

    Freefluo 是一个基于WebService的工作流引擎,支持WSDL和XML等标准格式。Freefluo 的特点是其轻量级的设计和高度的可扩展性,可以轻松地与其他系统集成。此外,Freefluo 还支持IBM WSFL、XScufl等标准,为用户提供更...

    长江学者名单,来自网络来自网络

    长江学者名单,来自网络

    基于COMSOL的有限元仿真模型:单相变压器绕组及铁芯振动形变分析 · 时域仿真

    内容概要:本文介绍了基于COMSOL的单相变压器绕组及铁芯振动形变仿真模型。绕组在漏磁场的洛伦兹力作用下会发生振动并导致位移形变,而铁芯则因磁致伸缩效应产生振动形变。这两种形变都会影响变压器的性能和寿命。通过有限元仿真模型,特别是时域仿真,可以设置观察点并导出随时间变化的磁通、位移、压力和形变曲线,帮助研究人员更好地理解和解决这些问题。 适合人群:从事电力系统设备设计、制造和维护的技术人员,以及对有限元仿真感兴趣的科研人员。 使用场景及目标:①用于研究单相变压器绕组和铁芯的振动形变机理;②为优化变压器设计提供数据支持;③预测和预防变压器可能出现的问题,延长其使用寿命。 其他说明:文中提到的仿真模型不仅可以帮助理解变压器内部的工作机制,还可以为实际工程应用提供有价值的参考。

    Java编程基于面向对象的扑克牌游戏程序设计:多玩家对战逻辑与核心功能实现详解

    内容概要:本文介绍了一个基于Java语言实现的简单扑克牌游戏程序,详细阐述了游戏规则、功能模块设计、核心功能实现以及扩展建议。游戏使用标准52张扑克牌,支持2-4名玩家对战,玩家可出单张、对子、三张或顺子等牌型,牌型大小按三张>顺子>对子>单张排列。功能模块包括扑克牌类(Card)、牌堆管理类(Deck)、玩家类(Player)和游戏主逻辑类(PokerGame)。核心功能涵盖扑克牌的数据结构设计与比较规则、牌堆的初始化与洗牌发牌逻辑、玩家的手牌管理和游戏的回合制流程与胜负判定。; 适合人群:具有Java编程基础的学习者或开发者,尤其是对面向对象编程和游戏开发感兴趣的读者。; 使用场景及目标:①理解面向对象编程思想,掌握类与对象的定义和使用;②学习扑克牌游戏的基本规则和实现逻辑;③掌握Java语言中集合、枚举、接口等特性在实际项目中的应用;④为后续开发更复杂的扑克牌游戏打下基础。; 其他说明:本文提供了完整的代码实现和详细注释,有助于读者快速上手并理解每个部分的功能。同时,文中还给出了多项扩展建议,如增加牌型规则、优化交互界面、实现网络对战和AI对战系统等,鼓励读者在此基础上进行创新和改进。

    cmd-bat-批处理-脚本-findEscapeQuote.zip

    cmd-bat-批处理-脚本-findEscapeQuote.zip

    cmd-bat-批处理-脚本-循环-9.for-f-eol.zip

    cmd-bat-批处理-脚本-循环-9.for-f-eol.zip

    基于灰狼算法的局部阴影遮挡下MPPT实现及仿真分析

    内容概要:本文探讨了基于灰狼算法的MPPT控制策略,旨在解决局部阴影遮挡和光照突变条件下传统MPPT算法难以实现最优跟踪的问题。文中详细介绍了灰狼算法的基本原理及其在光伏系统中的应用,提出了建立光伏系统的数学模型并利用灰狼算法优化输出电压和电流的方法。通过编写灰狼算法程序并在Matlab/Simulink中搭建仿真模型,验证了该策略的有效性和优越性。仿真结果显示,灰狼MPPT控制策略在复杂环境下具有更高的寻优精度和更强的适应性。 适合人群:从事太阳能光伏系统研究的技术人员、科研工作者及高校相关专业师生。 使用场景及目标:适用于需要优化光伏系统能量利用率的研究项目,特别是在存在局部阴影遮挡和光照突变的应用环境中。目标是提高光伏系统的稳定性和效率。 其他说明:未来可以通过进一步优化灰狼算法程序和模型,拓展其在更多类似优化问题中的应用,为太阳能光伏系统的智能化发展提供支持。

    cmd-bat-批处理-脚本-check ad status.zip

    cmd-bat-批处理-脚本-check ad status.zip

    基于多通道卷积神经网络(MCCNN)的变压器故障诊断模型及其MATLAB仿真 多通道卷积神经网络 多通道卷积神经网络MCCNN在变压器故障诊断中的应用

    内容概要:本文介绍了一种基于多通道卷积神经网络(MCCNN)的变压器故障诊断模型的研究与实现。针对传统诊断方法面对变压器内部故障种类繁多且隐蔽性强的问题,提出了利用MCCNN处理多维度振动信号的方法。通过不同大小的卷积核提取局部和全局特征,在不增加模型复杂度的情况下提高了故障识别能力。文中详细描述了MCCNN模型的构建步骤,包括数据预处理、卷积层和池化层的设计,以及MATLAB平台上的具体实现。实验结果显示,MCCNN模型在变压器故障诊断方面表现出更高的准确率和更好的泛化能力。 适合人群:从事电力系统维护、故障诊断领域的工程师和技术研究人员。 使用场景及目标:适用于需要提升变压器故障诊断精度和效率的实际应用场景,如电力公司、变电站等。目标是通过先进的机器学习技术改进现有诊断手段,减少误判并提高系统的可靠性。 其他说明:文章提供了详细的理论背景和技术细节,有助于读者深入理解MCCNN的工作机制及其在特定任务中的优势。同时,附带的变压器振动信号数据集为后续研究提供了宝贵的数据支持。

    COMSOL多物理场仿真在水力压裂传热-应力-渗流-损伤模型中的应用研究

    内容概要:本文详细探讨了利用COMSOL多物理场仿真软件进行水力压裂传热-应力-渗流-损伤模型的研究。文章介绍了水力压裂过程中涉及的多个物理现象及其相互作用,如流体流动、岩层变形、温度变化和岩层破坏。通过具体的数学公式展示了不同物理场之间的耦合关系,如应力计算、热量传递、压力分布和损伤演化。此外,文章还讨论了模型构建的方法以及仿真结果的应用价值,强调了通过优化流体注入速率等参数来提高压裂效率的实际意义。 适合人群:从事水力压裂技术研究的专业人士、地质工程研究人员、能源开发领域的工程师和技术人员。 使用场景及目标:适用于希望深入了解水力压裂多物理场耦合机制的研究人员,旨在通过仿真分析优化水力压裂过程,提高压裂效率并降低成本。 阅读建议:读者应具备一定的物理学和工程学背景,特别是对多物理场耦合有基本了解。建议结合实际案例进行学习,以便更好地理解和应用文中提到的技术和方法。

    QtC++实现多功能节点式图形编辑器:树形结构、缩放、接口连接与图片导出 图片导出

    内容概要:本文详细介绍了如何使用Qt C++实现一个多功能的节点式图形编辑器。该编辑器具有左侧树形结构,支持面板缩放、节点间的输入输出接口连接以及图片导出功能。文章首先阐述了编辑器的基本架构和特性,接着逐步讲解了节点的添加与操作方法,包括通过右键菜单添加节点、鼠标选择并删除节点或线条。然后重点讨论了节点之间的接口连接机制,允许用户通过拖拽方式进行灵活的图形构建。最后,文章提到了图片导出功能,使用户能够保存编辑成果。此外,文中还简要提及了技术实现的关键点和技术细节,提供了部分代码片段供参考。 适合人群:对Qt C++有一定了解,希望深入学习图形编辑器开发的技术爱好者和开发者。 使用场景及目标:适用于需要开发复杂图形界面的应用程序,如数据流图绘制工具、流程设计器等。目标是掌握Qt C++在图形编辑器开发中的具体应用,提升编程技能。 其他说明:文中提供的源码已在特定版本(Qt5.6.1_MinGW、Qt5.13.1_MinGW)下验证通过,其他版本可能需要适当调整。

    Abaqus三点弯裂纹扩展模拟:骨料占比、界面强度对混凝土断裂性能的影响

    内容概要:本文深入探讨了利用Abaqus软件进行三点弯裂纹扩展的模拟研究,重点分析了骨料占比、骨料砂浆界面强度对混凝土断裂性能的影响,以及微裂缝的作用。同时,还讨论了混凝土水化热和浇筑温度场、应力场的相互影响。通过具体案例和技术细节的解析,展示了如何通过内聚力单元(COHESIVE)模拟混凝土材料内部的应力、应变行为,揭示了不同因素对混凝土性能的具体影响。 适合人群:从事土木工程、材料科学研究的专业人士,尤其是对混凝土性能有深入研究需求的工程师和科研人员。 使用场景及目标:适用于需要评估混凝土结构安全性和耐久性的项目,旨在优化工程设计并提高混凝土的使用寿命。通过对裂纹扩展机制的理解,可以更好地预防和解决实际工程中的问题。 阅读建议:读者应在已有一定的混凝土材料基础知识和有限元分析经验的基础上,结合实际工程案例进行理解和应用。文中涉及的技术细节和难点部分,建议反复研读并结合实际操作加深理解。

    电力电子变换器仿真:基于MatlabSimulink的三相全桥整流与闭环Buck电路模型 PI控制

    内容概要:本文详细介绍了两级式电力电子变换器的仿真模型及其构建方法。前级采用三相全桥整流电路,用于将380V交流电转换为直流电;后级则为闭环Buck电路,利用PI控制实现10V直流电的稳定输出。整个模型在MATLAB/Simulink环境中搭建,通过仿真验证了系统的性能和稳定性。文中不仅展示了具体的电路设计步骤,还提供了详细的仿真参数设置和结果分析。 适合人群:从事电力电子技术研究的专业人士、高校相关专业师生、对电力电子变换器感兴趣的工程技术人员。 使用场景及目标:适用于需要理解和掌握两级式电力电子变换器工作原理和技术细节的人群。通过本模型的学习,能够深入了解三相全桥整流和闭环Buck电路的设计思路,掌握MATLAB/Simulink仿真工具的应用技巧。 其他说明:该模型不仅有助于理论研究,还能为实际工程项目提供有价值的参考。通过对仿真结果的分析,可以优化电路设计,提高系统的效率和可靠性。

    cmd-bat-批处理-脚本-splitCommand.zip

    cmd-bat-批处理-脚本-splitCommand.zip

    cmd脚本-bat批处理-8.DecimalConversion.zip

    cmd脚本-bat批处理-8.DecimalConversion.zip

    电力系统仿真中变压器励磁涌流与环流电流的Python建模及其实验研究 · 变压器 指南

    内容概要:本文详细介绍了如何使用Python进行变压器励磁涌流的仿真复现,重点探讨了磁饱和效应对电流波形的影响。首先构建了一个非线性电感模型,利用欧拉法求解电路微分方程,展示了励磁涌流的典型特征——尖峰衰减波形。接着引入了两台变压器并列运行的情况,讨论了因参数差异导致的环流问题及其潜在危害。最后加入了磁滞效应,使仿真更加贴近实际情况。文中还提到了仿真过程中需要注意的关键参数调整方法。 适合人群:从事电力系统仿真研究的技术人员、高校相关专业学生、对电力电子感兴趣的开发者。 使用场景及目标:适用于需要深入理解变压器励磁涌流特性的场合,如电力设备保护设计、故障诊断等领域。目标是帮助读者掌握励磁涌流产生的机理,提高对电力系统的认知水平。 阅读建议:本文提供了完整的Python代码示例,建议读者跟随代码逐步实践,同时关注关键参数的选择和调整,以便更好地理解和应用所学知识。

    如何快速判断目标函数的凸性?如何判断一个矩阵是正定的?函数组合的凸性传递规律是什么?函数凸性总结.pdf

    如何快速判断目标函数的凸性?如何判断一个矩阵是正定的?函数组合的凸性传递规律是什么?函数凸性总结

    api-ms-win-core-winrt-l1-1-0.dll

    win7系统下,运行qt程序,提示缺少api-ms-win-core-winrt-l1-1-0.dll 的解决方法,对应的dll复制到程序根目录即可

    cmd脚本-bat批处理-2.Shift-MoreArgument0.zip

    cmd脚本-bat批处理-2.Shift-MoreArgument0.zip

    信道编码技术详解:Turbo码及相关编码译码原理与应用

    内容概要:本文深入探讨了Turbo码及其相关信道编码技术,涵盖线性分组码、卷积码、RSC递归系统卷积码、交织、解交织、咬尾卷积编码、打孔删余及Log-Map译码算法等关键概念和技术细节。文中不仅解释了各编码方法的工作原理,还展示了通过调整编码器参数和打孔删余策略实现的不同码率(如1/3、1/5)的灵活变换,并提供了误码率和误包率仿真的实例图表,帮助读者更好地理解和评估Turbo码的实际性能。 适合人群:从事数字通信领域的研究人员、工程师和技术爱好者,尤其是对信道编码技术和Turbo码有浓厚兴趣的专业人士。 使用场景及目标:适用于需要深入了解信道编码原理及其应用的研究项目、工程设计和技术培训。目标是掌握Turbo码的设计思路、编码译码流程及其优化方法,提升通信系统的可靠性和抗噪能力。 其他说明:本文不仅提供理论讲解,还包括具体的代码实现和仿真结果,使读者能够在实践中验证所学知识。

Global site tag (gtag.js) - Google Analytics