From f59591c09a9aadf98b7b4baf398d81f8b8608e8b Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Mon, 26 Jan 2009 10:39:38 +0000 Subject: [PATCH] SWS-469: Content type not set accouring to Http specification, RFC 2616 --- .../ws/soap/axiom/AxiomSoapMessage.java | 2 +- .../ws/soap/AbstractSoapMessageTestCase.java | 25 ++++++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapMessage.java b/core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapMessage.java index 966037b3..45056f7e 100644 --- a/core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapMessage.java +++ b/core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapMessage.java @@ -221,7 +221,7 @@ public class AxiomSoapMessage extends AbstractSoapMessage { TransportOutputStream transportOutputStream = (TransportOutputStream) outputStream; String contentType = format.getContentType(); if (!hasAttachments) { - contentType += "; charset=\"" + charsetEncoding + "\""; + contentType += "; charset=" + charsetEncoding; } if (SoapVersion.SOAP_11 == getVersion()) { transportOutputStream.addHeader(TransportConstants.HEADER_SOAP_ACTION, soapAction); diff --git a/core/src/test/java/org/springframework/ws/soap/AbstractSoapMessageTestCase.java b/core/src/test/java/org/springframework/ws/soap/AbstractSoapMessageTestCase.java index 065c174b..11f030fe 100644 --- a/core/src/test/java/org/springframework/ws/soap/AbstractSoapMessageTestCase.java +++ b/core/src/test/java/org/springframework/ws/soap/AbstractSoapMessageTestCase.java @@ -16,13 +16,21 @@ package org.springframework.ws.soap; +import java.io.ByteArrayOutputStream; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.xml.sax.SAXParseException; + import org.springframework.core.io.Resource; import org.springframework.util.StringUtils; import org.springframework.ws.mime.AbstractMimeMessageTestCase; import org.springframework.ws.mime.MimeMessage; +import org.springframework.ws.transport.MockTransportOutputStream; +import org.springframework.ws.transport.TransportConstants; import org.springframework.xml.validation.XmlValidator; import org.springframework.xml.validation.XmlValidatorFactory; -import org.xml.sax.SAXParseException; public abstract class AbstractSoapMessageTestCase extends AbstractMimeMessageTestCase { @@ -50,6 +58,21 @@ public abstract class AbstractSoapMessageTestCase extends AbstractMimeMessageTes assertEquals("Invalid SOAP Action", "\"SoapAction\"", soapMessage.getSoapAction()); } + public void testCharsetAttribute() throws Exception { + MockTransportOutputStream outputStream = new MockTransportOutputStream(new ByteArrayOutputStream()); + soapMessage.writeTo(outputStream); + Map headers = outputStream.getHeaders(); + String contentType = (String) headers.get(TransportConstants.HEADER_CONTENT_TYPE); + if (contentType != null) { + Pattern charsetPattern = Pattern.compile("charset\\s*=\\s*([^;]+)"); + Matcher matcher = charsetPattern.matcher(contentType); + if (matcher.find() && matcher.groupCount() == 1) { + String charset = matcher.group(1).trim(); + assertTrue("Invalid charset", charset.indexOf('"') < 0); + } + } + } + protected abstract Resource[] getSoapSchemas(); public abstract void testGetVersion() throws Exception;