1. 概述
最近在ESB项目中,客户在各个系统之间的服务调用大多都是在oracle存储过程中进行的,本文就oracle存储过程调用web service来进行说明。其他主流数据库,比如mysql和sql service,调用web service的方法这里就不做介绍了,本文主要用来介绍oracle存储过程调用Web Service的方法。
众所周知,在Web Service通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP协议是基于HTTP协议的,两者的关系就好比高速公路是基于普通公路改造的,在一条公路上加上隔离栏后就成了高速公路。
同理,在oracle的存储过程中能不能也通过创建XML格式的报文+HTTP协议来调用Web Service呢?答案是肯定的,在ORACLE中有一个名叫UTL_HTTP的工具包,我们可以通过这个工具包来实现存储过程调用Web Service。
上文提到的AEAI ESB是数通畅联的核心产品之一,可以实现WEB服务开发和WEB服务注册等功能,本文的接口样例,本考虑使用ESB创建的WEB服务,但是由于涉及到的需要介绍的内容和本文主题太远,所以采用了AEAI DP开发平台自带的Web服务样例来说明。有对AEAI ESB感兴趣的读者可以通过本文最后的相关链接查找了解。
2. 预期读者
- 数通畅联新员工
- 广大技术爱好者
3. 环境信息
操作系统:Windows7
Oracle: 版本为oracle11g
Mysql:版本为mysql5.1
Jdk: jdk1.6.0_10
4. 名词解释
AEAI ESB:应用集成平台主要作为企业信息系统的“龙骨”来集成各业务系统,一般称之为企业服务总线(Enterprise Service BUS,ESB),在数通畅联软件的产品家族中应用集成平台命名为AEAI ESB。
AEAI DP:AEAI DP应用开发平台专门用于开发MIS类的Java Web应用,也称Miscdp(Misc Develope Platform)综合应用开发平台。 AEAI DP应用开发平台在数通畅联软件产品家族中也作为扩展开发的支撑工具,比如:为AEAI Portal门户平台扩展开发Portlet组件、Web Service和Http Service;为AEAI BPM流程集成平台扩展开发业务流程表单及功能等。
存储过程:大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
UTL_HTTP:oracle中自带的HTTP协议工具包,可以用来发送post请求。
PL/SQL Developer:一个集成开发环境,由Allround Automations公司开发,专门面向Oracle数据库存储的程序单元的开发
5. 操作步骤
5.1 创建样例接口
使用AEAI DP开发平台,创建自带WS服务的应用,如下图:
选择数据库信息
部署应用后,查看刚刚创建的应用自带的WS服务
5.2 创建存储过程
5.2.1 基本语法
以下为创建存储过程的基本语法
CREATE OR REPLACE PROCEDURE存储过程名 ( --定义参数 ) IS 定义变量 BEGIN 开始PL/SQL体 END 说明PL/SQL体结束 |
5.2.2 创建步骤
1、打开PL/SQL,并打开一个sql窗口
2、将创建存储过程的语句放入其中并执行
这样一个调用web service的存储过程样例就创建了,以下为详细的样例sql体
--创建存储过程,定义四个参数,入参:userid,code,name;出参:resmark CREATE OR REPLACE PROCEDURE pro_test_ws(name in varchar2,resmark out varchar2) IS --定义四个变量,http请求,http返回,请求报文,返回报文 http_req UTL_HTTP.REQ; http_Resp UTL_HTTP.RESP; request_env VARCHAR2(32767); l_Replyline VARCHAR2(1000); BEGIN --开始pl/sql体 request_env := ' <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:demo="http://demo.service.wstest.agileai.com/"> <soapenv:Header/> <soapenv:Body> <demo:sayHi> <!--Optional:--> <theGirlName>'|| name ||'</theGirlName> </demo:sayHi> </soapenv:Body> </soapenv:Envelope> '; --打印请求报文 dbms_output.put_line(request_env); --请求WS地址 http_req := UTL_HTTP. begin_request('http://localhost:6060/cam/services/UserSync?wsdl', 'POST', UTL_HTTP.http_version_1_1); -- 保持连接状态 Utl_Http.Set_Persistent_Conn_Support(http_req, TRUE); --设置编码 Utl_Http.Set_Header(http_req, 'Content-Type', 'text/xml;charset=utf-8');
Utl_Http.Set_Header(http_req, 'SOAPAction', ''); --设置字符集 Utl_Http.Set_Body_Charset(http_req, 'utf-8'); --该参数代表我发送的POST报文多长,不可少 Utl_Http.Set_Header(http_req, 'Content-Length', Lengthb(request_env)); Utl_Http.Write_Line(http_req, request_env); --赋值http返回 http_Resp := Utl_Http.Get_Response(http_req); --将请求报文赋值给 l_Replyline Utl_Http.Read_Text(http_Resp, l_Replyline); dbms_output.put_line(l_Replyline); --付给存储过程出参 resmark:=l_Replyline; END pro_test_ws; |
5.2.3 关键点说明
在存储过程中,使用UTL_HTTP工具包调用web服务时,几个关键方法的使用说明
1. 通过设置请求地址、方式、协议版本,得到http请求对象
http_req := UTL_HTTP. begin_request(' http://localhost:6060/wstest_project/services/HelloWorld?wsdl ', 'POST', UTL_HTTP.http_version_1_1); |
2. 设置协议保持连接状态
Utl_Http.Set_Persistent_Conn_Support(http_req, TRUE); |
3. 设置请求编码,SOAPAction header的值为空串("")表示SOAP消息的目的地由HTTP请求的URI标识;无值则表示没有指定这条消息的目的地。
Utl_Http.Set_Header(http_req, 'Content-Type', 'text/xml;charset=utf-8'); Utl_Http.Set_Header(http_req, 'SOAPAction', ''); |
4. 设置字符集
Utl_Http.Set_Body_Charset(http_req, 'utf-8'); |
5. 报文长度
Utl_Http.Set_Header(http_req, 'Content-Length', Lengthb(request_env)); |
6. 调用服务,发送报文
Utl_Http.Write_Line(http_req, request_env); |
7. 得到返回体
http_Resp := Utl_Http.Get_Response(http_req); |
8. 将返回报文赋值给变量
Utl_Http.Read_Text(http_Resp, l_Replyline); |
5.3 调用存储过程
5.3.1 使用PL/SQL Developer测试
1) 选中存储过程的名字,右键选择测试,进入测试页面
2) 添加响应的参数值,F9或者点击按钮开始执行,执行后可以得到看到返回值
3) 切换到DBMS输出页面,可以看到打印的内容
5.3.2 使用sql代码调用
DECLARE resmark varchar2(1000); BEGIN pro_test_ws(''小郑',resmark); DBMS_OUTPUT.PUT_LINE(resmark); END; |
1) 打开sql窗口,执行上面的sql语句
2) 查看输出信息
1处为存储过程打印的信息,2为调用时打印输出的信息
6. 总结说明
本文介绍了在oracle存储过程中,使用UTL_HTTP工具包,通过创建请求报文以及使用HTTP协议来调用Web Service,从创建oracle存储过程以及UTL_HTTP相关参数的配置,到通过PL/SQL Developer测试调用以及sql代码进行调用来详细说明。
附件为存储过程创建sql、调用sql以及接口程序和相关的数据库文件。
7. 相关链接
AEAI DP开发平台/ AEAI ESB集成平台相关介质以及文档资料地址:http://www.agileai.com/portal/website/01/res-share.ptml
文档及代码附件下载:http://pan.baidu.com/s/1kVyMVQn
相关推荐
本文将深入探讨如何在Spring Boot项目中整合MyBatis,实现调用Oracle存储过程并处理游标返回的数据。 首先,我们需要在Spring Boot项目中引入相关的依赖。在`pom.xml`文件中添加Oracle JDBC驱动(ojdbc66-oracle...
该包包含了一系列的过程和函数,用于创建服务、创建调用、设置参数等操作。 - **创建服务**:使用`create_service`函数创建一个服务对象。 - **创建调用**:使用`create_call`函数创建一个调用对象。 - **设置目标...
3. **配置Oracle数据库连接**:在Oracle中,你可以使用PL/SQL或Java存储过程来调用Web Service。确保数据库已启用Java支持,并配置好相应的JDBC驱动和网络连接。 4. **编写PL/SQL调用Web Service**:如果你选择PL/...
2. **创建PL/SQL过程**:接下来,你需要在PL/SQL中创建一个过程或函数来调用Web Service。这通常涉及以下步骤: - 初始化UTL_HTTP环境,设置HTTP请求的URL。 - 如果Web Service需要身份验证,设置用户名和密码。 ...
本实例将探讨如何使用C#通过VS2010访问Oracle存储过程。 首先,你需要在VS2010中创建一个新的C#项目,选择相应的.NET Framework版本,如4.0。然后,确保你的系统已经安装了Oracle客户端或者ODP.NET(Oracle Data ...
在Oracle SOA环境中,Web应用的发布是一个关键步骤,确保了服务能够正确地在SOA基础设施上运行并被其他系统调用。以下是对Oracle SOA Web应用发布过程的详细说明: 1. **登录到Oracle企业管理器(Oracle Enterprise...
在设计开发Web Service调用的过程中,还应该考虑安全性问题,确保传输的数据安全可靠,并且遵循相关的安全标准和最佳实践。比如,可以通过加密技术保护数据传输的安全性,还可以使用数字证书对服务提供者进行身份...
3. 调用Web Service:在存储过程中,使用特定的函数或者编程语言(如T-SQL中的OPENROWSET或OPENXML,Oracle的UTL_HTTP等)来发起HTTP请求,获取Web Service的响应。 4. 处理响应:解析Web Service返回的XML数据,并...
- 这个文件可能是一个存储过程,用于演示或测试PL/SQL调用Web Service的逻辑。通过分析其源代码,我们可以学习如何在实际项目中应用这些概念。 7. **过程.JPG, wsdl.jpg, 结果.JPG** - 这些图片可能是演示过程的...
我们可以使用 MYEclipse 创建一个新的 Web Service 项目,并选择 JAX-WS 框架生成 webservice。 在创建完毕后,我们可以看到生成的 webservice 类,如下图所示。 现在,我们可以使用这些类来访问 ODI 的 ...
1. **发现 Web Service**:找到公开的 Web Service 接口,通常这些接口会提供 WSDL(Web Service Description Language)文档来描述服务的功能和调用方式。 2. **配置 Web Service 客户端**:根据 WSDL 创建本地代理...
2. **客户端代码**:客户端代码使用C#的`System.Web.Services`命名空间来调用服务端的Web Service方法。可能有一个`BrowseImages`方法用于从服务端获取图片列表,并显示给用户;还有一个`DownloadImage`方法,用于...
项目可能使用常见的关系型数据库如MySQL、SQL Server或Oracle,也可能采用NoSQL数据库如MongoDB,用于支持Web Service的查询和数据操作功能。数据库设计应遵循规范化原则,确保数据的一致性和效率。同时,为了保证...
- **RESTful Web Service**:基于 REST 架构风格的服务,通常使用 HTTP 协议来操作资源。 #### 四、WebService 开发工具 - Axis 1.4 - **下载**:获取 Axis 1.4 的相关组件。 - **配置**:设置开发环境,包括 JDK ...
3. **存储过程和函数**:Oracle提供了存储过程和函数,它们是预编译的SQL和PL/SQL代码块,可以提高性能并简化复杂操作。在JAVA WEB项目中,可以通过CallableStatement调用这些数据库对象。 4. **游标和批处理**:...
5. **业务逻辑**:在Service层编写业务方法,调用Mapper接口执行SQL。 6. **视图渲染**:Controller处理完请求后,将数据传递给视图,渲染并返回给客户端。 这个项目提供的案例对于初学者来说是一份宝贵的资源,...
MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。在"mybatis自动生成实例支持oracle和MySQL"的场景中,我们可以理解为该压缩包包含...
这个项目利用了`webserver`作为服务端的处理核心,结合`Oracle`数据库来存储和管理天气数据。这样的组合可以提供稳定、高效的数据服务。接下来,我们将深入探讨这两个关键组件以及它们在实现天气信息接口中的作用。 ...
在这些方法中,使用之前创建的数据访问层与Oracle进行交互,执行SQL查询或存储过程。 4. **配置服务**: 在服务的配置文件(app.config或web.config)中,定义服务行为、绑定和终结点,以允许客户端发现和调用服务。...