機械翻訳について

Ruby

SavonなどのSOAPクライアントを使用してWebサービスを呼び出すには、Rubyを使用します。

開発環境をインストールして構成し、ベース・アプリケーションを作成する必要があります。
  • アプリケーションを作成します(たとえばrails new WsTest1)。

  • コントローラを作成します(たとえばrails generate WsCallSample WsCall controller)。

  • ルートを設定します。 この例では、public/index.htmlを削除し、config/routes.rbのルート・プロパティをWsCallSample#WsCallに変更します。

  • Savonをアプリケーションに追加します。たとえば、gem'savon'app/Gemfileに追加します。

詳細は、Ruby on Railsを参照してください。

次に示すのは、サービスに渡すペイロードを入力するHTMLフォームを作成し、Savonnet/https呼出しのための処理を開始するサンプル・コードです。 このサンプル・アプリケーションでは、views/ws_call_sample/WsCall.html.erbの下にHTMLフォームが作成されます。

<HTML>
<HEAD>
<title>WsCallSample#WsCall</title>
</HEAD>
<BODY >
 
<form name="envelope" method="POST">
  <input type="hidden" name="INPUT_PAYLOAD" >
  <input type="hidden" name="OUTPUT_PAYLOAD" >
   <%= submit_tag "Invoke Savon", :name => "invokeSavon" %>
  <%= submit_tag "Invoke HttpRequest", :name => "invokeHttpRequest" %>
  <br>
  <table style="width:100%; font-size: small;" align=center>
    <tr>
      <td  align="left"><b>Input Payload</b></td>
      <td  align="left"><b>Output Payload</b></td>
    </tr>
    <tr>
      <td align="center"><textarea name="inputpayload" wrap="off" style="width:100%;height:100%" rows=30 ><%= params["inputpayload"] %></textarea></td>
      <td align="center"><textarea name="outputpayload" wrap="off" style="width:100%;height:100%" rows=30  ><%= params["xmlbody"] %></textarea></td>
    </tr>
  </table>
  <br>
</form>
</BODY>
</HTML>

次に示すのは、HTMLフォームからの送信を処理するコントローラを更新するためのサンプル・コードです。 このサンプル・アプリケーションでは、コントローラはcontrollers/ws_call_sample_controller.rbにあります。 このコードは、入力内のエンベロープを処理し、Savonおよび基本のnet/https呼出しを使用して実行し、応答を出力フィールドに表示します。

require 'rubygems'
require 'nokogiri'
require 'rexml/document'
require "net/https"
require 'uri'
 
class WsCallSampleController < ApplicationController
  def WsCall
    username ="username";
    password ="password";
    input=params["inputpayload"];
 
    if params['invokeSavon']
      # Process submission when the invokeSavon button was pressed
      url = "https://host:port/icCnSetupCreditRulesPublicService/CreditRuleService?wsdl";
      
      # Create new instance of the Savon client using basic authentication
      client = Savon.client(wsdl: url, basic_auth: [username, password], ssl_verify_mode: :none )
 
      # Call the service with the envelope provided as input
      response = client.call(:on_fault, xml: input)
      
      # Parse the response to XML
      doc = Nokogiri::XML(response.to_xml  ,&:noblanks)
      s = doc.to_xml( indent:2, indent_text:" " )
      
      # Populate reponse content to a variable to be displayed on the output area
      params["xmlbody"] = s
 
    elsif params['invokeHttpRequest']
      # Process submission when the invokeHttpRequest button was pressed
      uri = URI.parse("https://host:port/icCnSetupCreditRulesPublicService/CreditRuleService")
 
      # Create new instance of HTTP object
      http = Net::HTTP.new(uri.host, uri.port)
 
      # The request uses SSL, certificates are NOT verified
      http.use_ssl = true
      http.verify_mode = OpenSSL::SSL::VERIFY_NONE
      
      # Create new instance of HTTP POST request
      request = Net::HTTP::Post.new(uri.request_uri)
 
      # Configure the request content type to be xml and SOAP action
      request.basic_auth(username, password)
      request.add_field("SOAPAction", "http://xmlns.oracle.com/apps/incentiveCompensation/cn/creditSetup/creditRule/creditRuleService/findRule")
      request.add_field("Content-Type", "text/xml;charset=UTF-8")
      
      # Set the envelope content obtained from the input to the request
      request.body = input
      
      # Execute the request and obtain the response
      response = http.request(request)
      
      # Parse the response to XML
      doc = Nokogiri::XML(response.body ,&:noblanks)
      s = doc.to_xml( indent:2, indent_text:" " )
 
      # Populate reponse content to a variable to be displayed on the output area
      params["xmlbody"] = s
    else
      # For any other action than invokeSavon / invokeHttpRequest default the input SOAP enveloper
      params["inputpayload"] = ""+
        "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"> " + "\n"+
        "  <soap:Body> " + "\n"+
        "    <findRule xmlns=\"http://xmlns.oracle.com/apps/incentiveCompensation/cn/creditSetup/creditRule/creditRuleService/types/\"> " + "\n"+
        "      <findCriteria> " + "\n"+
        "        <fetchStart xmlns=\"http://xmlns.oracle.com/adf/svc/types/\">0</fetchStart> " + "\n"+
        "        <fetchSize xmlns=\"http://xmlns.oracle.com/adf/svc/types/\">-1</fetchSize> " + "\n"+
        "        <filter xmlns=\"http://xmlns.oracle.com/adf/svc/types/\"> " + "\n"+
        "          <group> " + "\n"+
        "            <upperCaseCompare>false</upperCaseCompare> " + "\n"+
        "            <item> " + "\n"+
        "              <upperCaseCompare>false</upperCaseCompare> " + "\n"+
        "                <attribute>RuleId</attribute> " + "\n"+
        "                <operator>=</operator> " + "\n"+
        "                <value>300000000851162</value> " + "\n"+
        "            </item> " + "\n"+
        "          </group> " + "\n"+
        "        </filter> " + "\n"+
        "        <excludeAttribute xmlns=\"http://xmlns.oracle.com/adf/svc/types/\">false</excludeAttribute> " + "\n"+
        "      </findCriteria> " + "\n"+
        "      <findControl> " + "\n"+
        "        <retrieveAllTranslations xmlns=\"http://xmlns.oracle.com/adf/svc/types/\">false</retrieveAllTranslations> " + "\n"+
        "      </findControl> " + "\n"+
        "    </findRule> " + "\n"+
        "  </soap:Body> " + "\n"+
        "</soap:Envelope> " ;
    end
  end
end
関連トピック
  • Javaクライアント
  • Oracle Database
  • .NET Framework
  • PHP
  • Perl
  • Python
  • SOAP Webサービスの呼出し