From dc13af5413dd5bee831456dee7996f9fba13b6b3 Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Tue, 10 Nov 2009 10:29:16 +0000 Subject: [PATCH] SWS-560 - IllegalStateException: Could not find SAAJ on the classpath after upgrading from 1.5.7 to 1.5.8 --- .../ws/soap/saaj/support/SaajUtils.java | 9 ++++--- .../ws/soap/saaj/support/SaajUtilsTest.java | 25 +++++++++++++++++++ .../invalidNamespaceReferenceSoapMessage.xml | 7 ++++++ 3 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 core/src/test/resources/org/springframework/ws/soap/saaj/support/invalidNamespaceReferenceSoapMessage.xml diff --git a/core/src/main/java/org/springframework/ws/soap/saaj/support/SaajUtils.java b/core/src/main/java/org/springframework/ws/soap/saaj/support/SaajUtils.java index 921becda..513bc187 100644 --- a/core/src/main/java/org/springframework/ws/soap/saaj/support/SaajUtils.java +++ b/core/src/main/java/org/springframework/ws/soap/saaj/support/SaajUtils.java @@ -42,6 +42,7 @@ import org.springframework.core.io.Resource; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; import org.springframework.util.StringUtils; +import org.springframework.ws.soap.saaj.SaajSoapMessageException; import org.springframework.ws.transport.TransportConstants; import org.springframework.xml.namespace.QNameUtils; @@ -153,12 +154,14 @@ public abstract class SaajUtils { */ public static int getSaajVersion(SOAPMessage soapMessage) { Assert.notNull(soapMessage, "'soapMessage' must not be null"); + SOAPEnvelope soapEnvelope; try { - return getSaajVersion(soapMessage.getSOAPPart().getEnvelope()); + soapEnvelope = soapMessage.getSOAPPart().getEnvelope(); } - catch (SOAPException e) { - return SAAJ_11; + catch (SOAPException ex) { + throw new SaajSoapMessageException("Could not access envelope: " + ex.getMessage(), ex); } + return getSaajVersion(soapEnvelope); } /** diff --git a/core/src/test/java/org/springframework/ws/soap/saaj/support/SaajUtilsTest.java b/core/src/test/java/org/springframework/ws/soap/saaj/support/SaajUtilsTest.java index 5c119ea6..10f16cd3 100644 --- a/core/src/test/java/org/springframework/ws/soap/saaj/support/SaajUtilsTest.java +++ b/core/src/test/java/org/springframework/ws/soap/saaj/support/SaajUtilsTest.java @@ -16,10 +16,13 @@ package org.springframework.ws.soap.saaj.support; +import java.io.InputStream; + import javax.xml.namespace.QName; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.soap.MessageFactory; +import javax.xml.soap.MimeHeaders; import javax.xml.soap.Name; import javax.xml.soap.SOAPEnvelope; import javax.xml.soap.SOAPMessage; @@ -28,7 +31,9 @@ import org.custommonkey.xmlunit.XMLTestCase; import org.w3c.dom.Document; import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; import org.springframework.util.StringUtils; +import org.springframework.ws.soap.saaj.SaajSoapMessageException; public class SaajUtilsTest extends XMLTestCase { @@ -115,5 +120,25 @@ public class SaajUtilsTest extends XMLTestCase { public void testGetSaajVersion() throws Exception { assertEquals("Invalid SAAJ version", SaajUtils.SAAJ_13, SaajUtils.getSaajVersion()); } + + public void testGetSaajVersionInvalidEnvelope() throws Exception { + Resource resource = new ClassPathResource("invalidNamespaceReferenceSoapMessage.xml", getClass()); + InputStream in = null; + try { + in = resource.getInputStream(); + MimeHeaders headers = new MimeHeaders(); + SOAPMessage soapMessage = messageFactory.createMessage(headers, in); + SaajUtils.getSaajVersion(soapMessage); + fail("Should have thrown SaajSoapMessageException as message envelope is invalid and cannot be accessed."); + } + catch (SaajSoapMessageException e) { + // expected + } + finally { + if (in != null) { + in.close(); + } + } + } } \ No newline at end of file diff --git a/core/src/test/resources/org/springframework/ws/soap/saaj/support/invalidNamespaceReferenceSoapMessage.xml b/core/src/test/resources/org/springframework/ws/soap/saaj/support/invalidNamespaceReferenceSoapMessage.xml new file mode 100644 index 00000000..a165c3f4 --- /dev/null +++ b/core/src/test/resources/org/springframework/ws/soap/saaj/support/invalidNamespaceReferenceSoapMessage.xml @@ -0,0 +1,7 @@ + + + + + +