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

关于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;

    评论

报告相同问题?

悬赏问题

  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误