diff --git a/lib/savon/header.rb b/lib/savon/header.rb index f94ed4eb..516e9dbb 100644 --- a/lib/savon/header.rb +++ b/lib/savon/header.rb @@ -62,12 +62,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 812540cd..00e40d87 100644 --- a/lib/savon/operation.rb +++ b/lib/savon/operation.rb @@ -11,6 +11,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 @@ -95,16 +100,19 @@ 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 - if builder.multipart - request.headers["Content-Type"] = "multipart/related; " \ - "boundary=\"#{builder.multipart[:multipart_boundary]}\"; " \ - "type=\"text/xml\"; start=\"#{builder.multipart[:start]}\"" - end - request end diff --git a/spec/savon/message_spec.rb b/spec/savon/message_spec.rb index 2ed79cb6..49ce9fcd 100644 --- a/spec/savon/message_spec.rb +++ b/spec/savon/message_spec.rb @@ -56,16 +56,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