ORACLE WEBService调用

create or replace function soap_call
  ( p_req_body       in varchar2
  , p_target_url in varchar2
  , p_soap_action in varchar2 default 'none'
  ) return xmltype
  is
    l_soap_request  varchar2(30000);
    l_soap_response varchar2(30000);
    http_req utl_http.req;
    http_resp utl_http.resp;
  begin
    l_soap_request := '<?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>'|| p_req_body ||'</S:Body></S:Envelope>';
    http_req:= utl_http.begin_request
               ( p_target_url
               , 'POST'
               , 'HTTP/1.1'
               );
    utl_http.set_header(http_req, 'Content-Type', 'text/xml; charset=UTF8');
    utl_http.set_header(http_req, 'Content-Length', length(l_soap_request));
    utl_http.set_header(http_req, 'SOAPAction', p_soap_action);
    utl_http.write_text(http_req, l_soap_request);
    -- the actual call to the service is made here
    http_resp:= utl_http.get_response(http_req);
    utl_http.read_text(http_resp, l_soap_response);
    utl_http.end_response(http_resp);

    -- only return from the soap response - that is: the content of the body element in the SOAP envelope
    return XMLType.createXML(l_soap_response).extract('/S:Envelope/S:Body/child::node()'
                     , 'xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"');
  end;

--webservice调用代码
CREATE OR REPLACE FUNCTION SEND_INDUCED_MESSAGE
(
    p_SIMNUM              IN VARCHAR2
  , p_HEIGHT              IN VARCHAR2 DEFAULT '32'
  , p_WIDTH               IN VARCHAR2 DEFAULT '0'
  , p_COLOR               IN VARCHAR2 DEFAULT '1'
  , p_PARKNUM             IN VARCHAR2
) RETURN VARCHAR2 AS
  l_response_call          XMLType;
  l_request_body           varchar2(20000);
  l_target_namespace       varchar2(200);
  l_target_url             varchar2(200);
BEGIN
  l_target_namespace  := 'http://led.innotek.com/';
  l_target_url        := 'http://192.168.10.100:8080/WebApplication/LedDisplayServiceService';
  l_request_body      :=
       '<ns:sendtext xmlns:ns="'||l_target_namespace||'">
            <simNum>'||p_SIMNUM||'</simNum>
            <tHeight>'||p_HEIGHT||'</tHeight>
            <tWidth>'||p_WIDTH||'</tWidth>
            <color>'||p_COLOR||'</color>
            <parkNum>'||p_PARKNUM||'</parkNum>
        </ns:sendtext>';
  l_response_call := soap_call(l_request_body, l_target_url, 'sendtext');
  return l_response_call.extract('//return/text()').getStringVal();
END ;

--创建控制列表并赋权 begin dbms_network_acl_admin.create_acl( acl => 'utl_http.xml', description => 'Http Access', principal => 'SMARTFEE', is_grant => TRUE, privilege => 'connect', start_date => null, end_date => null ); --添加新用户
dbms_network_acl_admin.add_privilege ( acl => 'utl_http.xml', principal => 'SMARTFEE', is_grant => TRUE, privilege => 'resolve', start_date => null, end_date => null ); --给网络分配一个访问控制列表
dbms_network_acl_admin.assign_acl ( acl => 'utl_http.xml', host => 'sms.pf.innotek.com', lower_port => 8880, upper_port => 8880 ); commit; end; /

--访问控制列表视图


select * from DBA_NETWORK_ACLS;


select * from DBA_NETWORK_ACL_PRIVILEGES;


select * from USER_NETWORK_ACL_PRIVILEGES;



SELECT *
FROM TABLE(DBMS_NETWORK_ACL_UTILITY.domains('www.chinastock.com.cn'));






--测试


DECLARE
l_url VARCHAR2(300) := 'http://www.test.com.cn/stock.xml';


l_http_request UTL_HTTP.req;


l_http_response UTL_HTTP.resp;


BEGIN
-- Make a HTTP request and get the response.


l_http_request := UTL_HTTP.begin_request(l_url);


l_http_response := UTL_HTTP.get_response(l_http_request);


UTL_HTTP.end_response(l_http_response);

END;

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值