|
16 | 16 |
|
17 | 17 | package org.springframework.ws.soap.saaj;
|
18 | 18 |
|
19 |
| -import jakarta.xml.soap.MessageFactory; |
20 |
| -import jakarta.xml.soap.MimeHeaders; |
21 |
| -import jakarta.xml.soap.SOAPConstants; |
22 |
| -import jakarta.xml.soap.SOAPException; |
23 |
| -import jakarta.xml.soap.SOAPMessage; |
24 |
| - |
25 | 19 | import java.io.BufferedInputStream;
|
26 | 20 | import java.io.IOException;
|
27 | 21 | import java.io.InputStream;
|
|
30 | 24 | import java.util.Map;
|
31 | 25 | import java.util.StringTokenizer;
|
32 | 26 |
|
| 27 | +import jakarta.xml.soap.MessageFactory; |
| 28 | +import jakarta.xml.soap.MimeHeaders; |
| 29 | +import jakarta.xml.soap.SOAPConstants; |
| 30 | +import jakarta.xml.soap.SOAPException; |
| 31 | +import jakarta.xml.soap.SOAPMessage; |
33 | 32 | import org.apache.commons.logging.Log;
|
34 | 33 | import org.apache.commons.logging.LogFactory;
|
| 34 | +import org.xml.sax.SAXParseException; |
| 35 | + |
35 | 36 | import org.springframework.beans.factory.InitializingBean;
|
36 | 37 | import org.springframework.util.CollectionUtils;
|
37 | 38 | import org.springframework.util.ObjectUtils;
|
|
43 | 44 | import org.springframework.ws.soap.saaj.support.SaajUtils;
|
44 | 45 | import org.springframework.ws.transport.TransportConstants;
|
45 | 46 | import org.springframework.ws.transport.TransportInputStream;
|
46 |
| -import org.xml.sax.SAXParseException; |
47 | 47 |
|
48 | 48 | /**
|
49 | 49 | * SAAJ-specific implementation of the {@link org.springframework.ws.WebServiceMessageFactory WebServiceMessageFactory}.
|
|
55 | 55 | *
|
56 | 56 | * @author Arjen Poutsma
|
57 | 57 | * @author Greg Turnquist
|
| 58 | + * @author Corneil du Plessis |
58 | 59 | * @see org.springframework.ws.soap.saaj.SaajSoapMessage
|
59 | 60 | * @since 1.0.0
|
60 | 61 | */
|
@@ -222,18 +223,27 @@ private MimeHeaders parseMimeHeaders(InputStream inputStream) throws IOException
|
222 | 223 | TransportInputStream transportInputStream = (TransportInputStream) inputStream;
|
223 | 224 | for (Iterator<String> headerNames = transportInputStream.getHeaderNames(); headerNames.hasNext();) {
|
224 | 225 | String headerName = headerNames.next();
|
225 |
| - for (Iterator<String> headerValues = transportInputStream.getHeaders(headerName); headerValues.hasNext();) { |
| 226 | + for (Iterator<String> headerValues = transportInputStream.getHeaders(headerName); headerValues.hasNext(); ) { |
226 | 227 | String headerValue = headerValues.next();
|
227 |
| - StringTokenizer tokenizer = new StringTokenizer(headerValue, ","); |
228 |
| - while (tokenizer.hasMoreTokens()) { |
229 |
| - mimeHeaders.addHeader(headerName, tokenizer.nextToken().trim()); |
| 228 | + if (isMimeHeader(headerName)) { |
| 229 | + StringTokenizer tokenizer = new StringTokenizer(headerValue, ","); |
| 230 | + while (tokenizer.hasMoreTokens()) { |
| 231 | + mimeHeaders.addHeader(headerName, tokenizer.nextToken().trim()); |
| 232 | + } |
| 233 | + } else { |
| 234 | + mimeHeaders.addHeader(headerName, headerValue); |
230 | 235 | }
|
231 | 236 | }
|
232 | 237 | }
|
233 | 238 | }
|
234 | 239 | return mimeHeaders;
|
235 | 240 | }
|
236 | 241 |
|
| 242 | + private boolean isMimeHeader(String headerName) { |
| 243 | + String lowerHeaderName = headerName.toLowerCase(); |
| 244 | + return lowerHeaderName.startsWith("content-") || lowerHeaderName.startsWith("mime-"); |
| 245 | + } |
| 246 | + |
237 | 247 | /**
|
238 | 248 | * Checks for the UTF-8 Byte Order Mark, and removes it if present. The SAAJ RI cannot cope with these BOMs.
|
239 | 249 | *
|
|
0 commit comments