我使用的是UTL_DBWS包去调用webservice。现在我测试可以通过调用,但是发现服务器端获取不到值我贴下我的代码:
create or replace procedure pro_trig_test
is
service_ utl_dbws.SERVICE;
call_ utl_dbws.CALL;
service_qname utl_dbws.QNAME;
port_qname utl_dbws.QNAME;
operation_qname utl_dbws.QNAME;
string_type_qname utl_dbws.QNAME;
boolean_type_qname utl_dbws.QNAME;
long_type_qname utl_dbws.QNAME;
retx ANYDATA;
retx_string VARCHAR2(1000);
retx_double NUMBER;
retx_len NUMBER;
params utl_dbws.ANYDATA_LIST;
l_input_params utl_dbws.ANYDATA_LIST;
l_result ANYDATA;
l_namespace VARCHAR2(1000);
begin
--targetNamespace
l_namespace := 'http://services.zenith.com';
--service name
service_qname := utl_dbws.to_qname(l_namespace, 'testservice');
--wsdl url
service_ := utl_dbws.create_service(
wsdl_Document_Location => URIFACTORY.getURI('http://localhost:8080/testservices/services/testservice?wsdl'),
service_Name => service_qname
);
operation_qname := utl_dbws.to_QName(l_namespace,'saveObject');
--
call_ := utl_dbws.create_call(service_, null, operation_qname);
string_type_qname := UTL_DBWS.to_qname('http://www.w3.org/2001/XMLSchema', 'string');
boolean_type_qname := UTL_DBWS.to_qname('http://www.w3.org/2001/XMLSchema', 'boolean');
long_type_qname := SYS.UTL_DBWS.to_qname('http://www.w3.org/2001/XMLSchema', 'long');
UTL_DBWS.add_parameter(call_, 'args0', string_type_qname, 'ParameterMode.IN');
UTL_DBWS.add_parameter(call_, 'args1', string_type_qname, 'ParameterMode.IN');
UTL_DBWS.add_parameter(call_, 'args2', long_type_qname, 'ParameterMode.IN');
UTL_DBWS.add_parameter(call_, 'args3', string_type_qname, 'ParameterMode.IN');
UTL_DBWS.add_parameter(call_, 'args4', long_type_qname, 'ParameterMode.IN');
UTL_DBWS.add_parameter(call_, 'args5', string_type_qname, 'ParameterMode.IN');
UTL_DBWS.add_parameter(call_, 'args6', string_type_qname, 'ParameterMode.IN');
UTL_DBWS.add_parameter(call_, 'args7', string_type_qname, 'ParameterMode.IN');
UTL_DBWS.add_parameter(call_, 'args8', string_type_qname, 'ParameterMode.IN');
UTL_DBWS.add_parameter(call_, 'args9', string_type_qname, 'ParameterMode.IN');
UTL_DBWS.add_parameter(call_, 'args10', string_type_qname, 'ParameterMode.IN');
UTL_DBWS.SET_PROPERTY(call_, 'SOAPACTION_USE', 'TRUE');
UTL_DBWS.SET_PROPERTY(call_, 'SOAPACTION_URI', '');
UTL_DBWS.SET_PROPERTY(call_, 'ENCODINGSTYLE_URI', '');
UTL_DBWS.SET_PROPERTY(call_, 'OPERATION_STYLE', 'rpc');
l_input_params(0) := ANYDATA.ConvertVarchar2('ceshi0');
l_input_params(1) := ANYDATA.ConvertVarchar2('ceshi0');
l_input_params(2) := ANYDATA.ConvertVarchar2(1234);
l_input_params(3) := ANYDATA.ConvertVarchar2('ceshi0');
l_input_params(4) := ANYDATA.ConvertVarchar2(2345);
l_input_params(5) := ANYDATA.ConvertVarchar2('aa5');
l_input_params(6) := ANYDATA.ConvertVarchar2('aa6');
l_input_params(7) := ANYDATA.ConvertVarchar2('aa7');
l_input_params(8) := ANYDATA.ConvertVarchar2('aa8');
l_input_params(9) := ANYDATA.ConvertVarchar2('aa9');
l_input_params(10) := ANYDATA.ConvertVarchar2('aa10');
utl_dbws.set_return_type(call_, boolean_type_qname);
retx := utl_dbws.invoke(call_, l_input_params);
retx_string := ANYDATA.AccessNVarchar2(retx);
dbms_output.put_line(retx_string);
UTL_DBWS.release_call (call_);
UTL_DBWS.release_service(service_);
end ;
***********************************************************************************************************************************************
调用方法:SQL>exec pro_trig_test;
调用结果:
begin pro_trig_test; end;
ORA-30625: 不允许以 NULL SELF 参数调度方法
ORA-06512: 在 "SCOTT.PRO_TRIG_TEST", line 78
ORA-06512: 在 line 1
服务器端未获取到值
******************************************
是不是要哪儿设置安全策略还是说我调用方法有问题啊?
求大神围观啊~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我猜测是不是需要什么安全策略设置才能访问?