`
tower
  • 浏览: 243678 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ofbiz的服务(service)export成web service的方法(2)

阅读更多
ofbiz的一个bug?

在被外部系统调用的时候,SOAP应该是一个常用的方式,但是很遗憾的是,ofbiz对SOAP的支持并不是很好,我们可以试一个简单的例子,就是party组件中的createPerson,我们把export修改成true:
  1. <service name="createPerson" engine="java" default-entity-name="Person"
  2.             location="org.ofbiz.party.party.PartyServices" invoke="createPerson" auth="false" export="true">
  3.         <description>Create a Person</description>
  4.         <auto-attributes mode="INOUT" include="pk" optional="true"/>
  5.         <auto-attributes mode="IN" include="nonpk" optional="true"/>
  6.         <attribute name="statusId" type="String" mode="IN" optional="true"/>
  7.         <attribute name="preferredCurrencyUomId" type="String" mode="IN" optional="true"/>
  8.         <attribute name="description" type="String" mode="IN" optional="true"/>
  9.         <override name="firstName" optional="false"/>
  10.         <override name="lastName" optional="false"/>
  11.     </service>


重启ofbiz后,我们访问:
http://127.0.0.1:8080/webtools/control/SOAPService/createPerson?WSDL,浏览器提示出错,

查看日志,console.log,在访问失败的时候提示:
2008-11-10 13:35:49,093 (http-0.0.0.0-8080-Processor3) [     RequestHandler.java:305:ERROR] Request SOAPService caused an error with the following message: Error calling event: org.ofbiz.webapp.event.EventHandlerException: Unable to obtain WSDL (WSDLException: faultCode=OTHER_ERROR: Service cannot be described with WSDL (birthDate / java.sql.Date))
 
 
根据"org.ofbiz.webapp.event.EventHandlerException"的提示,我们到framework/webapp/src/org/ofbiz/event目录下去看,有一个class,SOAPEventHandler.java
打开看,正是这个类来把处理wsdl的请求的。
 
根据浏览器提示的错误信息"Unable to obtain WSDL",在这个类里面看,果然在96行有:
sendError(response, "Unable to obtain WSDL");
 
这是
wsdl = dctx.getWSDL(serviceName, locationUri);
抛出异常后的错误。所以问题9成是这里造成的。
 
再回顾
2008-11-10 13:35:49,093 (http-0.0.0.0-8080-Processor3) [     RequestHandler.java:305:ERROR] Request SOAPService caused an error with the following message: Error calling event: org.ofbiz.webapp.event.EventHandlerException: Unable to obtain WSDL (WSDLException: faultCode=OTHER_ERROR: Service cannot be described with WSDL (birthDate / java.sql.Date))
看到最后的"birthDate / java.sql.Date"了吗?birthDate是Person里面的一个字段,难道和数据类型有关系,存疑。
 
 
顺着wsdl = dctx.getWSDL(serviceName, locationUri);用eclipse很容易就找到了ofbiz/framework/service/src/org/ofbiz/service/ModelParam.java里面的:
protected String java2wsdlType() throws WSDLException
这个方法是来吧serivce中参数类型转换成web service的参数类型的,
 
这里补充一个基础知识,ofbiz中实体中的字段类型,对应的java中的数据类型的定义是通过一个xml文件定义的,在framework/entity/fieldtype下,这下面有很多个文件,是不同的数据库对应的配置文件,
我们看无论是mysql或者是derby,实体中的date对应的java类型是java.sql.Date。
 
回到正题,protected String java2wsdlType() throws WSDLException 方法中,大家找一下,只有java.util.Date这个的转换,而没有java.sql.Date的转换,问题就出在这里了,
好了,我们新加一段在这个函数里面:
  1.         } else if (ObjectType.instanceOf(java.sql.Date.classthis.type)) {
  2.             return "dateTime";
  3.         } else if (ObjectType.instanceOf(java.sql.Time.classthis.type)) {
  4.             return "string";
  5.         }

对java.sql.Date和java.sql.Time进行一下处理,重新build一下源代码,再试着访问一下,果然就可以了。



分享到:
评论
1 楼 freecode 2009-05-08  
学习中,继续。

相关推荐

    ofbiz_springservice.zip

    基于spring封装的ofbiz所有服务,使用spring security进行安全验证,可以方便的发布为微服务,同时实现了一套直接使用ofbiz实体引擎操作ofbiz所有数据库表的spring应用框架设计

    Ofbiz的Web框架.

    Ofbiz的Web框架.

    OFBIZ开发指南 英文2

    它的核心组件包括实体引擎(Entity Engine)、事务处理引擎(Transaction Engine)、服务引擎(Service Engine)、工作流引擎(WorkEffort Engine)以及事件驱动模型(Event Driven Model)。理解这些组件的功能和...

    ofbiz git 服务搭建

    【OFBiz Git 服务搭建详解】 OFBiz是一个开源的企业级应用框架,主要用于构建和管理电子商务系统。本教程将详细介绍如何在本地环境中搭建OFBiz项目,并使用Git进行版本控制。 首先,确保你拥有以下基础环境: 1. ...

    ofbiz开发者入门教程

    此外,理解Ofbiz的事件驱动模型和基于服务组件架构(Service Component Architecture, SCA)的设计原则也至关重要。 总之,Ofbiz提供了一个全面的平台,让开发者能够高效地构建企业级应用。通过逐步学习和实践,你...

    OFBIZ10.04组件开发入门.doc

    服务是OFBIZ中实现业务逻辑的单元,定义在`service.xml`文件中。服务可以调用其他服务,实现业务流程的编排。 ### 12. 国际化资源 OFBIZ支持多语言,通过`.properties`文件提供国际化资源,如错误消息、提示信息等...

    ofbiz api开发文档

    API的设计遵循了面向服务架构(SOA),支持RESTful风格的Web服务,同时也提供传统的Java API调用方式。 2. **API 文档结构** OFBiz API中文版.chm文件是一个典型的Windows帮助文档,其中详细列举了OFBiz的所有服务...

    ofbiz一个完整例子

    本示例将带你逐步了解如何在OFBiz中创建一个完整的应用实例,从实体创建到服务定义,再到界面展现。 1. 创建实体 在OFBiz中,实体是数据模型的核心,它们对应于数据库中的表。在`Hot-deploy/myfirstdemo/entitydef/...

    ofbiz开发入门之CmsBackEnd实现的CRUD

    2. **读取(Retrieve)**: 要读取已存在的数据,开发者可以使用查询语言如EQL(Entity Query Language)或者通过服务调用实体引擎的`find`方法。例如,获取所有`CmsRegister`条目,可以根据特定条件如发布日期或作者...

    Ofbiz快速开发入门详解

    在《Ofbiz开发快速入门》中,你将了解到Ofbiz的核心概念,如实体模型(Entity)、服务(Service)和组件(Component)。实体模型是Ofbiz的基础,它定义了业务数据结构;服务则负责处理业务逻辑,是Ofbiz实现功能的...

    关于OFBIZ的资料

    2. **功能模块**:OfBiz的各个模块如电子商务商店、库存管理、订单处理等可能会有示例数据和操作流程,用户可以通过这些例子学习如何使用OfBiz进行日常业务操作。 3. **用户界面**:演示环境中,用户可以看到OfBiz...

    ofbiz-practice

    3. **OFBiz架构理解**:OFBiz使用模型-视图-控制器(MVC)设计模式,包含实体(Entity)、服务(Service)、组件(Component)、控制器(Controller)和视图(View)等部分。理解这些概念对于开发至关重要。 4. **...

    基于Ofbiz的Web框架.pdf

    Ofbiz的Web请求流程通常涉及以下几个步骤:接收请求、解析请求、调用服务、更新模型、渲染视图并返回响应。这一过程确保了请求处理的高效性和灵活性。 总的来说,基于Ofbiz的Web框架提供了一种强大且全面的方式来...

    ofbiz安装与配置

    * webtools:Ofbiz 的 Web 工具代码 使用 Eclipse 打开 Ofbiz 的 Ant 命令 我们可以使用 Eclipse 打开 Ofbiz 的 Ant 命令,以便编译和运行 Ofbiz。我们可以在 Eclipse 的“Window”菜单中选择“Show View” &gt; ...

    OFBiz经典入门教程加速度编写

    2. **服务开发**:服务引擎是OFBiz处理业务逻辑的核心,服务定义文件(.servicedef.xml)定义了服务的输入输出参数和执行路径。 3. **工作流与事件处理**:OFBiz支持工作流模型,事件驱动的设计模式使得系统能灵活...

    ofbiz数据结构设计

    服务层的设计采用服务组件架构(Service Component Architecture,SCA),服务通过接口定义,实现松耦合和高复用。服务可以调用实体引擎进行数据操作,确保了数据访问的统一性和一致性。 四、工作流(WorkFlow) ...

    ofbiz学习笔记(自学整理)

    文档中提供的"新建 Microsoft Word 文档 (2).docx"和"新建 Microsoft Word 文档.docx"可能是详细的学习笔记或者教程,涵盖了Ofbiz的基础概念、配置步骤、实例分析等内容。建议首先阅读这些文档,以便对Ofbiz有一个...

    ofbiz jar file2

    ofbiz jar file, some jars for ofbiz

Global site tag (gtag.js) - Google Analytics