Skip to content

Commit 43eb72f

Browse files
committed
SWS-345
1 parent fe45fe1 commit 43eb72f

File tree

3 files changed

+62
-3
lines changed

3 files changed

+62
-3
lines changed

security/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@
136136
<dependency>
137137
<groupId>org.acegisecurity</groupId>
138138
<artifactId>acegi-security</artifactId>
139+
<optional>true</optional>
139140
</dependency>
140141
<!-- Spring Security dependencies -->
141142
<dependency>

security/src/main/java/org/springframework/ws/soap/security/wss4j/Wss4jSecurityInterceptor.java

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import javax.security.auth.callback.Callback;
2424
import javax.security.auth.callback.CallbackHandler;
2525
import javax.security.auth.callback.UnsupportedCallbackException;
26+
import javax.xml.soap.SOAPException;
2627

2728
import org.apache.axiom.soap.SOAPEnvelope;
2829
import org.apache.axiom.soap.SOAPFactory;
@@ -48,6 +49,7 @@
4849
import org.springframework.ws.soap.axiom.AxiomSoapMessage;
4950
import org.springframework.ws.soap.axiom.support.AxiomUtils;
5051
import org.springframework.ws.soap.saaj.SaajSoapMessage;
52+
import org.springframework.ws.soap.saaj.SaajSoapMessageException;
5153
import org.springframework.ws.soap.security.AbstractWsSecurityInterceptor;
5254
import org.springframework.ws.soap.security.WsSecuritySecurementException;
5355
import org.springframework.ws.soap.security.WsSecurityValidationException;
@@ -590,8 +592,14 @@ private void processPrincipal(Vector results) {
590592
/** Converts the given {@link SoapMessage} into a {@link Document}. */
591593
private Document toDocument(SoapMessage soapMessage) {
592594
if (soapMessage instanceof SaajSoapMessage) {
593-
SaajSoapMessage saajMessage = (SaajSoapMessage) soapMessage;
594-
return saajMessage.getSaajMessage().getSOAPPart();
595+
javax.xml.soap.SOAPMessage saajMessage = ((SaajSoapMessage) soapMessage).getSaajMessage();
596+
try {
597+
saajMessage.saveChanges();
598+
}
599+
catch (SOAPException ex) {
600+
throw new SaajSoapMessageException("Could not save changes", ex);
601+
}
602+
return saajMessage.getSOAPPart();
595603
}
596604
else if (soapMessage instanceof AxiomSoapMessage) {
597605
AxiomSoapMessage axiomMessage = (AxiomSoapMessage) soapMessage;
@@ -608,7 +616,16 @@ else if (soapMessage instanceof AxiomSoapMessage) {
608616
* for a {@link SaajSoapMessage}.
609617
*/
610618
private void replaceMessage(SoapMessage soapMessage, Document envelope) {
611-
if (soapMessage instanceof AxiomSoapMessage) {
619+
if (soapMessage instanceof SaajSoapMessage) {
620+
javax.xml.soap.SOAPMessage saajMessage = ((SaajSoapMessage) soapMessage).getSaajMessage();
621+
try {
622+
saajMessage.saveChanges();
623+
}
624+
catch (SOAPException ex) {
625+
throw new SaajSoapMessageException("Could not save changes", ex);
626+
}
627+
}
628+
else if (soapMessage instanceof AxiomSoapMessage) {
612629
// construct a new Axiom message with the processed envelope
613630
AxiomSoapMessage axiomMessage = (AxiomSoapMessage) soapMessage;
614631
SOAPEnvelope envelopeFromDOMDocument = AxiomUtils.toEnvelope(envelope);
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,46 @@
11
package org.springframework.ws.soap.security.wss4j;
22

3+
import java.io.ByteArrayInputStream;
4+
import java.io.ByteArrayOutputStream;
5+
import javax.xml.namespace.QName;
6+
import javax.xml.soap.MessageFactory;
7+
import javax.xml.soap.MimeHeaders;
8+
import javax.xml.soap.SOAPMessage;
9+
10+
import org.springframework.ws.context.DefaultMessageContext;
11+
import org.springframework.ws.context.MessageContext;
12+
import org.springframework.ws.soap.SoapMessage;
13+
import org.springframework.ws.soap.saaj.SaajSoapMessage;
14+
import org.springframework.ws.soap.saaj.SaajSoapMessageFactory;
15+
316
public class SaajWss4jMessageInterceptorSignTest extends Wss4jMessageInterceptorSignTestCase {
417

18+
public void testSignAndValidate() throws Exception {
19+
MessageFactory messageFactory = MessageFactory.newInstance();
20+
interceptor.setSecurementActions("Signature");
21+
interceptor.setEnableSignatureConfirmation(false);
22+
interceptor.setSecurementPassword("123456");
23+
interceptor.setSecurementUsername("rsaKey");
24+
SOAPMessage saajMessage = messageFactory.createMessage();
25+
saajMessage.getSOAPBody()
26+
.addBodyElement(new QName("http://fabrikam123.com/payloads", "StockSymbol", "tru")).addTextNode("QQQ");
27+
SoapMessage message = new SaajSoapMessage(saajMessage);
28+
MessageContext messageContext = new DefaultMessageContext(message, new SaajSoapMessageFactory(messageFactory));
29+
30+
interceptor.secureMessage(message, messageContext);
31+
32+
ByteArrayOutputStream bos = new ByteArrayOutputStream();
33+
message.writeTo(bos);
34+
35+
MimeHeaders mimeHeaders = new MimeHeaders();
36+
mimeHeaders.addHeader("Content-Type", "text/xml");
37+
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
38+
39+
SOAPMessage signed = messageFactory.createMessage(mimeHeaders, bis);
40+
message = new SaajSoapMessage(signed);
41+
messageContext = new DefaultMessageContext(message, new SaajSoapMessageFactory(messageFactory));
42+
43+
interceptor.validateMessage(message, messageContext);
44+
}
45+
546
}

0 commit comments

Comments
 (0)