0

ウォッシュアウトで作成されたSOAPWebサービスがあり、base64Binary型のパラメーターを持つアクションがあります(これはC#のbyte []と同等であると思います)。

次の変数をWebサービスパラメーターに送信しています。

file_data = Base64.encode64(File.binread("/path/to/my/file"))

エラーが返されます:

RuntimeError (Invalid WashOut simple type: base64Binary)

ファイルパスからデータ型を正しく作成していませんか?

Webサービスのコントローラーは次のとおりです。

class ServiceController < ApplicationController
  include WashOut::SOAP

  soap_action "import_file",
              :args   => { :data => :base64Binary, :name => :string},
              :return => :string
  def import_file
    render :soap => ("response")
  end

  # You can use all Rails features like filtering, too. A SOAP controller
  # is just like a normal controller with a special routing.
  before_filter :dump_parameters
  def dump_parameters
    Rails.logger.debug params.inspect
  end
end

これが私のクライアントのコードです:

require 'savon'

class ServiceTester
  def self.initiate
    # create a client for your SOAP service
    client = Savon.client do
      wsdl "http://localhost:3000/service/wsdl"
    end

    file_data = Base64.encode64(File.binread("/path/to/my/file"))

    response = client.call(:import_file, message: { data: file_data, name: "myfilename" })
  end
end
4

1 に答える 1

1

どこで手に入れたの:base64Binary?WSDLパラメータにはそのようなタイプはありません。

operation = case type
  when 'string';    :to_s
  when 'integer';   :to_i
  when 'double';    :to_f
  when 'boolean';   nil
  when 'date';      :to_date
  when 'datetime';  :to_datetime
  when 'time';      :to_time
  else raise RuntimeError, "Invalid WashOut simple type: #{type}"
end

:string代わりに試してください。

于 2013-02-04T22:52:03.090 に答える