13193887977 2015-03-18 04:52 采纳率: 0%
浏览 3596
已结题

关于oracle调用webservice的问题

在oracle的包里面调用delphi开发的一个webservice,第一次调用可以成功,然后就报错ORA-29532: Java 调用被未捕获的 Java 异常错误终止: HTTP transport error: javax.xml.soap.SOAPException: java.security.PrivilegedActionException: oracle.j2ee.ws.saaj.ContentTypeException: Not a valid SOAP Content-Type: text/html
必须要断开oracle然后重新连接才可以,但是其他的开发工具调用确正常。
同样的写法,调用java开发的webservice就没有问题。

  • 写回答

1条回答 默认 最新

  • 13193887977 2015-03-18 04:55
    关注

    代码是这样的:
    create or replace FUNCTION add_func1 (str1 IN VARCHAR2,
    str2 IN 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;

    l_wsdl_url varchar2(32767);
    l_namespace varchar2(32767);
    l_service varchar2(32767);
    l_port varchar2(32767);
    l_operation varchar2(32767);
    BEGIN
    l_wsdl_url := 'http://192.168.4.130/card_ws1.dll/soap/Iws_1';
    l_namespace := 'ws_1Intf-Iws_1';
    l_service := 'Iws_1service';
    l_port := 'Iws_1Port';
    l_operation := 'check_card';

    service_qname := sys.utl_dbws.to_qname(l_namespace, l_service);
    service_ := sys.utl_dbws.create_service(service_qname);
    port_qname := sys.utl_dbws.to_qname(l_namespace, l_port);
    operation_qname := sys.utl_dbws.to_qname(l_namespace, l_operation);
    call_ := sys.utl_dbws.create_call(service_, port_qname, operation_qname);
    sys.utl_dbws.set_target_endpoint_address(call_, l_wsdl_url);
    sys.utl_dbws.set_property(call_, 'ENCODINGSTYLE_URI', 'http://schemas.xmlsoap.org/soap/encoding/');
    sys.utl_dbws.set_property(call_, 'OPERATION_STYLE', 'rpc');
    -- sys.utl_dbws.set_property(call_, 'SOAPACTION_URI', l_namespace || '#' || l_operation);
    -- sys.utl_dbws.set_property(call_, 'SOAPACTION_USE', 'true');

    string_type_qname := sys.utl_dbws.to_qname('xsd', 'string');
    sys.utl_dbws.add_parameter(call_, 'cardid', string_type_qname, 'ParameterMode.IN');
    sys.utl_dbws.add_parameter(call_, 'hostname', string_type_qname, 'ParameterMode.IN');
    sys.utl_dbws.set_return_type(call_, string_type_qname);
    params(0) := ANYDATA.convertvarchar(str1);
    params(1) := ANYDATA.convertvarchar(str2);
    retx := sys.utl_dbws.invoke(call_, params);
    sys.utl_dbws.release_call(call_handle => call_);
    sys.utl_dbws.release_service(service_handle => service_);
    retx_string := retx.accessvarchar2;
    return ANYDATA.AccessVarchar2(retx);
    END;

    评论

报告相同问题?