1.   用途简介

为什么要在Oracle中访问WebService?在系统实现中,有时会有直接在数据库端利用触发器、存储过程等方式进行数据传递、分发的业务,而其中可能会涉及一些业务逻辑,为了处理这些业务逻辑,并简单起见,可以直接在触发器或存储过程中调用一些java类或WebService。

2.   准备工作

1、首先保证Oracle为完全安装(本文均以10.2g);

2、下载对应版本的UTL_DBWS(一个工具包dbws-callout-utility-10131.zip),解压后放到oracle安装目录下的<oracle_install_dir>/sqlj/lib中;

3、在命令行中利用loadjava命令(一般安装完jdk或oracle之后就会有)将jar包导入oracle对应的用户中:

loadjava -u user/pwd@dbinstance -r -v -f -genmissing dbwsclientws.jar dbwsclientdb102.jar

若为SYS用户,命令为:

loadjava -u sys/change_on_install -r -v -f -genmissing -s -grant public dbwsclientws.jar dbwsclientdb102.jar

3.   步骤说明

前面准备工作做好之后,如果未发现UTL_DBWS(可以在plsql中敲入sys.若未有utl_dbws显示,则需要进行初始化),需要运行之前下载的包中dbws-callout-utility-10131\sqlj\lib\ utl_dbws_body.sql及utl_dbws_decl.sql,这样准备工作基本就绪,下面是调用的步骤:

1、 编写sql函数并发布。

create or replace function FUNC_GENERATE_LOGINNAME(xmlstring VARCHAR2)
return VARCHAR2
AS
      l_service utl_dbws.SERVICE;
      l_call utl_dbws.call;
      l_result ANYDATA;
      l_wsdl_url VARCHAR2(1024);
      l_service_name VARCHAR2(200);
      l_operation_name VARCHAR2(200);
      l_input_params UTL_DBWS.anydata_list;
BEGIN
      l_wsdl_url := 'http://192.168.21.85:9080/xgxt/services/wfWebService?wsdl';
      l_service_name := 'WorkflowWebServiceService';
      l_operation_name := 'saveFormData';
      l_service := UTL_DBWS.create_service(wsdl_document_location=>URIFACTORY.getURI(l_wsdl_url),service_name=>l_service_name);
      l_call := UTL_DBWS.create_call(service_handle=>l_service,port_name=>NULL,operation_name=>l_operation_name);
      l_input_params(1) := ANYDATA.ConvertVarchar2(xmlstring);
       l_result := UTL_DBWS.invoke(call_handle=>l_call,input_params=>l_input_params);
      UTL_DBWS.release_call (call_handle=>l_call);
      UTL_DBWS.release_service (service_handle=>l_service);
RETURN ANYDATA.AccessVarchar2(l_result);
EXCEPTION
WHEN OTHERS THEN
RETURN substr(sqlerrm,0,2000);
END FUNC_GENERATE_LOGINNAME;

2、 查看结果(select func_generate_loginname(var) from dual)

对于其中出现的异常,最可能的就是出现权限不足,可以利用如下语句解决:

begin
dbms_java.grant_permission( 'XGXT', 'SYS:java.lang.RuntimePermission', 'getClassLoader', '' );
dbms_java.grant_permission( 'XGXT','SYS:java.lang.IllegalAccessException','getClassLoader', '' );
dbms_java.grant_permission( 'XGXT', 'SYS:java.lang.RuntimePermission', 'accessClassInPackage.sun.util.calendar', '' );
dbms_java.grant_permission( 'XGXT', 'SYS:java.lang.RuntimePermission', 'setFactory', '' );
dbms_java.grant_permission( 'XGXT', 'SYS:java.util.PropertyPermission', 'HTTPClient.socket.idleTimeout', 'write' );
dbms_java.grant_permission( 'XGXT', 'SYS:java.net.SocketPermission', 'localhost', 'resolve' );
dbms_java.grant_permission( 'XGXT', 'SYS:java.net.SocketPermission', '192.168.21.203:80', 'connect,resolve' );
dbms_java.grant_permission( 'XGXT', 'SYS:java.lang.RuntimePermission', 'createClassLoader', '' );
end;

4.    附

1、以上还只是针对windows服务器,对于unix/linux,主要是一些环境变量需要配置,需要查文档解决。

2、有帮助的语句

SELECT owner, status, count(*) FROM DBA_OBJECTS
WHERE OBJECT_TYPE='JAVA CLASS'
GROUP BY owner, status;
select * from User_Objects t where t.object_type like '%JAVA_CLASS%' and object_name like '�wsProxy%';
SELECT   TEXT   FROM   ALL_SOURCE  
WHERE TYPE   =   'PACKAGE' and owner like '%XGXT%'

