有个项目需要用数据库调用webservice,找了很多都不行。按照上面的安装了包,也执行了数据库脚本。然后用下面这段代码调用,总是报错:
ORA-29532: Java 调用被未捕获的 Java 异常错误终止: serialization error: java.lang.IllegalArgumentException: getSerializer requires a Java type and/or an XML type
跟踪进去看调用的返回值变量l_service等都是负数。 网上都是这样代码,其他的也找不到了。现在很急,请各位大哥大姐帮忙啊。分我也没有了,但是只要帮我解决了我一定想办法给分。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.2.67:88/TaskList.asmx?wsdl';
l_service_name := 'TaskList';
l_operation_name := 'GetCurrentTask';
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(0) := 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;
ORA-29532: Java 调用被未捕获的 Java 异常错误终止: serialization error: java.lang.IllegalArgumentException: getSerializer requires a Java type and/or an XML type
跟踪进去看调用的返回值变量l_service等都是负数。 网上都是这样代码,其他的也找不到了。现在很急,请各位大哥大姐帮忙啊。分我也没有了,但是只要帮我解决了我一定想办法给分。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.2.67:88/TaskList.asmx?wsdl';
l_service_name := 'TaskList';
l_operation_name := 'GetCurrentTask';
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(0) := 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;
CREATE OR REPLACE FUNCTION
call_sayHello (usernameINVARCHAR2)
RETURN VARCHAR2
AS
l_serviceUTL_DBWS.service;
l_call UTL_DBWS.call;
l_result ANYDATA;l_wsdl_urlVARCHAR2(1024);
l_service_nameVARCHAR2(200);
l_operation_nameVARCHAR2(200);
l_input_paramsUTL_DBWS.anydata_list;
BEGIN
l_wsdl_url :=
'http://localhost:8888/hellows/helloService?WSDL';
l_service_name := 'helloService';
l_operation_name := 'sayHello';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(username);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 NULL;
END call_sayHello;