Oracle调用WebService接口示例
"Oracle 调用WebService接口的示例代码" 在Oracle数据库中,有时候我们需要集成外部系统的服务,例如通过调用Web Service接口来实现数据交互或业务逻辑。本示例展示了如何在PL/SQL中调用一个WebService接口。Oracle提供了一套名为UTL_DBWS的实用程序包,它允许我们在Oracle存储过程或函数中直接调用Web Service。 首先,了解几个关键的变量和函数: 1. `SERVICE_QNAME` 和 `PORT_QNAME`: 这两个变量代表了Web Service的服务名和服务端口类型。它们是UTL_DBWS包中的QNAME类型,用于定义服务和端口的命名空间。 2. `OPERATION_QNAME`: 表示要调用的具体操作或方法,这里是一个QNAME类型,包含操作的命名空间和名称。 3. `STRING_TYPE_QNAME`: 定义了参数的数据类型,这里是XML字符串类型。 4. `CALL`: 创建的调用对象,通过`CREATE_CALL`函数生成,用于设置调用的属性和执行实际的调用操作。 5. `RETX` 和 `RETX_STRING`: 用于存储返回结果的变量,`RETX`是ANYDATA类型,可以存储各种类型的数据,`RETX_STRING`用于存储字符串类型的返回值。 6. `PARAMS`: 用于存储调用参数的列表,ANYDATA_LIST类型。 以下是示例代码的主要步骤: 1. 定义服务名和服务端口的QNAME,如`service_qname`和`port_qname`,并创建服务对象。 2. 定义操作的QNAME,如`operation_qname`,表示要调用的Web Service的具体方法。 3. 使用`CREATE_CALL`创建调用对象,并设置目标端点地址,即Web Service的实际URL。 4. 可以选择性地设置其他属性,如编码样式,这里注释掉了`SET_PROPERTY`。 5. 定义参数类型QNAME,如`string_type_qname`,这将对应Web Service接口中的参数类型。 6. 在`BEGIN`块中,实际调用Web Service的方法是通过`CALL`对象进行的,参数可以通过`PARAMS`列表添加。 7. 执行调用后,通过`RETX`接收返回的ANYDATA对象,然后根据需要将其转换为具体类型(如`RETX_STRING`)。 这个示例中的函数`FUNC_GENERATE_LOGINNAME`接收一个XML字符串作为输入参数,调用Web Service的`sendMsg`操作,并返回一个VARCHAR2类型的值。具体的调用方式和返回值处理取决于实际的Web Service接口定义。 请注意,这只是一个基础示例,实际应用中可能需要处理更多细节,比如错误处理、异常捕获、参数验证、证书配置等。此外,如果Web Service接口需要身份验证,还需要设置相关的安全凭据,例如用户名和密码。在部署到生产环境之前,请确保对所有敏感信息进行适当的管理和保护。
return VARCHAR2 AS
service_ sys.utl_dbws.SERVICE;
call_ sys.utl_dbws.CALL;
service_qname sys.utl_dbws.QNAME;
port_qname sys.utl_dbws.QNAME;
operation_qname sys.utl_dbws.QNAME;
string_type_qname sys.utl_dbws.QNAME;
retx ANYDATA;
retx_string VARCHAR2(100);
retx_len number;
params sys.utl_dbws.ANYDATA_LIST;
begin
service_qname := sys.utl_dbws.to_qname(null, 'ICSMSService');
service_ := sys.utl_dbws.create_service(service_qname);
port_qname := sys.utl_dbws.to_qname(null, 'ICSMSServicePortType');
operation_qname := sys.utl_dbws.to_qname('http://webService.ic.jst.com', 'sendMsg');
call_ := sys.utl_dbws.create_call(service_, port_qname, operation_qname);
sys.utl_dbws.set_target_endpoint_address(call_, 'http://192.168.0.169:8081/ic/services/ICSMSService.ICSMSServiceHttpSoap11Endpoint');
-- sys.utl_dbws.set_property(call_, 'ENCODINGSTYLE_URI', 'http://schemas.xmlsoap.org/soap/encoding/');
string_type_qname := sys.utl_dbws.to_qname('http://www.w3.org/2001/XMLSchema', 'string');
sys.utl_dbws.add_parameter(call_, 'String_1', string_type_qname, 'ParameterMode.IN');
sys.utl_dbws.set_return_type(call_, string_type_qname);
params(0) := ANYDATA.convertvarchar(xmlstring);
retx_string := retx.accessvarchar2;
dbms_output.put_line('PL/SQL DII client return '
------解决方案--------------------
retx_string);
RETURN ANYDATA.AccessVarchar2(retx);
EXCEPTION
WHEN OTHERS THEN
RETURN substr(sqlerrm, 0, 2000);
END FUNC_GENERATE_LOGINNAME;
----------------------------------------------------------------------------------------------------------
在oracle中直接调用web services怎么操作,在网上查了很久,相关资料,比较少。
在这里整理一下,给需要的童鞋们做参考。。
Window下oracle开发web services
1, 去oracle官网上下载dbws-callout-utility-10131.zip
地址:http://www.oracle-base.com/articles/10g/utl_dbws10g.php
2, 解压后放到oracle安装目录下的<oracle_install_dir>/sqlj/lib中;
3, 在命令行中利用loadjava命令(一般安装完jdk或oracle之后就会有)将jar包导入oracle对应的用户中:
loadjava -u user/password@oracle -r -v -f -genmissing -s -grant public dbwsclientws.jar dbwsclientdb102.jar若为SYS用户,命令为:
loadjava -u user/password -r -v -f -genmissing -s -grant public dbwsclientws.jar dbwsclientdb102.jar
4, 如果未发现UTL_DBWS(可以在plsql中敲入sys.若未有utl_dbws显示,则需要进行初始化),需要运行之前下载的包中dbws-callout-utility-10131/sqlj/lib/ utl_dbws_body.sql及utl_dbws_decl.sql
剩余5页未读,继续阅读
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