diff --git a/core/src/main/java/org/springframework/ws/soap/server/SoapMessageDispatcher.java b/core/src/main/java/org/springframework/ws/soap/server/SoapMessageDispatcher.java index b21fc192..13ddaa3a 100644 --- a/core/src/main/java/org/springframework/ws/soap/server/SoapMessageDispatcher.java +++ b/core/src/main/java/org/springframework/ws/soap/server/SoapMessageDispatcher.java @@ -147,6 +147,9 @@ public class SoapMessageDispatcher extends MessageDispatcher { */ private boolean headerUnderstood(EndpointInvocationChain mappedEndpoint, SoapHeaderElement headerElement) { EndpointInterceptor[] interceptors = mappedEndpoint.getInterceptors(); + if (ObjectUtils.isEmpty(interceptors)) { + return false; + } for (int i = 0; i < interceptors.length; i++) { EndpointInterceptor interceptor = interceptors[i]; if (interceptor instanceof SoapEndpointInterceptor && diff --git a/core/src/test/java/org/springframework/ws/soap/server/SoapMessageDispatcherTest.java b/core/src/test/java/org/springframework/ws/soap/server/SoapMessageDispatcherTest.java index d2e3f864..a1e6783a 100644 --- a/core/src/test/java/org/springframework/ws/soap/server/SoapMessageDispatcherTest.java +++ b/core/src/test/java/org/springframework/ws/soap/server/SoapMessageDispatcherTest.java @@ -24,8 +24,6 @@ import javax.xml.soap.SOAPConstants; import javax.xml.soap.SOAPHeaderElement; import javax.xml.soap.SOAPMessage; -import junit.framework.TestCase; -import org.easymock.MockControl; import org.springframework.ws.context.DefaultMessageContext; import org.springframework.ws.context.MessageContext; import org.springframework.ws.soap.SoapBody; @@ -38,6 +36,9 @@ import org.springframework.ws.soap.saaj.SaajSoapMessageFactory; import org.springframework.ws.soap.soap11.Soap11Fault; import org.springframework.ws.soap.soap12.Soap12Fault; +import junit.framework.TestCase; +import org.easymock.MockControl; + public class SoapMessageDispatcherTest extends TestCase { private SoapMessageDispatcher dispatcher; @@ -225,4 +226,23 @@ public class SoapMessageDispatcherTest extends TestCase { assertTrue("Invalid result", result); interceptorControl.verify(); } + + public void testProcessMustUnderstandHeadersNoInterceptors() throws Exception { + MessageFactory messageFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL); + SOAPMessage request = messageFactory.createMessage(); + SOAPHeaderElement header = + request.getSOAPHeader().addHeaderElement(new QName("http://www.springframework.org", "Header")); + header.setActor(SOAPConstants.URI_SOAP_ACTOR_NEXT); + header.setMustUnderstand(true); + SoapMessageFactory factory = new SaajSoapMessageFactory(messageFactory); + MessageContext context = new DefaultMessageContext(new SaajSoapMessage(request), factory); + interceptorControl.replay(); + + SoapEndpointInvocationChain chain = new SoapEndpointInvocationChain(new Object(), null); + + boolean result = dispatcher.handleRequest(chain, context); + assertFalse("Header understood", result); + interceptorControl.verify(); + } + } \ No newline at end of file