Unconditionally call SAAJ SOAPMessage#saveChanges

In some scenarios, the saveRequired() flag of the SAAJ SOAPMessage does
not indicate whether the internal state of the message is valid. Since
calling it is therefore useless, we unconditionally call saveChanges()
now.

Issue: SWS-870, SWS-871
This commit is contained in:
Arjen Poutsma
2014-04-14 12:00:13 +02:00
parent a23de2afd2
commit 06d735659c

View File

@@ -173,15 +173,13 @@ public class SaajSoapMessage extends AbstractSoapMessage {
}
else if (SoapVersion.SOAP_12 == getVersion()) {
// force save of Content Type header
if (saajMessage.saveRequired()) {
try {
saajMessage.saveChanges();
}
catch (SOAPException ex) {
throw new SaajSoapMessageException("Could not save message", ex);
}
}
String[] contentTypes = mimeHeaders.getHeader(TransportConstants.HEADER_CONTENT_TYPE);
try {
saajMessage.saveChanges();
}
catch (SOAPException ex) {
throw new SaajSoapMessageException("Could not save message", ex);
}
String[] contentTypes = mimeHeaders.getHeader(TransportConstants.HEADER_CONTENT_TYPE);
String contentType = !ObjectUtils.isEmpty(contentTypes) ? contentTypes[0] : getVersion().getContentType();
contentType = SoapUtils.setActionInContentType(contentType, soapAction);
mimeHeaders.setHeader(TransportConstants.HEADER_CONTENT_TYPE, contentType);
@@ -251,9 +249,7 @@ public class SaajSoapMessage extends AbstractSoapMessage {
}
try {
SOAPMessage message = getSaajMessage();
if (message.saveRequired()) {
message.saveChanges();
}
message.saveChanges();
if (outputStream instanceof TransportOutputStream) {
TransportOutputStream transportOutputStream = (TransportOutputStream) outputStream;
// some SAAJ implementations (Axis 1) do not have a Content-Type header by default
@@ -269,9 +265,7 @@ public class SaajSoapMessage extends AbstractSoapMessage {
else {
headers.addHeader(TransportConstants.HEADER_CONTENT_TYPE, SoapVersion.SOAP_12.getContentType());
}
if (message.saveRequired()) {
message.saveChanges();
}
message.saveChanges();
}
for (Iterator<?> iterator = headers.getAllHeaders(); iterator.hasNext();) {
MimeHeader mimeHeader = (MimeHeader) iterator.next();
@@ -287,39 +281,23 @@ public class SaajSoapMessage extends AbstractSoapMessage {
}
}
private int getSaajVersion() {
try {
return SaajUtils.getSaajVersion(saajMessage);
}
catch (SOAPException ex) {
throw new SaajSoapEnvelopeException("Could not access envelope: " + ex.getMessage(), ex);
}
}
@Override
@Override
public boolean isXopPackage() {
if (getSaajVersion() >= SaajUtils.SAAJ_13) {
SOAPPart saajPart = saajMessage.getSOAPPart();
String[] contentTypes = saajPart.getMimeHeader(TransportConstants.HEADER_CONTENT_TYPE);
for (String contentType : contentTypes) {
if (contentType.contains(CONTENT_TYPE_XOP)) {
return true;
}
}
}
return false;
SOAPPart saajPart = saajMessage.getSOAPPart();
String[] contentTypes = saajPart.getMimeHeader(TransportConstants.HEADER_CONTENT_TYPE);
for (String contentType : contentTypes) {
if (contentType.contains(CONTENT_TYPE_XOP)) {
return true;
}
}
return false;
}
@Override
public boolean convertToXopPackage() {
if (getSaajVersion() >= SaajUtils.SAAJ_13) {
convertMessageToXop();
convertPartToXop();
return true;
}
else {
return false;
}
convertMessageToXop();
convertPartToXop();
return true;
}
private void convertMessageToXop() {