ofbiz的一个bug?
在被外部系统调用的时候,SOAP应该是一个常用的方式,但是很遗憾的是,ofbiz对SOAP的支持并不是很好,我们可以试一个简单的例子,就是party组件中的createPerson,我们把export修改成true:
- <service name="createPerson" engine="java" default-entity-name="Person"
- location="org.ofbiz.party.party.PartyServices" invoke="createPerson" auth="false" export="true">
- <description>Create a Person</description>
- <auto-attributes mode="INOUT" include="pk" optional="true"/>
- <auto-attributes mode="IN" include="nonpk" optional="true"/>
- <attribute name="statusId" type="String" mode="IN" optional="true"/>
- <attribute name="preferredCurrencyUomId" type="String" mode="IN" optional="true"/>
- <attribute name="description" type="String" mode="IN" optional="true"/>
- <override name="firstName" optional="false"/>
- <override name="lastName" optional="false"/>
- </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的转换,问题就出在这里了,
好了,我们新加一段在这个函数里面:
- } else if (ObjectType.instanceOf(java.sql.Date.class, this.type)) {
- return "dateTime";
- } else if (ObjectType.instanceOf(java.sql.Time.class, this.type)) {
- return "string";
- }
对java.sql.Date和java.sql.Time进行一下处理,重新build一下源代码,再试着访问一下,果然就可以了。
分享到:
相关推荐
基于spring封装的ofbiz所有服务,使用spring security进行安全验证,可以方便的发布为微服务,同时实现了一套直接使用ofbiz实体引擎操作ofbiz所有数据库表的spring应用框架设计
Ofbiz的Web框架.
它的核心组件包括实体引擎(Entity Engine)、事务处理引擎(Transaction Engine)、服务引擎(Service Engine)、工作流引擎(WorkEffort Engine)以及事件驱动模型(Event Driven Model)。理解这些组件的功能和...
【OFBiz Git 服务搭建详解】 OFBiz是一个开源的企业级应用框架,主要用于构建和管理电子商务系统。本教程将详细介绍如何在本地环境中搭建OFBiz项目,并使用Git进行版本控制。 首先,确保你拥有以下基础环境: 1. ...
此外,理解Ofbiz的事件驱动模型和基于服务组件架构(Service Component Architecture, SCA)的设计原则也至关重要。 总之,Ofbiz提供了一个全面的平台,让开发者能够高效地构建企业级应用。通过逐步学习和实践,你...
服务是OFBIZ中实现业务逻辑的单元,定义在`service.xml`文件中。服务可以调用其他服务,实现业务流程的编排。 ### 12. 国际化资源 OFBIZ支持多语言,通过`.properties`文件提供国际化资源,如错误消息、提示信息等...
API的设计遵循了面向服务架构(SOA),支持RESTful风格的Web服务,同时也提供传统的Java API调用方式。 2. **API 文档结构** OFBiz API中文版.chm文件是一个典型的Windows帮助文档,其中详细列举了OFBiz的所有服务...
本示例将带你逐步了解如何在OFBiz中创建一个完整的应用实例,从实体创建到服务定义,再到界面展现。 1. 创建实体 在OFBiz中,实体是数据模型的核心,它们对应于数据库中的表。在`Hot-deploy/myfirstdemo/entitydef/...
2. **读取(Retrieve)**: 要读取已存在的数据,开发者可以使用查询语言如EQL(Entity Query Language)或者通过服务调用实体引擎的`find`方法。例如,获取所有`CmsRegister`条目,可以根据特定条件如发布日期或作者...
在《Ofbiz开发快速入门》中,你将了解到Ofbiz的核心概念,如实体模型(Entity)、服务(Service)和组件(Component)。实体模型是Ofbiz的基础,它定义了业务数据结构;服务则负责处理业务逻辑,是Ofbiz实现功能的...
2. **功能模块**:OfBiz的各个模块如电子商务商店、库存管理、订单处理等可能会有示例数据和操作流程,用户可以通过这些例子学习如何使用OfBiz进行日常业务操作。 3. **用户界面**:演示环境中,用户可以看到OfBiz...
3. **OFBiz架构理解**:OFBiz使用模型-视图-控制器(MVC)设计模式,包含实体(Entity)、服务(Service)、组件(Component)、控制器(Controller)和视图(View)等部分。理解这些概念对于开发至关重要。 4. **...
Ofbiz的Web请求流程通常涉及以下几个步骤:接收请求、解析请求、调用服务、更新模型、渲染视图并返回响应。这一过程确保了请求处理的高效性和灵活性。 总的来说,基于Ofbiz的Web框架提供了一种强大且全面的方式来...
* webtools:Ofbiz 的 Web 工具代码 使用 Eclipse 打开 Ofbiz 的 Ant 命令 我们可以使用 Eclipse 打开 Ofbiz 的 Ant 命令,以便编译和运行 Ofbiz。我们可以在 Eclipse 的“Window”菜单中选择“Show View” > ...
2. **服务开发**:服务引擎是OFBiz处理业务逻辑的核心,服务定义文件(.servicedef.xml)定义了服务的输入输出参数和执行路径。 3. **工作流与事件处理**:OFBiz支持工作流模型,事件驱动的设计模式使得系统能灵活...
服务层的设计采用服务组件架构(Service Component Architecture,SCA),服务通过接口定义,实现松耦合和高复用。服务可以调用实体引擎进行数据操作,确保了数据访问的统一性和一致性。 四、工作流(WorkFlow) ...
文档中提供的"新建 Microsoft Word 文档 (2).docx"和"新建 Microsoft Word 文档.docx"可能是详细的学习笔记或者教程,涵盖了Ofbiz的基础概念、配置步骤、实例分析等内容。建议首先阅读这些文档,以便对Ofbiz有一个...
ofbiz jar file, some jars for ofbiz