EBS中发布WEBSERVICE接口的方法
- 格式:docx
- 大小:708.20 KB
- 文档页数:10
泛微OA工作流WebService接口使用说明工作流W e b S e r v i c e接口使用说明一、检查部署是否成功:输入下面的地址(换成实际的地址):8060(实际的端口号)/services/,界面中有如下服务即可:采用Web Serverice技术进行协同系统和业务系统进行数据交互,由协同系统方开发实现Web Serverice服务,业务系统方需在本地实现Web Serverice本地代理来进行调用。
协同系统方需提供的服务接口如下:1、流程创建接口2、流程流转控制接口提供流程提交,退回和转发控制接口3、需业务系统处理的任务列表根据用户id和流程id获取该人员需要业务系统处理的任务列表,如果需要获取表单的数据在通过reqestid调用获取表单数据接口4、获取表单数据接口根据协同系统中流程主键requestid获取表单中所有数据5、已归档任务列表根据创建人id和流程id获取已经归档的任务列表接口对象说明:1)WorkflowRequestInfo 工作流请求信息/*** 请求ID*/private String requestId;* 请求标题*/private String requestName;/*** 请求重要级别*/private String requestLevel;/*** 短信提醒*/private String messageType;/*** 流程类型*/private WorkflowBaseInfo workflowBaseInfo; /** * 当前节点名称*/private String currentNodeName;/*** 当前节点Id*/private String currentNodeId;/*** 流程状态*/private String status;/*** 创建者*/private String creatorId;/*** 创建时间*/private String createTime;/*** 最后操作者名称*/private String lastOperatorName;/*** 最后操作时间*/private String lastOperateTime;/*** 是否可查看private boolean canView;/*** 是否可编辑*/private boolean canEdit;/*** 签字意见是否必填*/private boolean mustInputRemark;/*** 主表信息*/private WorkflowMainTableInfo workflowMainTableInfo;/*** 明细表信息*/private WorkflowDetailTableInfo[] workflowDetailTableInfos; /*** 流转日志信息*/private WorkflowRequestLog[] workflowRequestLogs; /*** HTML显示模板* 0 iPad* 1 iPhone*/private String[] WorkflowHtmlTemplete;/*** 解析后的HTML显示内容* 0 iPad* 1 iPhone*/private String[] WorkflowHtmlShow;/*** 被代理人*/private String beagentid;/*** 流程短语*/private String[][] workflowPhrases;2)WorkflowBaseInfo 工作流信息/*** 工作流ID*/private String workflowId;/*** 工作流标题*/private String workflowName;/*** 工作流类型ID*/private String workflowTypeId;/*** 工作流类型名称*/private String workflowTypeName;根据实际的webservice客户端实现的客户端代码均不相同.以下仅供参考.1)创建流程/***创建流程,支持多明细,并且带附件字段--目前只支持一个附件,并且是(http格式的) * @throws Exception*/public static void createRequest() throws Exception {//主字段WorkflowRequestT ableField[] wrti = newWorkflowRequestT ableField[4]; //字段信息wrti[0] = new WorkflowRequestTableField();wrti[0].setFieldName("mutiresource");//被留言人wrti[0].setFieldValue("111");//被留言人字段的值,111为被留言人idwrti[0].setView(true);//字段是否可见wrti[0].setEdit(true);//字段是否可编辑wrti[1] = new WorkflowRequestTableField();wrti[1].setFieldName("remark");//留言内容wrti[1].setFieldValue("test");wrti[1].setView(true);wrti[1].setEdit(true);wrti[2] = new WorkflowRequestTableField();wrti[2].setFieldName("resource_n");//留言人wrti[2].setFieldValue("111");wrti[2].setView(true);wrti[2].setEdit(true);wrti[3] = new WorkflowRequestTableField();wrti[3].setFieldName("fj2");//附件wrti[3].setFieldType("http:baidu_sylogo1.gif");//http:开头代表该字段为附件字段wrti[3].setFieldValue();//附件地址wrti[3].setView(true);wrti[3].setEdit(true);WorkflowRequestT ableRecord[] wrtri = newWorkflowRequestT ableRecord[1];//主字段只有一行数据wrtri[0] = new WorkflowRequestTableRecord();wrtri[0].setWorkflowRequestTableFields(wrti);WorkflowMainTableInfo wmi = new WorkflowMainTableInfo();wmi.setRequestRecords(wrtri);//明细字段WorkflowDetailTableInfo wdti[] = newWorkflowDetailTableInfo[2];//两个明细表0明细表1,1明细表2 //明细表1 startwrtri = new WorkflowRequestTableRecord[2];//数据行数,假设添加2行明细数据//第一行wrti = new WorkflowRequestTableField[3]; //每行3个字段wrti[0] = new WorkflowRequestTableField();wrti[0].setFieldName("sl");//数量wrti[0].setFieldValue("11");wrti[0].setView(true);wrti[0].setEdit(true);wrti[1] = new WorkflowRequestTableField();wrti[1].setFieldName("dj");//单价wrti[1].setFieldValue("2");wrti[1].setView(true);wrti[1].setEdit(true);wrti[2] = new WorkflowRequestTableField();wrti[2].setFieldName("xj");//小记wrti[2].setFieldValue("22");wrti[2].setView(true);wrti[2].setEdit(true);wrtri[0] = new WorkflowRequestTableRecord();wrtri[0].setWorkflowRequestTableFields(wrti);//第二行wrti = new WorkflowRequestTableField[3]; //每行3个字段wrti[0] = new WorkflowRequestTableField();wrti[0].setFieldName("sl");//数量wrti[0].setFieldValue("110");wrti[0].setView(true);wrti[0].setEdit(true);wrti[1] = new WorkflowRequestTableField();wrti[1].setFieldName("dj");//单价wrti[1].setFieldValue("2");wrti[1].setView(true);wrti[1].setEdit(true);wrti[2] = new WorkflowRequestTableField();wrti[2].setFieldName("xj");//小记wrti[2].setFieldValue("220");wrti[2].setView(true);wrti[2].setEdit(true);wrtri[1] = new WorkflowRequestTableRecord();wrtri[1].setWorkflowRequestTableFields(wrti);wdti[0] = new WorkflowDetailTableInfo();wdti[0].setWorkflowRequestTableRecords(wrtri);//加入明细表1的数据//明细表1 end//明细表2 startwrtri = new WorkflowRequestTableRecord[1];//数据行数,假设添加1行明细数据//第一行wrti = new WorkflowRequestTableField[3]; //每行3个字段wrti[0] = new WorkflowRequestTableField();wrti[0].setFieldName("cl3");//wrti[0].setFieldValue("11");wrti[0].setView(true);wrti[0].setEdit(true);wrti[1] = new WorkflowRequestTableField();wrti[1].setFieldName("cl1111");//wrti[1].setFieldValue("2");wrti[1].setView(true);wrti[1].setEdit(true);wrtri[0] = new WorkflowRequestTableRecord();wrtri[0].setWorkflowRequestTableFields(wrti);wdti[1] = new WorkflowDetailTableInfo();wdti[1].setWorkflowRequestTableRecords(wrtri);//加入明细表2的数据//明细表2 endWorkflowBaseInfo wbi = new WorkflowBaseInfo();wbi.setWorkflowId("5");//workflowid 5 代表内部留言WorkflowRequestInfo wri = new WorkflowRequestInfo();//流程基本信息wri.setCreatorId("111");//创建人idwri.setRequestLevel("2");//0 正常,1重要,2紧急wri.setRequestName("留言测试接口");//流程标题wri.setWorkflowMainTableInfo(wmi);//添加主字段数据wri.setWorkflowBaseInfo(wbi);wri.setWorkflowDetailTableInfos(wdti);//执行创建流程接口WorkflowServicePortTypeProxy WorkflowServicePortTypeProxy = new WorkflowServicePortTypeProxy();String requestid =WorkflowServicePortTypeProxy.doCreateWorkflowRequest( wri, 111);System.out.println("requestid:"+requestid);}2)获取代办列表数量/*** 获得代办事宜数量* @throws RemoteException*/public static void getDaiBanShuLiang() throws RemoteException{ WorkflowServicePortTypeProxy WorkflowServicePortTypeProxy = new WorkflowServicePortTypeProxy();int count =WorkflowServicePortTypeProxy.getT oDoWorkflowRequestCount(111, null);System.out.println("代办事宜数量:"+count);//获取待办事宜接口//带查询条件查询,只能写关于这2个表的查询条件workflow_requestbaset1,workflow_currentoperator t2//查询条件里面不需要写andString conditions[] = new String[2];conditions[0] = " t1.currentnodetype = 2 ";//状态为审批conditions[1] = " t1.creater = 111 ";//创建人为111count =WorkflowServicePortTypeProxy.getT oDoWorkflowRequestC ount(111, conditions);System.out.println("代办事宜数量:"+count);//获取待办事宜接口}。
Webservice接口请求方法一、概述Webservice是一种基于网络的应用程序接口(API),它能够通过网络来创建和提供服务。
在日常开发中,我们经常需要与其他系统进行交互,并获取相应的数据或服务。
Webservice接口请求方法就是用来实现这一目的的。
二、Webservice接口请求的方式1. HTTP GET请求:当我们需要从Webservice接口获取数据时,可以使用HTTP GET请求。
通过在URL中附加相应的参数,可以向服务端发送请求,并获取相应的数据。
GET请求的参数会以键值对的形式出现在URL中,例如:xxx。
2. HTTP POST请求:如果需要向Webservice接口提交数据,可以使用HTTP POST请求。
通过向服务端发送POST请求,我们可以将数据放入请求的body中,并提交给服务端进行处理。
3. SOAP请求:SOAP(Simple Object Access Protocol)是一种基于XML的通信协议,通过SOAP请求可以实现不同评台之间的通信。
这种方式一般需要事先定义好XML格式的请求数据,并通过HTTP传输到服务端。
4. RESTful请求:RESTful(Representational State Transfer)是一种基于HTTP协议的设计风格,通过RESTful请求可以实现对资源的增删改查操作。
在RESTful请求中,通常使用HTTP的不同方法(如GET、POST、PUT、DELETE)来实现相应的操作。
三、Webservice接口请求的参数1. 请求URL:Webservice接口的请求位置区域,即服务端提供的接口位置区域。
2. 请求方法:即使用的HTTP方法,可以是GET、POST、PUT或DELETE等。
3. 请求头部:一些额外的请求头部信息,如Content-Type、Authorization等。
4. 请求参数:需要传递给服务端的参数,可以是键值对、JSON格式或XML格式的数据。
Web服务(WebService)是通过网络进行通信和交换数据的技术,它使得不同应用程序之间可以进行数据交换和交互。
在实际应用中,一个Web服务可能需要同时处理多个接口的请求。
接下来,我们将深入探讨webservice多接口发布案例,从实际案例出发,逐步分析这一主题。
1. 什么是WebService多接口发布?WebService多接口发布指的是一个Web服务同时提供多个接口供不同的客户端进行调用。
这种情况通常发生在一个复杂的系统中,该系统需要处理多个不同类型的请求,并向不同的客户端提供不同的服务。
2. 实际案例分析举例来说,假设有一个在线支付系统,该系统需要处理用户注册、用户登录、账户充值、支付下单等多个功能。
这些功能分别对应着不同的接口,例如register、login、recharge、placeOrder等。
在这种情况下,系统就需要通过WebService多接口发布的方式来同时提供这些功能。
3. 案例应用分析通过WebService多接口发布,系统可以更加灵活地满足不同客户端的需求。
移动端客户端可能只需要调用登录和下单接口,而后台管理系统可能需要调用充值和注册接口。
WebService多接口发布可以让系统在满足不同客户端需求的确保接口之间的独立性和可扩展性。
4. 总结与回顾在本文中,我们深入探讨了webservice多接口发布案例,并分析了其实际应用和优势。
通过不断提及主题文字,我们全面地理解了这一主题。
在实际应用中,我们可以根据具体需求,利用WebService多接口发布的方式来构建灵活、高效的系统。
5. 个人观点个人而言,在实际开发中,我更加倾向于使用WebService多接口发布的方式来构建系统。
这种方式可以使得系统更加灵活、易于扩展,并且能够满足不同客户端的需求,是一种值得推荐的技术实践。
通过本文的探讨,我们对webservice多接口发布案例有了深入的理解,并且明白了其在实际应用中的价值和意义。
webservice接口实现方式WebService接口实现方式Web服务(WebService)是一种基于Web的应用程序接口,允许不同应用程序通过网络相互通信。
WebService接口实现方式有多种,本文将介绍其中的几种常见方式。
1. SOAP(Simple Object Access Protocol)SOAP是一种基于XML的通信协议,用于在Web服务之间进行信息交换。
它使用HTTP作为传输协议,并使用XML格式对数据进行编码。
实现一个SOAP接口需要定义Web服务的方法、参数和返回值,并使用SOAP协议进行通信。
SOAP接口实现方式比较复杂,但具有较好的互操作性。
2. REST(Representational State Transfer)REST是一种轻量级的架构风格,用于设计分布式系统。
它使用HTTP作为传输协议,并使用URL来表示资源,通过HTTP方法(如GET、POST、PUT、DELETE)对资源进行操作。
实现一个REST接口只需要定义资源的URL和对应的HTTP方法即可,非常简单和灵活。
3. JSON-RPC(JSON Remote Procedure Call)JSON-RPC是一种基于JSON(JavaScript Object Notation)的远程过程调用协议。
它使用HTTP作为传输协议,并使用JSON格式对数据进行编码。
实现一个JSON-RPC接口需要定义Web服务的方法、参数和返回值,并使用HTTP POST请求进行调用。
JSON-RPC接口实现方式简单快捷,适用于前后端分离的应用。
4. XML-RPC(XML Remote Procedure Call)XML-RPC是一种基于XML的远程过程调用协议。
它使用HTTP作为传输协议,并使用XML格式对数据进行编码。
实现一个XML-RPC接口需要定义Web服务的方法、参数和返回值,并使用HTTP POST请求进行调用。
webservice接口调用方法Web服务(Web service)是指一个网络服务,通过互联网进行通信的应用程序接口(API),使用标准的HTTP协议进行数据传输和交互。
它使用SOAP(Simple Object Access Protocol)来封装数据,以XML格式进行传递,可以在多种平台上进行调用,独立于编程语言和操作系统。
调用Web服务的方法如下:1.确定服务地址和方法:首先要确定要调用的Web服务的地址和要调用的方法。
通常,服务地址是一个URL(Uniform Resource Locator),可以在文档中找到。
2.创建SOAP请求:根据要调用的方法创建一个SOAP请求。
SOAP 请求是一个XML文档,根据服务的定义,包含要调用的方法名和方法参数。
可以使用各种编程语言和工具来创建SOAP请求,如Java的JAX-WS、Python的suds等。
3.发送请求:将创建的SOAP请求发送给Web服务。
可以使用HTTP POST或其他协议将请求发送给服务的URL。
请求与服务之间的通信是通过HTTP协议完成的。
4.解析响应:接收到Web服务的响应后,需要解析响应的内容。
响应是一个XML文档,包含服务返回的数据。
同样,可以使用各种编程语言和工具来解析XML响应,提取所需的数据。
5.处理响应:根据需要处理响应的数据。
可以将数据保存到数据库中,显示在用户界面上,或者进行其他操作。
6.处理错误:如果在调用Web服务时发生错误,需要处理错误。
可能会遇到网络连接问题、服务不可用、权限问题等。
根据错误类型,可以采取不同的处理方式,如重试请求、记录错误信息等。
7.错误处理:同样重要的是处理错误。
如果在调用Web服务时发生错误,需要处理错误。
可能会遇到网络连接问题、服务不可用、权限问题等。
根据错误类型,可以采取不同的处理方式,如重试请求、记录错误信息等。
8.安全性:在调用Web服务时,需要确保数据的安全性。
可以使用加密和数字签名等技术来保护传输的数据。
webservice接口实例WebService接口实例是一种在不同的操作系统和编程语言之间进行通信的技术,它通过利用XML(可扩展标记语言)来实现跨平台的数据交换。
不同的Web应用程序可以通过SOAP(简单对象访问协议)协议来在网络中发送和接收消息。
下面,我们将通过以下步骤来介绍如何使用WebService接口。
第一步:创建Web服务首先,我们需要在.NET环境中创建一个Web服务应用程序。
使用Visual Studio中的文件菜单选项,在应用程序中添加一个新的Web服务。
我们可以通过添加Web服务引用来使用Web服务。
在Visual Studio中选中“添加引用”,选择“Web引用”,并输入WebService的URL链接。
此时,您将可以通过“命名空间”引用Web服务。
第二步:添加Web服务引用在Visual Studio中,通过添加Web服务引用来使用Web服务。
选中“添加引用”,选择“Web引用”,并输入WebService的URL链接。
此时,您将可以通过“命名空间”引用Web服务。
第三步:实现Web服务方法在Web服务应用程序中,我们必须实现Web服务方法,该方法将处理请求并返回数据。
在方法中,必须定义相关的参数,包括:请求参数、响应参数及返回值。
为了调用Web服务方法,必须发送一条请求并等待Web服务响应。
第四步:测试Web服务在Visual Studio中,可以通过单元测试工具来测试Web服务是否正常运行。
您可以创建一个单元测试项目,以测试Web服务是否返回与预期的结果相同的结果。
第五步:使用WebService接口通过添加Web服务引用,并调用Web服务方法,可以在应用程序中使用WebService接口。
通过使用相关的命名空间,Web服务中的方法可以在应用程序中 freely地调用。
综上所述,在使用WebService接口时,我们需要创建一个Web 服务应用程序,添加Web服务引用,实现Web服务方法,测试Web服务并最终在应用程序中使用WebService接口。
说明:该文档以电子路演系统与ECM的WebService集成为例创建服务端一、搭建测试环境1 新建web工程OARSInterface,引入jar包将“E:\zhaodongmei\ECM\OARSandECM\IntegrationInterfaceCode\测试代码\WebService\WebJarFiles”目录下的jar包引入。
引入的具体jar包如下:activation.jar;apache_soap-2_3_1.jar;axis.jar;axis-ant.jar;CEOperterMonitor.jar;CEService_IIOP.jar;commons-collections-3.2.jar;commons-discovery-0.2.jar;commons-fileupload-1.2.1.jar;commons-io-1.3.2.jar;commons-logging-1.0.4.jar;dom4j-1.6.1.jar;dom4j-1.6.1.jar;jaxen-1.1.1.jar;jaxrpc.jar;log4j-1.2.8.jar;mail.jar;saaj.jar;wsdl4j-1.5.1.jar。
其中可选包(发布服务及生成客户端程序是要用到的):activation.jar;mail.jar。
2 配置web.xml文件参照E:\zhaodongmei\ECM\OARSandECM\IntegrationInterfaceCode\测试代码\WebService\客户端测试项目\OARSTest\WebRoot\WEB-INF\ web.xml进行配置,不需要进行修改二、接口开发在开发之前,我们先介绍与接口实现相关的两个jar包:CEOperterMonitor.jar和CEService_IIOP.jar。
CEOperterMonitor.jar:实现的是对接口操作的监控。
开放式虚拟仿真实验教学系统Web Services业务接口规范说明书1.范围本规范文档主要适用于开放式虚拟仿真实验教学系统和其它业务系统信息数据的接入。
2.术语、定义和缩略语2.1术语、定义2.2缩略语3.接口设计3.1接口公共参数接口服务器通过:http://IP:port/EIP/WebService/ 连接服务器,同时对外提供业务功能接口,接收的参数和返回的参数都用一定的xml格式进行封装。
3.1.1请求参数1.请求类型为String类型<?xml version="1.0" encoding="utf-8" ?><request><header type ="xx01" version="1.0" reqtype="0" userid="user000000000001"></header><param></param></request>2.头部参数体head定义请求参数的头部参数体header格式固定,定义如下:3.请求参数体param定义参数体param中的具体请求参数,根据不同的业务而不同,详见各业务接口。
3.1.2返回参数1.返回类型为String类型<?xml version="1.0" encoding="utf-8"?><response><header type ="XX01" value="XX00" info="成功"></header><result></result></response>2.头部参数体head定义返回参数的头部参数体header格式固定,定义如下:3.返回值参数体result定义参数体result中的具体返回参数,根据不同的业务而不同。
在Oracle EBS二次开发中,PL/SQL程序是开发人员使用频率最高的开发语言,同时也是大家最容易掌握的工具之一了,而我们也很希望将自己编写的PL/SQL 程序发布为Web服务来提供给客户端程序使用,同时也可以实现和外围系统的集成,有了irep_parser这个工具,我们就可以将自己编写的PL/SQL 程序发布到Oracle Integration Repositoy中。
Oracle Integration Repositoy中集成接口的来源都是Oracle,客户化的程序发布上去的为Custom:下面描述如何将PL/SQL程序接口发布到Oracle Integration Repositoy中作为集成接口供第三方程序集成调用一、给EBS系统打补丁参考如下安装文档:安装文档.docx二、添加客户化应用到Product Family客户化应用设置好之后,它没有归属于任何的产品家族,如我的客户化应用CUX,因此发布在客户化应用下的集成接口在Oracle Integration Repositoy中无法方便的查看,如下图:如果客户化集成接口是组织到自己的应用下就需要先注册一个产品家族,下面将CUX Developer(CUX) 应用注册到CUX Developer(cux_pf)这个产品家族下作为例子进行演示:1,添加产品家族 CUX Developer(cux_pf)--添加产品家族begin-- Call the proceduread_pa_insert_package.insert_ad_pm_product_info(x_product_abbreviation => 'cux_pf',x_pseudo_product_flag => 'N',x_product_family_flag => 'Y',x_application_short_name => NULL,x_product_name => 'CUX Developer',x_product_family_abbreviation => NULL,x_product_family_name => NULL,x_aru_update_date => to_char(SYSDATE,'YYYY-MM-DD HH24:MI:SS'), x_currdate => to_char(SYSDATE,'YYYY-MM-DD HH24:MI:SS'),x_last_updated_by => -1,x_created_by => -1);COMMIT;end;2,注册CUX Developer(CUX)应用到产品家族中--注册CUX应用到产品家族中begin-- Call the proceduread_pa_insert_package.insert_ad_pm_product_info(x_product_abbreviation => 'cux',x_pseudo_product_flag => 'N',x_product_family_flag => 'N',x_application_short_name => 'CUX',x_product_name => 'CUX Developer',x_product_family_abbreviation => NULL,x_product_family_name => NULL,x_aru_update_date => to_char(SYSDATE,'YYYY-MM-DD HH24:MI:SS'),x_currdate => to_char(SYSDATE,'YYYY-MM-DDHH24:MI:SS'),x_last_updated_by => -1,x_created_by => -1);COMMIT;end;3,关联CUX Developer应用到产品家族CUX Developer下--关联CUX应用到产品家族CUX Developer下begin-- Call the proceduread_pa_insert_package.insert_ad_pm_prod_family_map(x_product_abbreviat ion => 'cux',x_product_family_abbreviation => 'cux_pf',x_aru_update_date => to_char(SYSDATE,'YYYY-MM-DD HH24:MI:SS'),x_currdate => to_char(SYSDATE,'YYYY-MM-DDHH24:MI:SS'),x_last_updated_by => -1,x_created_by => -1);COMMIT;end;执行完成后通过下面2条SQL验证是否添加成功,查出3条数据表示添加成功。
在eclipse 中创建webservice项目方法一:使用xfire支持1.创建Dynamic Web Project 项目:2.将编译路径改为项目/web-INF/classes;3.将META-INF 文件夹移动到src下面,并在META-INF 中创建xfire文件夹,文件夹内放入services.xml文件;4.添加xfire支持的jar包:5.编写web.xml:7.编写services.xml可以存在多个service;8.访问http://localhost:port/projectName/services/url-pattern?wsdl(蓝色字体均为相应的内容);方法二:使用Axis2支持1.1Axis2发行包Axis2以多个发行包发行。
你需要哪个视你所需决定。
1.1.1标准二进制发行包如果你正在开发服务和应用程序,你需要Axis2标准二进制发行包。
这个发行包包括所有必要的*.jar文件,以及很多便于开发用的脚本。
它具有以下结构。
Axis2标准二进制发行包目录的结构binaxis2.bataxis2.shaxis2server.bataxis2server.shjava2wsdl.batjava2wsdl.shwsdl2java.batwsdl2java.shsetenv.shlibactivation-1.1.jar...XmlSchema.jarrepositorymodulesmodules.listaddressing-1.1.mar...servicesservices.listversion.aar...samples...webapp...confaxis2.xmlLICENSE.txtREADME.txtNOTICE.txtINSTALL.txtrelease-notes.htmlbin目录包括一些有用的脚本。
它们包括axis2.bat(或者axis2.sh),这个文件可以让你在不手工添加Axis2 jar文件到类路径的情况下方便的执行Java命令;java2wsdl.bat(和.sh)和wsdl2java.bat(和.sh),它可以让你轻易的从一个WSDL文件生成Java代码,反之亦然;axis2server.bat(和sh),一个简易Web服务器,它可以让你早自己的应用程序中搭建Axis2的功能来发送接收消息。
WebService 的创建,部署和使用WebService,即Web服务,能使得运行在不同机器上的不同应用无须借助,专门的第三方软件或硬件,就可相互交换数据或集成.第一次选择WebService,是为了替代数据库远程连接.我们都知道当SQL允许远程时,则要打开某一端口.但这一点在我们已经部署好的服务器上,却是不被允许的,于是就选择WebService来代替了.当然现在我们也可以选择WCF来完成.不过这不是我们今天的主题.WebService返回的数据为XML,这是我们都很熟悉的一种数据方式,大大方便了我们的工作当然,WebService给我们带来的好处远不止这些.我不想讲得更多.相信当你能够熟练运用WebService后,你会发现这是一把锋利的宝刃.对于初次接触WebServcie的人来说,长篇理论,不如一个实例来得更实际些,我们更看重的是到底如何能够创建一个WebService并且将其部署,和使用.下面我将逐步的完成一个加减乘除功能的WebServic.开发环境:VS2012IIS环境:WINSERVER2008R2 IIS7.5第一步:打开VS2012,新建空项目,注意选择.NET Framework的版本.这里我选择的是.NET Framework 4新建好项目后,在项目中添加一个WebService项打开这个文件,我们可以看到,代码如下[csharp]view plaincopyprint?ing System;ing System.Collections.Generic;ing System.Linq;ing System.Web;ing System.Web.Services;6.space CalculateService8.{9. /// <summary>10. /// WebService1 的摘要说明11. /// </summary>12.13.14. [WebService(Namespace = "/")]15. [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]16. [ponentModel.ToolboxItem(false)]17. // 若要允许使用 AJAX 从脚本中调用此 Web 服务,请取消注释以下行。
webservice接口实现方式WebService是一种跨平台的通信技术,可以通过网络进行数据交互。
在软件开发中,WebService接口的实现方式有多种选择,本文将介绍几种常见的实现方式。
一、SOAP协议SOAP(Simple Object Access Protocol)是一种基于XML的通信协议,可以在不同的操作系统和编程语言之间进行通信。
在WebService中,SOAP协议通常用于实现接口。
通过SOAP协议,可以将数据封装成XML格式,然后在网络上进行传输。
接收方可以解析XML数据,获取其中的信息。
二、RESTful风格RESTful(Representational State Transfer)是一种基于HTTP协议的软件架构风格,常用于构建Web服务。
在RESTful风格中,每个资源都有唯一的URI(Uniform Resource Identifier),通过HTTP方法(GET、POST、PUT、DELETE)对资源进行操作。
通过RESTful风格,可以实现简洁、灵活的接口。
三、JSON-RPCJSON-RPC(JavaScript Object Notation Remote Procedure Call)是一种基于JSON格式的远程过程调用协议。
它通过HTTP 协议传输数据,并使用JSON格式进行序列化和反序列化。
JSON-RPC可以轻松实现跨平台的接口调用,支持多种编程语言。
四、XML-RPCXML-RPC是一种基于XML格式的远程过程调用协议。
它通过HTTP协议进行数据传输,使用XML格式进行数据编码和解码。
XML-RPC可以实现跨平台的接口调用,支持多种编程语言。
五、JAX-WSJAX-WS(Java API for XML Web Services)是Java EE平台中用于构建Web服务的标准API。
通过JAX-WS,可以使用Java语言轻松地创建和发布Web服务。
WebService 四种发布方式总结Author:yczhang1.CXF方式CXF与spring搭建webservice是目前最流行的方式,但是传闻cxf与jdk1.5有些不兼容,我没有遇到过,我遇到的问题是cxf与was6.1.1不兼容,表现在cxf必须的jar包“wsdl4j-1.6.2.jar”报错,报的错为:ng.IncompatibleClassChangeError,明显的jar包不兼容问题,很是头痛,后来查找资料找到解决办法是,将上述jar包新建一个was共享库,可以解决,但是客户周经理不想用此种方式,因为需要修改was,于是改用了axis2方式,下文会介绍。
该问题在此处做个记录,以后使用cxf与was的时候需要注意!!!使用cxf+spring搭建WebService:第一步,添加jar包。
此处需要注意,不同环境(tomcat、was)jar也不一定相同,例如我本地cxf+spring只需要如下jar包:而泰康的was环境则需要如下jar包:明显的多了很多,原因应该是服务器jar包池的不同。
根据错误提示缺什么补什么就可以了,注意jar包勿重复。
第二步,配置web.xml文件,如下(重要的地方已标记):<context-param><param-name>contextConfigLocation</param-name><param-value>classpath:/applicationContext.xml</param-value> </context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener </listener-class></listener><!-- Character Encoding filter --><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFil ter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><servlet><servlet-name>CXFServlet</servlet-name><servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-c lass><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>CXFServlet</servlet-name><url-pattern>/webservice/*</url-pattern></servlet-mapping>上述标记的地方,第一处是spring配置文件路径;第二出是wsdl地址内容;第三步,编写接口类与实现类,注意注解接口类@WebServicepublic interface SendService {public boolean sendOA(@WebParam(name="param")String param);public boolean sendOrg(OrgEntity org);}实现类@WebService(endpointInterface="com.service.SendService",serviceName=" sendService")public class SendServiceImpl implements SendService{public boolean sendOA(String param) {System.out.println("-------sendOA---------param:"+param);if(param.equals("zhoujian")){return true;}return false;}public boolean sendOrg(OrgEntity org) {System.out.println("-------sendOrg--begin-------");return true;}}第四步,Spring配置文件“jaxws:client”该标签可以不必写,访问时可以手动拼接该url 第五步,发布,直接部署到服务器,访问:2.Xfire方式据说xfire方式已经很老了,但个人感觉,xfire方式很简单且容易配置,不知为啥过时了,也没感觉cxf、axis2哪里先进,我当时卡在cxf与was搞不定时想尝试xfire方式被周经理给拒绝了。
在Oracle EBS二次开发中,PL/SQL程序是开发人员使用频率最高的开发语言,同时也是大家最容易掌握的工具之一了,而我们也很希望将自己编写的PL/SQL 程序发布为Web服务来提供给客户端程序使用,同时也可以实现和外围系统的集成,有了irep_parser这个工具,我们就可以将自己编写的PL/SQL 程序发布到Oracle Integration Repositoy中。
Oracle Integration Repositoy中集成接口的来源都是Oracle,客户化的程序发布上去的为Custom:下面描述如何将PL/SQL程序接口发布到Oracle Integration Repositoy中作为集成接口供第三方程序集成调用一、给EBS系统打补丁参考如下安装文档:安装文档.docx二、添加客户化应用到Product Family客户化应用设置好之后,它没有归属于任何的产品家族,如我的客户化应用CUX,因此发布在客户化应用下的集成接口在Oracle Integration Repositoy中无法方便的查看,如下图:如果客户化集成接口是组织到自己的应用下就需要先注册一个产品家族,下面将CUX Developer(CUX) 应用注册到CUX Developer(cux_pf)这个产品家族下作为例子进行演示:1,添加产品家族 CUX Developer(cux_pf)--添加产品家族begin-- Call the proceduread_pa_insert_package.insert_ad_pm_product_info(x_product_abbreviation => 'cux_pf',x_pseudo_product_flag => 'N',x_product_family_flag => 'Y',x_application_short_name => NULL,x_product_name => 'CUX Developer',x_product_family_abbreviation => NULL,x_product_family_name => NULL,x_aru_update_date => to_char(SYSDATE,'YYYY-MM-DD HH24:MI:SS'), x_currdate => to_char(SYSDATE,'YYYY-MM-DD HH24:MI:SS'),x_last_updated_by => -1,x_created_by => -1);COMMIT;end;2,注册CUX Developer(CUX)应用到产品家族中--注册CUX应用到产品家族中begin-- Call the proceduread_pa_insert_package.insert_ad_pm_product_info(x_product_abbreviation => 'cux',x_pseudo_product_flag => 'N',x_product_family_flag => 'N',x_application_short_name => 'CUX',x_product_name => 'CUX Developer',x_product_family_abbreviation => NULL,x_product_family_name => NULL,x_aru_update_date => to_char(SYSDATE,'YYYY-MM-DD HH24:MI:SS'),x_currdate => to_char(SYSDATE,'YYYY-MM-DDHH24:MI:SS'),x_last_updated_by => -1,x_created_by => -1);COMMIT;end;3,关联CUX Developer应用到产品家族CUX Developer下--关联CUX应用到产品家族CUX Developer下begin-- Call the proceduread_pa_insert_package.insert_ad_pm_prod_family_map(x_product_abbreviat ion => 'cux',x_product_family_abbreviation => 'cux_pf',x_aru_update_date => to_char(SYSDATE,'YYYY-MM-DD HH24:MI:SS'),x_currdate => to_char(SYSDATE,'YYYY-MM-DDHH24:MI:SS'),x_last_updated_by => -1,x_created_by => -1);COMMIT;end;执行完成后通过下面2条SQL验证是否添加成功,查出3条数据表示添加成功。
SELECT * FROM ad_pm_product_info x WHERE x.product_name LIKE 'CUX%'; SELECT * FROM ad_pm_prod_family_map m WHERE m.product_abbreviation LIKE 'cux%';完成后如果应用下有集成接口可以看到如下的产品家族信息:三、按照集成接口标记规范编写PL/SQL程序按照业务逻辑的要求编写PL/SQL程序,除了需要在PL/SQL程序的声明中按照集成接口标记的要求添加标记注释之外,其它和一般的程序没有任何区别,如下是一个用来实现查询PMP中WBS计划的程序:CREATE OR REPLACE PACKAGE CUX_PMP_PKG6 AS/* $Header: $ *//*#* This package using PMP application cux developer* @rep:scope public* @rep:product cux* @rep:lifecycle active* @rep:displayname cux pmp application6* @rep:compatibility S* @rep:category BUSINESS_ENTITY CUX_DEVELOPER*/TYPE t_cursor IS REF CURSOR;/*#* query_wbs_plans* @param plans_list out plans list* @param result_code out result flag* @param p_user_name login user name* @param p_project_name project name* @rep:scope public* @rep:lifecycle active* @rep:displayname query_wbs_plans*/PROCEDURE query_wbs_plans(plans_list OUT t_cursor,result_code OUT VARCHAR2,p_user_name IN VARCHAR2,p_project_name IN VARCHAR2);END CUX_PMP_PKG6;关键几个标记描述:@rep:product CUX 代表集成接口注册到CUX应用中,必须是系统中存在的应用简称@rep:displayname cux pmp application6 集成接口的名称@param存储过程和方法的参数,都需要标注出来供调用服务的客户端查看@rep:category BUSINESS_ENTITY CUX_DEVELOPER 业务实体的类型,CUX_DEVELOPER必须在BUSINESS_ENTITY 值列表类型下定义存在,否则无法通过验证四、验证集成接口标记并生成iLDT文件将编写好的PLSQL声明定义保存为.pls文件(CUX_PMP_PKG6.pls),并将其上传到服务器的$FND_TOP/bin目录下,通过Telnet使用命令来验证和生成集成接口标记文件,成功验证后会有如下的日志生成,同时会生成iLDT文件oracleseeker_emp_pkg_pls.ildt ,如果标记存在问题会打印出对应的错误信息,需要注意查看错误消息并进行修正。
命令如下:$IAS_ORACLE_HOME/perl/bin/perl $FND_TOP/bin/irep_parser.pl -g -v -username=sysadminar:patch/115/sql:CUX_PMP_PKG6.pls:12.0=CUX_PMP_PKG6.pls五、将iLDT文件上传到Oracle Integration Repositoy中将上面生成的iLDT文件通过FNDLOAD命令工具上传到Oracle Integration Repositoy中,命令如下:FNDLOAD apps/apps 0Y UPLOAD $FND_TOP/patch/115/import/wfirep.lct CUX_PMP_PKG6_pls.ildt成功上传之后通过Oracle Integration Repositoy可以查看如下的集成接口信息六、发布WEB SERVICE接口按照如下截图,首先产生WDSL文件,然后部署,最后创建授权.注意:创建授权时如果给新加的用户授权,需要给用户添加”集成SOA网关”和”应用开发员职责”,如果加完职责还不能调用接口,需要清理缓存或者重启环境.六、使用SOAPUI工具测试1.新建一个PROJECT.2.输入PROJECT NAME后点击OK3.选择新增的project,点击右键,增加WSDL地址4.查看接口的WSDL地址,然后把地址复制过来5.添加成功后,工具给每个接口生成一个测试方法.6.参考如下例子,输入相应的参数即可测试.<wsse:Username>为EBS中用户名,需要是接口中授权的用户<wsse:Password>为上面输入用户对应的密码.。