PLSQL调用webservice的更多相关文章

  1. 一个简单的webservice的demo(下)winform异步调用webservice

    绕了一大圈,又开始接触winform的项目来了,虽然很小吧.写一个winform的异步调用webservice的demo,还是简单的. 一个简单的Webservice的demo,简单模拟服务 一个简单 ...

  2. 调用webservice进行身份验证

    因为同事说在调用webservice的时候会弹出身份验证的窗口,直接调用会返回401,原因是站点部署的时候设置了身份验证(账号名称自己配置).因而在调用的时候需要加入身份验证的凭证. 至于如何获取身份 ...

  3. java接口调用——webservice就是一个RPC而已

    很多新手一听到接口就蒙逼,不知道接口是什么!其实接口就是RPC,通过远程访问别的程序提供的方法,然后获得该方法执行的接口,而不需要在本地执行该方法.就是本地方法调用的升级版而已,我明天会上一篇如何通过 ...

  4. Android调用WebService

    这两天给老师做地铁app的demo,与后台的交互要用WebService,还挺麻烦的.所以想写点,希望有用. Web Services(Web服务)是一个用于支持网络间不同机器互操作的软件系统,它是一 ...

  5. C# 调用webservice 几种办法(转载)

    原文地址: http://www.cnblogs.com/eagle1986/archive/2012/09/03/2669699.html //=========================== ...

  6. 【Java EE 学习 80 下】【调用WebService服务的四种方式】【WebService中的注解】

    不考虑第三方框架,如果只使用JDK提供的API,那么可以使用三种方式调用WebService服务:另外还可以使用Ajax调用WebService服务. 预备工作:开启WebService服务,使用jd ...

  7. C#winForm调用WebService的远程接口

    Web Service 的创建简单编码.发布和部署 上一篇详细概述了WebService的创建,编码,发布和部署,那么作为客户端的程序如何访问远程端的WebService 接下来看一下具体步骤:   ...

  8. 【学习篇:他山之石,把玉攻】jquery实现调用webservice

    1.webservice端 using System; using System.Collections.Generic; using System.Web; using System.Web.Ser ...

  9. C#调用WebService

    1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求, ...

随机推荐

  1. ASP.net程序在本地操作正确,新电脑不正确的处理经验

    一.可能是计算机操作系统位数不兼容的问题,如下处理后即可.

  2. iOS开发——短信验证码

    作为iOS开发者,大家都应该知道ShareSDK这个比较出名的第三方分享(带统计功能)开发工具包. 他的官网今年年初发布了短信验证码的SDK.本文介绍它的短信验证码SDK.(部分过程参考官网如何集成的 ...

  3. AutoLayout的一些注意事项

    要了解autolayout 首先要知道程序视图启动顺序: -(void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; ...

  4. ubuntu基本使用

    sudo nautilus xxx指定目录去打开 这个命令就是以root权限打开一个窗口,来管理文件

  5. 点击listview 的列头对其item进行自动排序

    若要自定义排序顺序,必须编写一个实现 IComparer 接口的类,并将 ListViewItemSorter 属性设置为该类的一个对象.当设置 ListViewItemSorter 属性值时,将自动 ...

  6. DIV+CSS 网页布局之:混合布局

    1.混合布局 在了解了一列.两列和三列布局之后,混合布局也就不难理解了,混合布局也可以叫综合型布局,那么混合布局就可以在一列布局的基础之上,分为两列布局,三列布局,网页布局的结构普遍都是三列布局,但是 ...

  7. 什么是php?以及mysqlnd与libmysqlclient

    今天想彻底搞清楚php与mysql的关系,于是在php官方网站(http://php.net/manual/en/mysqli.installation.php) 看了一下mysqli,mysql.感 ...

  8. Visual C++ 6.0常用快捷键

    一.常用编译相关的快捷键 1.编译(单个文件)  Ctrl+F7 2.连接 F7 3.运行  Ctrl+F5 二.常用调试相关的快捷键 1.GO(全速运行)  F5 2.Stop Debuging(停 ...

  9. IEnumerable,ICollection,IList,List区别

    做C#的同学们,都知道,一类只能有一个继承类,但可以实现多个接口.这句话就告诉我们:IEnumerable,ICollection,IList,List区别了 首先我看看 IEnumerable: / ...

  10. 用Cornerstone配置SVN

    iOS 用CornerStone配置SVN,HTTP及svn简单使用说明 分类: iOS / OC2014-11-11 11:19 3149人阅读 评论(0) 收藏 举报   目录(?)[+]   转 ...