oracle 调用webservice疏失

oracle 调用webservice出错oracle 10g 调用 axis2,接口有发布成功。但oracle 调用有问题。第一次写oracle 调

oracle 调用webservice出错
oracle 10g 调用 axis2,接口有发布成功。但oracle 调用有问题。第一次写oracle 调用 webservice.


CREATE OR REPLACE FUNCTION call_sayHello(username IN VARCHAR2)
  RETURN VARCHAR2 AS
  l_service        SYS.UTL_DBWS.service;
  l_call           SYS.UTL_DBWS.call;
  l_result         ANYDATA;
  l_wsdl_url       VARCHAR2(1024);
  l_service_name   VARCHAR2(200);
  l_operation_name VARCHAR2(200);
  l_input_params   SYS.UTL_DBWS.anydata_list;
BEGIN
  l_wsdl_url := 'http://192.168.0.169:8081/ic/services/ICSMSService?wsdl';
  l_service_name := 'ICSMSService';
  l_operation_name := 'sendMsg';
  l_service := SYS.UTL_DBWS.create_service(wsdl_document_location => URIFACTORY.getURI(l_wsdl_url),
                                           service_name           => l_service_name);
  l_call := SYS.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 := 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);
  RETURN ANYDATA.AccessVarchar2(l_result);
EXCEPTION
  WHEN OTHERS THEN
    dbms_output.put_line(sqlerrm);
    RETURN NULL;
    return sqlerrm;
END call_sayHello;



报错

ORA-29532: Java 调用被未捕获的 Java 异常错误终止: serialization error: java.lang.IllegalArgumentException: getSerializer requires a Java type and/or an XML type

求实例或发现错误。
[解决办法]
已解决。根据Oracle 官方demo修改了一下。如下。

create or replace function FUNC_GENERATE_LOGINNAME(xmlstring VARCHAR2)
  return VARCHAR2 AS
  service_ sys.utl_dbws.SERVICE;
  call_ sys.utl_dbws.CALL;
  service_qname sys.utl_dbws.QNAME;
  port_qname sys.utl_dbws.QNAME;
  operation_qname sys.utl_dbws.QNAME;


  string_type_qname sys.utl_dbws.QNAME;
  retx ANYDATA;
  retx_string VARCHAR2(100);
  retx_len number;
  params sys.utl_dbws.ANYDATA_LIST;
begin
  service_qname := sys.utl_dbws.to_qname(null, 'ICSMSService');
  service_ := sys.utl_dbws.create_service(service_qname);
  port_qname := sys.utl_dbws.to_qname(null, 'ICSMSServicePortType');
  operation_qname := sys.utl_dbws.to_qname('http://webService.ic.jst.com', 'sendMsg');
  call_ := sys.utl_dbws.create_call(service_, port_qname, operation_qname);
  sys.utl_dbws.set_target_endpoint_address(call_, 'http://192.168.0.169:8081/ic/services/ICSMSService.ICSMSServiceHttpSoap11Endpoint');
--  sys.utl_dbws.set_property(call_, 'ENCODINGSTYLE_URI', 'http://schemas.xmlsoap.org/soap/encoding/');
  string_type_qname := sys.utl_dbws.to_qname('http://www.w3.org/2001/XMLSchema', 'string');
        sys.utl_dbws.add_parameter(call_, 'String_1', string_type_qname, 'ParameterMode.IN');
        sys.utl_dbws.set_return_type(call_, string_type_qname);
  params(0) := ANYDATA.convertvarchar(xmlstring);
  retx := sys.utl_dbws.invoke(call_, params);
  retx_string := retx.accessvarchar2;
  dbms_output.put_line('PL/SQL DII client return ' 
[解决办法]
 retx_string);
  RETURN ANYDATA.AccessVarchar2(retx);
EXCEPTION
  WHEN OTHERS THEN
    RETURN substr(sqlerrm, 0, 2000);
END FUNC_GENERATE_LOGINNAME;


[解决办法]
接口调用成功,报文如下。


<MSG><HEAD><RET_CODE>F</RET_CODE><RET_MSG>xml文件格式不正确</RET_MSG></HEAD><BODY></BODY></MSG>