Skip to content

Commit 838c50a

Browse files
jaminhgregturn
authored andcommitted
SWS-981 - Make SoapActionHeaders ONLY appear for SOAP 1.1 messages
SOAPAction header with SOAP ver 1.2 messages
1 parent f36e8ca commit 838c50a

File tree

2 files changed

+106
-4
lines changed

2 files changed

+106
-4
lines changed

spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapMessage.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -114,11 +114,14 @@ public SaajSoapMessage(SOAPMessage soapMessage, boolean langAttributeOnSoap11Fau
114114
Assert.notNull(soapMessage, "soapMessage must not be null");
115115
saajMessage = soapMessage;
116116
this.langAttributeOnSoap11FaultString = langAttributeOnSoap11FaultString;
117-
MimeHeaders headers = soapMessage.getMimeHeaders();
118-
if (ObjectUtils.isEmpty(headers.getHeader(TransportConstants.HEADER_SOAP_ACTION))) {
119-
headers.addHeader(TransportConstants.HEADER_SOAP_ACTION, "\"\"");
120-
}
121117
this.messageFactory = messageFactory;
118+
if (SoapVersion.SOAP_11.equals(getVersion()))
119+
{
120+
MimeHeaders headers = soapMessage.getMimeHeaders();
121+
if (ObjectUtils.isEmpty(headers.getHeader(TransportConstants.HEADER_SOAP_ACTION))) {
122+
headers.addHeader(TransportConstants.HEADER_SOAP_ACTION, "\"\"");
123+
}
124+
}
122125
}
123126

124127
/** Return the SAAJ {@code SOAPMessage} that this {@code SaajSoapMessage} is based on. */
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
package org.springframework.ws.soap.client.core;
2+
3+
import java.io.IOException;
4+
5+
import javax.xml.soap.MessageFactory;
6+
import javax.xml.soap.SOAPConstants;
7+
import javax.xml.soap.SOAPException;
8+
9+
import org.junit.Assert;
10+
import org.junit.Before;
11+
import org.junit.Test;
12+
import org.springframework.ws.soap.SoapVersion;
13+
import org.springframework.ws.soap.saaj.SaajSoapMessage;
14+
import org.springframework.ws.soap.saaj.SaajSoapMessageFactory;
15+
import org.springframework.ws.soap.support.SoapUtils;
16+
import org.springframework.ws.transport.TransportConstants;
17+
18+
public class SaajSoapActionCallbackTest {
19+
20+
private SaajSoapMessageFactory saaj11Factory = new SaajSoapMessageFactory();
21+
22+
private SaajSoapMessageFactory saaj12Factory = new SaajSoapMessageFactory();
23+
24+
@Before
25+
public void init() throws SOAPException
26+
{
27+
MessageFactory messageFactory11 = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL);
28+
29+
saaj11Factory.setSoapVersion(SoapVersion.SOAP_11);
30+
saaj11Factory.setMessageFactory(messageFactory11);
31+
saaj11Factory.afterPropertiesSet();
32+
33+
MessageFactory messageFactory12 = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
34+
saaj12Factory.setSoapVersion(SoapVersion.SOAP_12);
35+
saaj12Factory.setMessageFactory(messageFactory12);
36+
saaj12Factory.afterPropertiesSet();
37+
}
38+
39+
@Test
40+
public void noSoapAction11() throws IOException
41+
{
42+
SaajSoapMessage message = saaj11Factory.createWebServiceMessage();
43+
String[] soapActionHeaders = message.getSaajMessage().getMimeHeaders().getHeader(TransportConstants.HEADER_SOAP_ACTION);
44+
Assert.assertEquals("\"\"", soapActionHeaders[0]);
45+
}
46+
47+
@Test
48+
public void soapAction11() throws IOException
49+
{
50+
SaajSoapMessage message = saaj11Factory.createWebServiceMessage();
51+
SoapActionCallback callback = new SoapActionCallback("testAction");
52+
callback.doWithMessage(message);
53+
String[] soapActionHeaders = message.getSaajMessage().getMimeHeaders().getHeader(TransportConstants.HEADER_SOAP_ACTION);
54+
Assert.assertEquals("\"testAction\"", soapActionHeaders[0]);
55+
}
56+
57+
@Test
58+
public void emptySoapAction11() throws IOException
59+
{
60+
SaajSoapMessage message = saaj11Factory.createWebServiceMessage();
61+
SoapActionCallback callback = new SoapActionCallback(null);
62+
callback.doWithMessage(message);
63+
String[] soapActionHeaders = message.getSaajMessage().getMimeHeaders().getHeader(TransportConstants.HEADER_SOAP_ACTION);
64+
Assert.assertEquals("\"\"", soapActionHeaders[0]);
65+
}
66+
67+
@Test
68+
public void noSoapAction12() throws IOException
69+
{
70+
SaajSoapMessage message = saaj12Factory.createWebServiceMessage();
71+
String[] soapActionHeaders = message.getSaajMessage().getMimeHeaders().getHeader(TransportConstants.HEADER_SOAP_ACTION);
72+
Assert.assertNull(soapActionHeaders);
73+
}
74+
75+
@Test
76+
public void soapAction12() throws IOException
77+
{
78+
SaajSoapMessage message = saaj12Factory.createWebServiceMessage();
79+
SoapActionCallback callback = new SoapActionCallback("testAction");
80+
callback.doWithMessage(message);
81+
String[] soapActionHeaders = message.getSaajMessage().getMimeHeaders().getHeader(TransportConstants.HEADER_SOAP_ACTION);
82+
Assert.assertNull(soapActionHeaders);
83+
String[] contentTypes = message.getSaajMessage().getMimeHeaders().getHeader(TransportConstants.HEADER_CONTENT_TYPE);
84+
Assert.assertEquals("\"testAction\"", SoapUtils.extractActionFromContentType(contentTypes[0]));
85+
}
86+
87+
@Test
88+
public void emptySoapAction12() throws IOException
89+
{
90+
SaajSoapMessage message = saaj12Factory.createWebServiceMessage();
91+
SoapActionCallback callback = new SoapActionCallback(null);
92+
callback.doWithMessage(message);
93+
String[] soapActionHeaders = message.getSaajMessage().getMimeHeaders().getHeader(TransportConstants.HEADER_SOAP_ACTION);
94+
Assert.assertNull(soapActionHeaders);
95+
String[] contentTypes = message.getSaajMessage().getMimeHeaders().getHeader(TransportConstants.HEADER_CONTENT_TYPE);
96+
Assert.assertEquals("\"\"", SoapUtils.extractActionFromContentType(contentTypes[0]));
97+
}
98+
99+
}

0 commit comments

Comments
 (0)