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有问题?十分感谢!