diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapMessageFactory.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapMessageFactory.java index d6e17a24..25e79e26 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapMessageFactory.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapMessageFactory.java @@ -16,12 +16,6 @@ package org.springframework.ws.soap.saaj; -import jakarta.xml.soap.MessageFactory; -import jakarta.xml.soap.MimeHeaders; -import jakarta.xml.soap.SOAPConstants; -import jakarta.xml.soap.SOAPException; -import jakarta.xml.soap.SOAPMessage; - import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; @@ -30,8 +24,15 @@ import java.util.Iterator; import java.util.Map; import java.util.StringTokenizer; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.MimeHeaders; +import jakarta.xml.soap.SOAPConstants; +import jakarta.xml.soap.SOAPException; +import jakarta.xml.soap.SOAPMessage; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.xml.sax.SAXParseException; + import org.springframework.beans.factory.InitializingBean; import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; @@ -43,7 +44,6 @@ import org.springframework.ws.soap.SoapVersion; import org.springframework.ws.soap.saaj.support.SaajUtils; import org.springframework.ws.transport.TransportConstants; import org.springframework.ws.transport.TransportInputStream; -import org.xml.sax.SAXParseException; /** * SAAJ-specific implementation of the {@link org.springframework.ws.WebServiceMessageFactory WebServiceMessageFactory}. @@ -55,6 +55,7 @@ import org.xml.sax.SAXParseException; * * @author Arjen Poutsma * @author Greg Turnquist + * @author Corneil du Plessis * @see org.springframework.ws.soap.saaj.SaajSoapMessage * @since 1.0.0 */ @@ -222,11 +223,15 @@ public class SaajSoapMessageFactory implements SoapMessageFactory, InitializingB TransportInputStream transportInputStream = (TransportInputStream) inputStream; for (Iterator headerNames = transportInputStream.getHeaderNames(); headerNames.hasNext();) { String headerName = headerNames.next(); - for (Iterator headerValues = transportInputStream.getHeaders(headerName); headerValues.hasNext();) { + for (Iterator headerValues = transportInputStream.getHeaders(headerName); headerValues.hasNext(); ) { String headerValue = headerValues.next(); - StringTokenizer tokenizer = new StringTokenizer(headerValue, ","); - while (tokenizer.hasMoreTokens()) { - mimeHeaders.addHeader(headerName, tokenizer.nextToken().trim()); + if (isMimeHeader(headerName)) { + StringTokenizer tokenizer = new StringTokenizer(headerValue, ","); + while (tokenizer.hasMoreTokens()) { + mimeHeaders.addHeader(headerName, tokenizer.nextToken().trim()); + } + } else { + mimeHeaders.addHeader(headerName, headerValue); } } } @@ -234,6 +239,11 @@ public class SaajSoapMessageFactory implements SoapMessageFactory, InitializingB return mimeHeaders; } + private boolean isMimeHeader(String headerName) { + String lowerHeaderName = headerName.toLowerCase(); + return lowerHeaderName.startsWith("content-") || lowerHeaderName.startsWith("mime-"); + } + /** * Checks for the UTF-8 Byte Order Mark, and removes it if present. The SAAJ RI cannot cope with these BOMs. *