diff --git a/lib/savon/header.rb b/lib/savon/header.rb index a8a41361..b41d8a31 100644 --- a/lib/savon/header.rb +++ b/lib/savon/header.rb @@ -61,12 +61,7 @@ def build_wsa_header convert_to_xml({ 'wsa:Action' => @locals[:soap_action], 'wsa:To' => @globals[:endpoint], - 'wsa:MessageID' => "urn:uuid:#{SecureRandom.uuid}", - attributes!: { - 'wsa:MessageID' => { - "xmlns:wsa" => "http://schemas.xmlsoap.org/ws/2004/08/addressing" - } - } + 'wsa:MessageID' => "urn:uuid:#{SecureRandom.uuid}" }) end diff --git a/lib/savon/operation.rb b/lib/savon/operation.rb index 9489d60e..2328aa51 100644 --- a/lib/savon/operation.rb +++ b/lib/savon/operation.rb @@ -9,6 +9,11 @@ module Savon class Operation + SOAP_REQUEST_TYPE = { + 1 => "text/xml", + 2 => "application/soap+xml" + } + def self.create(operation_name, wsdl, globals) if wsdl.document? ensure_name_is_symbol! operation_name @@ -107,6 +112,15 @@ def build_request(builder) request.url = endpoint request.body = builder.to_s + if builder.multipart + request.gzip + request.headers["Content-Type"] = ["multipart/related", + "type=\"#{SOAP_REQUEST_TYPE[@globals[:soap_version]]}\"", + "start=\"#{builder.multipart[:start]}\"", + "boundary=\"#{builder.multipart[:multipart_boundary]}\""].join("; ") + request.headers["MIME-Version"] = "1.0" + end + # TODO: could HTTPI do this automatically in case the header # was not specified manually? [dh, 2013-01-04] request.headers["Content-Length"] = request.body.bytesize.to_s diff --git a/spec/savon/message_spec.rb b/spec/savon/message_spec.rb index 24c56a7f..1c6d360f 100644 --- a/spec/savon/message_spec.rb +++ b/spec/savon/message_spec.rb @@ -55,16 +55,6 @@ end end end - - context 'wsa:MessageID' do - let(:message_id_tag) { - '' - } - it 'should include xmlns:wsa attribute' do - response = client.call(:something, message: {}) - expect(response.xml).to include(message_id_tag) - end - end end end