package org.springframework.ws.soap.security;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.IOException;
import java.io.InputStream;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.MimeHeaders;
import javax.xml.soap.SOAPException;
import org.junit.Before;
import org.junit.Test;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.ws.context.DefaultMessageContext;
import org.springframework.ws.context.MessageContext;
import org.springframework.ws.soap.SoapMessage;
import org.springframework.ws.soap.saaj.SaajSoapMessage;
import org.springframework.ws.soap.saaj.SaajSoapMessageFactory;
public class SkipValidationWsSecurityInterceptorTest {
private MessageFactory messageFactory;
private AbstractWsSecurityInterceptor interceptor;
private SaajSoapMessageFactory soapMessageFactory;
@Before
public void setUp() throws Exception {
messageFactory = MessageFactory.newInstance();
soapMessageFactory = new SaajSoapMessageFactory(messageFactory);
interceptor = new AbstractWsSecurityInterceptor() {
@Override
protected void validateMessage(SoapMessage soapMessage,
MessageContext messageContext)
throws WsSecurityValidationException {
fail("validation must be skipped.");
}
@Override
protected void secureMessage(SoapMessage soapMessage,
MessageContext messageContext)
throws WsSecuritySecurementException {
}
@Override
protected void cleanUp() {
}
};
interceptor.setSkipValidationIfNoHeaderPresent(true);
}
@Test
public void testSkipValidationOnNoHeader() throws Exception {
doTestSkipValidation("noHeader-soap.xml");
}
@Test
public void testSkipValidationOnEmptyHeader() throws Exception {
doTestSkipValidation("emptyHeader-soap.xml");
}
@Test
public void testSkipValidationOnNoSecurityHeader() throws Exception {
doTestSkipValidation("noSecurityHeader-soap.xml");
}
private void doTestSkipValidation(String fileName) throws Exception {
SoapMessage message = loadSaajMessage(fileName);
MessageContext messageContext = new DefaultMessageContext(message,
soapMessageFactory);
assertTrue("handeRequest result must be true", interceptor
.handleRequest(messageContext, null));
}
private SaajSoapMessage loadSaajMessage(String fileName)
throws SOAPException, IOException {
MimeHeaders mimeHeaders = new MimeHeaders();
mimeHeaders.addHeader("Content-Type", "text/xml");
Resource resource = new ClassPathResource(fileName, getClass());
InputStream is = resource.getInputStream();
try {
assertTrue("Could not load SAAJ message [" + resource + "]",
resource.exists());
is = resource.getInputStream();
return new SaajSoapMessage(messageFactory.createMessage(
mimeHeaders, is));
} finally {
is.close();
}
}
}