1
Oracle 프로 시저 (PL/SQL)에서 WSO2 ESB로 JSON 메시지를 보내려고합니다.wso2 esb, json, PL/SQL은 JSON 웹 서비스를 WSO2 ESB 프록시 서비스로 보내고 클라이언트가 닫습니다.
create or replace PROCEDURE test_json
AS
http_resp utl_http.resp;
req_msg CLOB;
resp_msg CLOB;
TYPE tab_type IS TABLE OF PNLM%ROWTYPE;
t_tab tab_type := tab_type();
v_parser dbms_xmlparser.parser;
v_xmldoc XMLDOM.DOMDocument;
v_node dbms_xmldom.DOMNode;
v_item dbms_xmldom.domnodelist;
v_n dbms_xmldom.DOMNode;
l_pstatus varchar2(20);
v_clob_length binary_integer;
v_amount pls_integer := 16383;
v_offset pls_integer := 1;
v_buffer varchar2(32767);
json_msg CLOB;
BEGIN
json_msg := '{"loc":{"longitude":"30.5","latitude":"20.5"}}';
http_req := utl_http.begin_request('http://test.esb:8280/services/test_json', 'POST');
utl_http.set_body_charset(http_req, 'UTF-8');
utl_http.set_header(http_req, 'Content-Type', 'application/json');
v_clob_length := dbms_lob.getLength(json_msg);
if v_clob_length <= 32767 then
utl_http.write_text(http_req, dbms_lob.substr(json_msg,dbms_lob.getLength(json_msg),1));
elsif v_clob_length > 32767 then
while (v_offset < v_clob_length) loop
dbms_lob.read(lob_loc => json_msg,amount => v_amount,offset => v_offset,buffer => v_buffer);
utl_http.write_text(http_req, v_buffer);
v_offset := v_offset + v_amount;
end loop;
end if;
http_resp := utl_http.get_response(http_req);
utl_http.read_text(http_resp, resp_msg);
dbms_output.put_line(resp_msg);
v_parser := dbms_xmlparser.newParser;
dbms_xmlparser.setValidationMode(v_parser, FALSE);
dbms_xmlparser.parseCLOB(v_parser, resp_msg);
v_xmldoc := dbms_xmlparser.getDocument(v_parser);
dbms_xmlparser.freeParser(v_parser);
v_node := xmldom.makenode(v_xmldoc);
v_item := dbms_xslprocessor.selectNodes(v_node,'//ts_state');
t_tab.EXTEND;
v_n := dbms_xmldom.item(v_item, 0);
dbms_xslprocessor.valueOf(v_n, '//ts_state', l_pstatus);
dbms_output.put_line('l_pstatus=['||l_pstatus||']');
utl_http.end_response(http_resp);
exception when utl_http.end_of_body then utl_http.end_response(http_resp);
when utl_http.request_failed then dbms_output.put_line('Response Failed.'); utl_http.end_response(http_resp);
when others then dbms_output.put_line('Unknown Error!.'); utl_http.end_response(http_resp);
END;
을하고 (내용이있는-sequenc OFR 프록시 서비스 TEST_JSON에 아래) WSO2 ESB 프록시 서비스 TEST_JSON을 만들어 : 그래서, 나는 다음과 같이 저장 프로 시저 TEST_JSON을 만들어
<proxy xmlns="http://ws.apache.org/ns/synapse" name="test_json" transports="https,http" statistics="disable" trace="disable" startOnLoad="true">
<target>
<inSequence>
<clone continueParent="true" id="clon1" sequential="true">
<target>
<sequence>
<log level="full">
<property name="text" value="==========in clone=========="/>
</log>
<property name="longitude" expression="//longitude/text()" scope="default" type="STRING"/>
<property name="latitude" expression="//latitude/text()" scope="default" type="STRING"/>
<log level="custom">
<property name="LONGITUDE" expression="get-property('longitude')"/>
<property name="LATITUDE" expression="get-property('latitude')"/>
</log>
</sequence>
</target>
</clone>
<header name="To" action="remove"/>
<property name="NO_ENTITY_BODY" scope="axis2" action="remove"/>
<property name="RESPONSE" value="true" scope="default"/>
<property name="DISABLE_CHUNKING" value="true" scope="axis2"/>
<send/>
<log level="full">
<property name="text" value="==============End=============="/>
</log>
</inSequence>
</target>
<description></description>
</proxy>
WSO2 ESB가 메시지를 수신하더라도 오라클 절차는 항상 시간 초과됩니다 (ORA-29276 : 전송 시간 초과). (ESB 콘솔에서 로그 메시징 메시지가 표시됩니다. 클라이언트가 닫은 연결).
curl -i \
-H "Content-Type: application/json" \
-X POST \
-d '{"loc":{"longitude":"30.5","latitude":"20.5"}}' \
http://test.esb:8280/services/test_json
그것은 곧 반응이다 : 나는 컬을하여 JSON 메시지를 보낼
.
아무도 도와 드릴 수 있습니까? 감사. 나는 지점을 찾을 생각