Oracle版本:12c
OS:Linux
使用账号:ITAMHR,普通用户权限,已让DBA授予了UTL_DBWS EXECUTE的权限
存储过程如下:
create or replace procedure getITAssetData is
l_service SYS.UTL_DBWS.service;
l_call SYS.UTL_DBWS.call;
l_result ANYDATA;
l_wsdl_url VARCHAR2(100);
l_namespace VARCHAR2(100);
ESB_PWD VARCHAR2(50);
ESB_SERVICE_ID VARCHAR2(50);
ESB_SID VARCHAR2(25);
ESB_SN VARCHAR2(250);
ESB_USER VARCHAR2(25);
l_service_qname SYS.UTL_DBWS.qname;
l_operation_qname SYS.UTL_DBWS.qname;
rsCursor SYS_REFCURSOR;
l_name VARCHAR2(256);
l_input_params SYS.UTL_DBWS.ANYDATA_LIST;
begin
----对应wsdl地址
l_wsdl_url := 'http://10.10.162.36/esbservice.wsdl';
l_namespace := 'http://w3.ibm.com/gbs/ais/ei/esb';
---参数1
ESB_PWD :='DD4B';
dbms_output.put_line('1');
---参数2
ESB_SERVICE_ID :='00000000000100';
---参数3
ESB_SID :='0000';
---参数4
ESB_SN :='000020150602142247139621';
---参数5
ESB_USER :='0000'; dbms_output.put_line('2');
l_service_qname := SYS.UTL_DBWS.to_qname(l_namespace, 'EsbService');
dbms_output.put_line('3');
l_operation_qname := SYS.UTL_DBWS.to_qname(l_namespace, 'invoke');
dbms_output.put_line('4');
l_service := SYS.UTL_DBWS.create_service (wsdl_document_location => URIFACTORY.getURI(l_wsdl_url),service_name => l_service_qname);
dbms_output.put_line('5');
l_call := SYS.UTL_DBWS.create_call (service_handle => l_service,port_name => null, operation_name => l_operation_qname);
dbms_output.put_line('6');
l_input_params(1) :=ANYDATA.ConvertVarchar2 (ESB_PWD);
dbms_output.put_line('7');
l_input_params(2) :=ANYDATA.ConvertVarchar2(ESB_SERVICE_ID);
l_input_params(3) :=ANYDATA.ConvertVarchar2(ESB_SID);
l_input_params(4) :=ANYDATA.ConvertVarchar2(ESB_SN);
l_input_params(5) :=ANYDATA.ConvertVarchar2(ESB_USER);
--返回值
l_result := SYS.UTL_DBWS.invoke(call_Handle => l_call,input_Params => l_input_params);
SYS.UTL_DBWS.release_call (call_handle => l_call);
SYS.UTL_DBWS.release_service (service_handle => l_service);
dbms_output.put_line(ANYDATA.AccessVarchar2(l_result));
----调用XML解析函数 OPEN rsCursor for select idAttributeOfDocElements(ANYDATA.AccessVarchar2(l_result)) from dual;
LOOP
fetch rsCursor into l_name;exit when rsCursor%NOTFOUND;
dbms_output.put_line(l_name);
end LOOP;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(SQLERRM);
END getITAssetData;
输出语句:
1
2
3
4
ORA-29532: Java 调用被未捕获的 Java 异常错误终止: java.lang.IllegalAccessException: java.lang.NoClassDefFoundError
我已经按照官网的要求,将dbwsclientdb11.jar和dbwsclientws.jar放入sqlj/lib下了,并且运行了loadjava命令。
但是执行存储过程的时候系统报“ORA-29532: Java 调用被未捕获的 Java 异常错误终止: java.lang.IllegalAccessException: java.lang.NoClassDefFoundError”
这个错到底是什么引起的?授权和JAR包都已经到位了啊,怎么还会说NoClassFound?
请大神指点,还有哪没有配置正确的?或者哪里可以查看具体是哪个class有问题?十分感谢!
OS:Linux
使用账号:ITAMHR,普通用户权限,已让DBA授予了UTL_DBWS EXECUTE的权限
存储过程如下:
create or replace procedure getITAssetData is
l_service SYS.UTL_DBWS.service;
l_call SYS.UTL_DBWS.call;
l_result ANYDATA;
l_wsdl_url VARCHAR2(100);
l_namespace VARCHAR2(100);
ESB_PWD VARCHAR2(50);
ESB_SERVICE_ID VARCHAR2(50);
ESB_SID VARCHAR2(25);
ESB_SN VARCHAR2(250);
ESB_USER VARCHAR2(25);
l_service_qname SYS.UTL_DBWS.qname;
l_operation_qname SYS.UTL_DBWS.qname;
rsCursor SYS_REFCURSOR;
l_name VARCHAR2(256);
l_input_params SYS.UTL_DBWS.ANYDATA_LIST;
begin
----对应wsdl地址
l_wsdl_url := 'http://10.10.162.36/esbservice.wsdl';
l_namespace := 'http://w3.ibm.com/gbs/ais/ei/esb';
---参数1
ESB_PWD :='DD4B';
dbms_output.put_line('1');
---参数2
ESB_SERVICE_ID :='00000000000100';
---参数3
ESB_SID :='0000';
---参数4
ESB_SN :='000020150602142247139621';
---参数5
ESB_USER :='0000'; dbms_output.put_line('2');
l_service_qname := SYS.UTL_DBWS.to_qname(l_namespace, 'EsbService');
dbms_output.put_line('3');
l_operation_qname := SYS.UTL_DBWS.to_qname(l_namespace, 'invoke');
dbms_output.put_line('4');
l_service := SYS.UTL_DBWS.create_service (wsdl_document_location => URIFACTORY.getURI(l_wsdl_url),service_name => l_service_qname);
dbms_output.put_line('5');
l_call := SYS.UTL_DBWS.create_call (service_handle => l_service,port_name => null, operation_name => l_operation_qname);
dbms_output.put_line('6');
l_input_params(1) :=ANYDATA.ConvertVarchar2 (ESB_PWD);
dbms_output.put_line('7');
l_input_params(2) :=ANYDATA.ConvertVarchar2(ESB_SERVICE_ID);
l_input_params(3) :=ANYDATA.ConvertVarchar2(ESB_SID);
l_input_params(4) :=ANYDATA.ConvertVarchar2(ESB_SN);
l_input_params(5) :=ANYDATA.ConvertVarchar2(ESB_USER);
--返回值
l_result := SYS.UTL_DBWS.invoke(call_Handle => l_call,input_Params => l_input_params);
SYS.UTL_DBWS.release_call (call_handle => l_call);
SYS.UTL_DBWS.release_service (service_handle => l_service);
dbms_output.put_line(ANYDATA.AccessVarchar2(l_result));
----调用XML解析函数 OPEN rsCursor for select idAttributeOfDocElements(ANYDATA.AccessVarchar2(l_result)) from dual;
LOOP
fetch rsCursor into l_name;exit when rsCursor%NOTFOUND;
dbms_output.put_line(l_name);
end LOOP;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(SQLERRM);
END getITAssetData;
输出语句:
1
2
3
4
ORA-29532: Java 调用被未捕获的 Java 异常错误终止: java.lang.IllegalAccessException: java.lang.NoClassDefFoundError
我已经按照官网的要求,将dbwsclientdb11.jar和dbwsclientws.jar放入sqlj/lib下了,并且运行了loadjava命令。
但是执行存储过程的时候系统报“ORA-29532: Java 调用被未捕获的 Java 异常错误终止: java.lang.IllegalAccessException: java.lang.NoClassDefFoundError”
这个错到底是什么引起的?授权和JAR包都已经到位了啊,怎么还会说NoClassFound?
请大神指点,还有哪没有配置正确的?或者哪里可以查看具体是哪个class有问题?十分感谢!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货