2017-03-01 3 views
0

入力パラメータとしてitemnumberを受け入れるPL/SQLコードからWebサービスを起動しようとしています。カップルはbase64binayでエンコードされたPDFファイルになります。取得415 PL/SQLからSOAP Webサービスを呼び出す際にサポートされていないメディア・タイプのエラー

SoapUIから同じWSDLをテストするとき、適切な応答が返されます。

私のPL/SQLコードでは、415 Unsupported Media Type Errorが発生します。この問題を解決するために私を助けてください、私は最後の5日間からこのエラーで立ち往生しています。前もって感謝します。

以下は私のダミーコードですが、正常に機能したら適切な機能に変換する必要があります。

declare 
     soap_request varchar2(30000); 
     soap_respond CLOB; 
     soap_respond_temp CLOB; 
     http_req utl_http.req; 
     http_resp utl_http.resp; 
     l_resp XMLType; 
     i integer; 
     instr_start integer; 
     instr_end integer; 
     l_orgname varchar2(30000); 
     l_description   VARCHAR2(250); 
     l_long_description  VARCHAR2(1000); 
     l_segment1    VARCHAR2(250); 
     l_item_type    VARCHAR2(100); 
     l_isbn     VARCHAR2(100); 
     l_match_score   NUMBER; 
     l_pdh_id    NUMBER; 
     l_cross_reference_id NUMBER; 
     l_soap_request  CLOB; 
     l_soap_response CLOB; 
     l_soap_resp_raw LONG RAW; 
     l_buffer_size  NUMBER (10) := 512; 
     l_substring_msg VARCHAR2 (512); 
     l_string_request VARCHAR2 (512); 
     l_raw_data   RAW (512); 
     buffer    VARCHAR2 (32767); 
     i     NUMBER; 
     eob    BOOLEAN := FALSE; 
     resultvar VARCHAR2 (30000); 
    begin 
     --Item number 104PT is I/p parameter below to the SOAP webservice 
     soap_request:= '<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:grad="http://grades.web.spec.quality.asmorg.com/"> 
     <soap:Header/> 
     <soap:Body> 
      <grad:getGradeInfoForRM> 
      <strRMItem>104PT</strRMItem> 
      </grad:getGradeInfoForRM> 
     </soap:Body> 
    </soap:Envelope>';  
    http_req:= utl_http.begin_request 
       ('http://112.18.28.38:81/Itemspec/ItemGradeWSPort' 
       , 'POST' 
       , 'HTTP/1.1' 
       ); 
     utl_http.set_header(http_req, 'Content-Type', 'text/xml'); 
     utl_http.set_header(http_req, 'Content-Length', length(soap_request)); 
     utl_http.set_header(http_req, 'SOAPAction', ''); 
     utl_http.write_text(http_req, soap_request); 
     http_resp:= utl_http.get_response(http_req); 
    --dbms_output.put_line('got the soap response');  
    dbms_output.put_line('Response> status_code: "' ||http_resp.status_code || '"'); 
    dbms_output.put_line('Response> reason_phrase: "' ||http_resp.reason_phrase || '"'); 
    dbms_output.put_line('Response> http_version: "' ||http_resp.http_version || '"'); 
    DBMS_LOB.createtemporary (l_soap_response, TRUE); 
    fnd_file.put_line(fnd_file.log,'After create temporary'); 
    WHILE NOT (eob) 
     LOOP 
      BEGIN 
      dbms_output.put_line ('before read_text'); 
      UTL_HTTP.read_text (http_resp, buffer, 32767); 
      fnd_file.put_line(fnd_file.log,'Printing Buffer '||buffer); 
      dbms_output.put_line('Printing Buffer '||buffer); 
      IF buffer IS NOT NULL AND LENGTH (buffer) > 0 
      THEN 
       fnd_file.put_line(fnd_file.log,'Appending to l_soap_response using DBMS writeappend'); 
       dbms_output.put_line (' Appending to l_soap_response using DBMS writeappend'); 
       DBMS_LOB.writeappend (l_soap_response, LENGTH (buffer), buffer); 
      END IF; 
      EXCEPTION 
      WHEN UTL_HTTP.end_of_body 
      THEN 
      fnd_file.put_line(fnd_file.log,'end of body'); 
       eob := TRUE; 
      END; 
     END LOOP; 
    UTL_HTTP.end_response (http_resp); 
    fnd_file.put_line (fnd_file.log,'before XMLTYPE Call'); 
    dbms_output.put_line ('before XMLTYPE Call'); 
    l_resp := XMLTYPE.createxml (l_soap_response); 
    DBMS_LOB.freetemporary (l_soap_response); 
    fnd_file.put_line(fnd_file.log,'--after XMLTYPE Call'); 
    dbms_output.put_line ('after XMLTYPE Call'); 
    resultvar := l_resp.getstringval(); 
    fnd_file.put_line(fnd_file.log,'--after getstringval Call'); 
    fnd_file.put_line (fnd_file.log,resultvar); 
    fnd_file.put_line (fnd_file.log,'End DateTime:- ' || SYSTIMESTAMP); 
     EXCEPTION 
     WHEN UTL_HTTP.end_of_body THEN 
      dbms_output.put_line('end of body'); 
     UTL_HTTP.end_response(http_resp); 
      WHEN UTL_HTTP.TOO_MANY_REQUESTS THEN 
     UTL_HTTP.END_RESPONSE(http_resp); 
     WHEN OTHERS THEN 
      dbms_output.put_line('others eception '||SQLERRM); 
    end;  

ここで印刷されたログメッセージ:

レスポンス> STATUS_CODE: "415" レスポンス> reason_phrase: 他はORA-31011をeception "サポートされていないメディアタイプ" XMLTYPEコールの前にREAD_TEXT 前:XML解析ORA-19202:XML処理でエラーが発生しました。 :入力ソースが空です。

答えて

0

この問題は解決されました。問題はヘッダーがSO AP Webサービスタイプ。

sys.UTL_HTTP.SET_HEADER(http_req, 'Content-Type', 'application/soap+xml;charset=UTF-8'); 
    utl_http.set_header(http_req, 'Content-Length', length(soap_request)); 
utl_http.set_header (http_req, 'Transfer-Encoding', 'chunked'); 
sys.utl_http.set_header(http_req, 'User-Agent', 'Apache-HttpClient/4.1.1 (java 1.5)'); 
    utl_http.set_header(http_req, 'SOAPAction', ''); 

正しいヘッダータイプ、つまり「コンテンツタイプ」と「ユーザーエージェント」に関するこのヒントは、Rawタブを見ながらSoapUIから取得しました。

ありがとう、 Pradeep

関連する問題