Mail
用axis调用服务
通过修改昨天说的ofbiz的源代码后,createPerson终于能够访问到WSDL的文件了,下一步就是编写客户端来调用了。
我们使用axis1.4来编写客户端,代码如下:
- package testClientSoap;
- import java.util.*;
- import java.net.*;
- import java.rmi.*;
- import javax.xml.namespace.*;
- import javax.xml.rpc.*;
- import org.apache.axis.Message;
- import org.apache.axis.encoding.XMLType;
- import org.apache.axis.message.RPCElement;
- import org.apache.axis.message.RPCParam;
- import org.apache.axis.message.SOAPEnvelope;
- import org.apache.axis.client.Call;
- import org.apache.axis.client.Service;
- import org.apache.axis.utils.*;
- public class TestCreatePerson {
-
- private static Map getResponseParams(Message respMessage) {
- Map mRet = new Hashtable();
- try {
- SOAPEnvelope resEnv = respMessage.getSOAPEnvelope();
- List bodies = resEnv.getBodyElements();
- Iterator i = bodies.iterator();
- while (i.hasNext()) {
- Object o = i.next();
- if (o instanceof RPCElement) {
- RPCElement body = (RPCElement) o;
- List params = null;
- params = body.getParams();
- Iterator p = params.iterator();
- while (p.hasNext()) {
- RPCParam param = (RPCParam) p.next();
- mRet.put(param.getName(), param.getValue());
-
- System.out.println("SOAP Client Param - " + param.getName() + "=" + param.getValue());
- }
- }
- }
- } catch (org.apache.axis.AxisFault e) {
- System.out.println("AxisFault");
- } catch (org.xml.sax.SAXException e) {
- System.out.println("SAXException");
- }
- return mRet;
- }
-
- public static void main(String[] args) {
-
- String message = "";
- Map output;
- ArrayList outputList;
- String responseMessage,firstName,lastName,endpoint;
-
- try {
- endpoint = "http://127.0.0.1:1234/webtools/control/SOAPService/";
- Call call = (Call) new Service().createCall();
- call.setTargetEndpointAddress(new URL(endpoint));
- call.setOperationName(new QName("createPerson", "createPerson"));
- call.addParameter("firstName",
- org.apache.axis.Constants.XSD_STRING,
- javax.xml.rpc.ParameterMode.IN);
- call.addParameter("middleName",
- org.apache.axis.Constants.XSD_STRING,
- javax.xml.rpc.ParameterMode.IN);
- call.addParameter("lastName",
- org.apache.axis.Constants.XSD_STRING,
- javax.xml.rpc.ParameterMode.IN);
- call.addParameter("comments",
- org.apache.axis.Constants.XSD_STRING,
- javax.xml.rpc.ParameterMode.IN);
- call.setReturnType(org.apache.axis.Constants.XSD_STRING);
- Object responseWS = call.invoke(new Object[]{"admin", "ofbiz", "John", "A", "Tower", "WOWOWO"});
- System.out.println( "Receiving response: " + (String) responseWS);
- output = call.getOutputParams();
- getResponseParams(call.getMessageContext().getResponseMessage());
- } catch (MalformedURLException ex) {
- message = "error: wrong url";
- } catch (ServiceException ex) {
- message = "error: failed to create the call";
- } catch (RemoteException ex) {
- message = "error: failed to invoke WS";
- } finally {
- System.out.println("");
- System.out.println(message);
- }
- }
- }
编译运行这个代码,可以很顺利的调用成功。不要高兴的太早,注意到了吗?createPerson的service的auth属性,是false的,意思是说,调用createPerson这个类,是不需要通过ofbiz认证的,
但是我们看一下service.xml文件,很多的service是需要认证的,那么我们把createPerson的auth改成true,重启一下ofbiz,用浏览器访问wsdl文件,没有问题,再运行上面的程序,程序抛出RemoteException这个异常
通过看服务端的日志,的确是没有认证导致的。
怎么解决呢?很简单,我们把input参数增加两个
- call.addParameter("login.username",
- org.apache.axis.Constants.XSD_STRING,
- javax.xml.rpc.ParameterMode.IN);
- call.addParameter("login.password",
- org.apache.axis.Constants.XSD_STRING,
- javax.xml.rpc.ParameterMode.IN);
login.username和login.password这两个参数加到input里面,再编译一下上面的客户端程序,呵呵,成功了!
我们再测试一下,把createPerson的auth改回false,重启一下ofbiz,再运行一下上面的客户端程序,依然能成功。
那么我们基本上可以得出一个结论,只要把login.username和login.password加到输入参数里面,无论auth为true或者false,都能通吃。
分享到:
相关推荐
基于spring封装的ofbiz所有服务,使用spring security进行安全验证,可以方便的发布为微服务,同时实现了一套直接使用ofbiz实体引擎操作ofbiz所有数据库表的spring应用框架设计
Ofbiz的Web框架.
【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/...
OFBiz采用Service Engine、Entity Engine、Component Engine和Web App Framework等核心组件,提供了一个灵活且可扩展的平台。在OFBiz中,CmsBackEnd是指内容管理系统(Content Management System)的后台部分,它...
它的核心组件包括实体引擎(Entity Engine)、事务处理引擎(Transaction Engine)、服务引擎(Service Engine)、工作流引擎(WorkEffort Engine)以及事件驱动模型(Event Driven Model)。理解这些组件的功能和...
在《Ofbiz开发快速入门》中,你将了解到Ofbiz的核心概念,如实体模型(Entity)、服务(Service)和组件(Component)。实体模型是Ofbiz的基础,它定义了业务数据结构;服务则负责处理业务逻辑,是Ofbiz实现功能的...
3. **用户界面**:演示环境中,用户可以看到OfBiz的Web界面,这通常包含了一系列页面和工作流,展示了如何与系统交互,完成各种业务任务。 4. **API与服务**:OfBiz提供了丰富的API接口和服务,允许开发者进行定制...
3. **OFBiz架构理解**:OFBiz使用模型-视图-控制器(MVC)设计模式,包含实体(Entity)、服务(Service)、组件(Component)、控制器(Controller)和视图(View)等部分。理解这些概念对于开发至关重要。 4. **...
OFBiz的核心功能包括产品目录管理、订单处理、库存控制、供应链管理、财务管理、客户服务等模块,这些模块之间通过服务组件架构(Service Component Architecture, SCA)紧密集成,使得开发者可以方便地进行定制和...
* webtools:Ofbiz 的 Web 工具代码 使用 Eclipse 打开 Ofbiz 的 Ant 命令 我们可以使用 Eclipse 打开 Ofbiz 的 Ant 命令,以便编译和运行 Ofbiz。我们可以在 Eclipse 的“Window”菜单中选择“Show View” > ...
Ofbiz的Web请求流程通常涉及以下几个步骤:接收请求、解析请求、调用服务、更新模型、渲染视图并返回响应。这一过程确保了请求处理的高效性和灵活性。 总的来说,基于Ofbiz的Web框架提供了一种强大且全面的方式来...
服务层的设计采用服务组件架构(Service Component Architecture,SCA),服务通过接口定义,实现松耦合和高复用。服务可以调用实体引擎进行数据操作,确保了数据访问的统一性和一致性。 四、工作流(WorkFlow) ...
3. **核心组件**:解释Ofbiz中的Service Engine、Entity Engine、WorkEffort Engine等核心组件的功能和使用方法。 4. **业务实体管理**:描述如何使用Ofbiz的实体引擎来管理数据库中的业务对象,创建和修改实体模型...
Ofbiz的核心概念包括组件、服务、实体、工作流和事件。组件是Ofbiz中的基本组织单元,它们封装了特定的业务功能。比如,“产品”组件处理与产品相关的所有事务,而“订单”组件则负责订单管理。服务是Ofbiz中执行...