Index: security/src/test/java/org/springframework/ws/soap/security/wss4j/Wss4jMessageInterceptorHeaderTestCase.java =================================================================== --- security/src/test/java/org/springframework/ws/soap/security/wss4j/Wss4jMessageInterceptorHeaderTestCase.java (revision 1387) +++ security/src/test/java/org/springframework/ws/soap/security/wss4j/Wss4jMessageInterceptorHeaderTestCase.java Wed May 13 12:27:37 GMT+01:00 2009 @@ -16,16 +16,19 @@ package org.springframework.ws.soap.security.wss4j; -import java.util.Iterator; -import java.util.Properties; +import java.util.*; import javax.xml.namespace.QName; import org.springframework.ws.context.DefaultMessageContext; import org.springframework.ws.context.MessageContext; import org.springframework.ws.soap.SoapHeaderElement; import org.springframework.ws.soap.SoapMessage; +import org.springframework.ws.soap.SoapHeader; import org.springframework.ws.soap.security.WsSecurityValidationException; import org.springframework.ws.soap.security.wss4j.callback.SimplePasswordValidationCallbackHandler; +import org.springframework.ws.soap.security.wss4j.support.CryptoFactoryBean; +import org.springframework.util.CollectionUtils; +import org.apache.ws.security.components.crypto.Crypto; public abstract class Wss4jMessageInterceptorHeaderTestCase extends Wss4jTestCase { @@ -79,4 +82,32 @@ // expected } } + + public void testPreserveCustomHeaders() throws Exception { + interceptor.setSecurementActions("UsernameToken"); + interceptor.setSecurementUsername("Bert"); + interceptor.setSecurementPassword("Ernie"); + + SoapMessage message = loadMessage("customHeader-soap.xml"); + MessageContext messageContext = new DefaultMessageContext(message, getMessageFactory()); + interceptor.secureMessage(message, messageContext); + QName beforeHeaderName = new QName("http://test", "value"); + QName afterHeaderName = new QName("http://test", "value2"); + SoapHeaderElement element = message.getSoapHeader().addHeaderElement(afterHeaderName); + element.setText("test2"); + SoapHeader soapHeader = message.getSoapHeader(); + Iterator iterator = soapHeader.examineAllHeaderElements(); + boolean foundBeforeHeader = false, foundAfterHeader = false; + while(iterator.hasNext()){ + SoapHeaderElement e = (SoapHeaderElement) iterator.next(); + if(e.getName().equals(beforeHeaderName)){ + foundBeforeHeader = true; -} + } + if(e.getName().equals(afterHeaderName)){ + foundAfterHeader = true; + } + } + assertTrue("before header not found.", foundBeforeHeader); + assertTrue("after header not found.", foundAfterHeader); + } +} Index: security/src/test/resources/org/springframework/ws/soap/security/wss4j/customHeader-soap.xml =================================================================== --- security/src/test/resources/org/springframework/ws/soap/security/wss4j/customHeader-soap.xml Mon Mar 23 17:48:59 GMT+01:00 2009 +++ security/src/test/resources/org/springframework/ws/soap/security/wss4j/customHeader-soap.xml Mon Mar 23 17:48:59 GMT+01:00 2009 @@ -0,0 +1,9 @@ + + + + test + + + QQQ + + \ No newline at end of file