1   package org.springframework.ws.soap.security;
2   
3   import static org.junit.Assert.assertTrue;
4   import static org.junit.Assert.fail;
5   
6   import java.io.IOException;
7   import java.io.InputStream;
8   
9   import javax.xml.soap.MessageFactory;
10  import javax.xml.soap.MimeHeaders;
11  import javax.xml.soap.SOAPException;
12  
13  import org.junit.Before;
14  import org.junit.Test;
15  import org.springframework.core.io.ClassPathResource;
16  import org.springframework.core.io.Resource;
17  import org.springframework.ws.context.DefaultMessageContext;
18  import org.springframework.ws.context.MessageContext;
19  import org.springframework.ws.soap.SoapMessage;
20  import org.springframework.ws.soap.saaj.SaajSoapMessage;
21  import org.springframework.ws.soap.saaj.SaajSoapMessageFactory;
22  
23  public class SkipValidationWsSecurityInterceptorTest {
24  
25  	private MessageFactory messageFactory;
26  	private AbstractWsSecurityInterceptor interceptor;
27  	private SaajSoapMessageFactory soapMessageFactory;
28  
29  	@Before
30  	public void setUp() throws Exception {
31  		messageFactory = MessageFactory.newInstance();
32  		soapMessageFactory = new SaajSoapMessageFactory(messageFactory);
33  		interceptor = new AbstractWsSecurityInterceptor() {
34  
35  			@Override
36  			protected void validateMessage(SoapMessage soapMessage,
37  					MessageContext messageContext)
38  					throws WsSecurityValidationException {
39  				fail("validation must be skipped.");
40  			}
41  
42  			@Override
43  			protected void secureMessage(SoapMessage soapMessage,
44  					MessageContext messageContext)
45  					throws WsSecuritySecurementException {
46  			}
47  
48  			@Override
49  			protected void cleanUp() {
50  			}
51  		};
52  		interceptor.setSkipValidationIfNoHeaderPresent(true);
53  	}
54  
55  	@Test
56  	public void testSkipValidationOnNoHeader() throws Exception {
57  		doTestSkipValidation("noHeader-soap.xml");
58  	}
59  	
60  	@Test
61  	public void testSkipValidationOnEmptyHeader() throws Exception {
62  		doTestSkipValidation("emptyHeader-soap.xml");
63  	}
64  
65  	@Test
66  	public void testSkipValidationOnNoSecurityHeader() throws Exception {
67  		doTestSkipValidation("noSecurityHeader-soap.xml");
68  	}
69  	
70  
71  	private void doTestSkipValidation(String fileName) throws Exception {
72  		SoapMessage message = loadSaajMessage(fileName);
73  		MessageContext messageContext = new DefaultMessageContext(message,
74  				soapMessageFactory);
75  		assertTrue("handeRequest result must be true", interceptor
76  				.handleRequest(messageContext, null));
77  		
78  	}
79  	
80  	private SaajSoapMessage loadSaajMessage(String fileName)
81  			throws SOAPException, IOException {
82  		MimeHeaders mimeHeaders = new MimeHeaders();
83  		mimeHeaders.addHeader("Content-Type", "text/xml");
84  		Resource resource = new ClassPathResource(fileName, getClass());
85  		InputStream is = resource.getInputStream();
86  		try {
87  			assertTrue("Could not load SAAJ message [" + resource + "]",
88  					resource.exists());
89  			is = resource.getInputStream();
90  			return new SaajSoapMessage(messageFactory.createMessage(
91  					mimeHeaders, is));
92  		} finally {
93  			is.close();
94  		}
95  	}
96  }