You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by ga...@apache.org on 2008/04/10 07:15:38 UTC

svn commit: r646654 - in /webservices/axis2/branches/java/1_4/modules/jaxws: src/org/apache/axis2/jaxws/handler/SoapMessageContext.java test/org/apache/axis2/jaxws/handler/context/SOAPMessageContextTests.java

Author: gawor
Date: Wed Apr  9 22:15:37 2008
New Revision: 646654

URL: http://svn.apache.org/viewvc?rev=646654&view=rev
Log:
fix SOAPMessage caching in SoapMessageContext (AXIS2-3722)

Modified:
    webservices/axis2/branches/java/1_4/modules/jaxws/src/org/apache/axis2/jaxws/handler/SoapMessageContext.java
    webservices/axis2/branches/java/1_4/modules/jaxws/test/org/apache/axis2/jaxws/handler/context/SOAPMessageContextTests.java

Modified: webservices/axis2/branches/java/1_4/modules/jaxws/src/org/apache/axis2/jaxws/handler/SoapMessageContext.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/1_4/modules/jaxws/src/org/apache/axis2/jaxws/handler/SoapMessageContext.java?rev=646654&r1=646653&r2=646654&view=diff
==============================================================================
--- webservices/axis2/branches/java/1_4/modules/jaxws/src/org/apache/axis2/jaxws/handler/SoapMessageContext.java (original)
+++ webservices/axis2/branches/java/1_4/modules/jaxws/src/org/apache/axis2/jaxws/handler/SoapMessageContext.java Wed Apr  9 22:15:37 2008
@@ -54,6 +54,7 @@
     private static final Log log = LogFactory.getLog(SoapMessageContext.class);
     
     // cache the message object after transformation --- see getMessage and setMessage methods
+    Message cachedMessage = null;
     SOAPMessage cachedSoapMessage = null;
     
     public SoapMessageContext(MessageContext messageCtx) {
@@ -127,10 +128,11 @@
     }
 
     public SOAPMessage getMessage() {
-    	if (cachedSoapMessage == null) {
-    		Message msg = messageCtx.getMEPContext().getMessageObject();
-    		cachedSoapMessage = msg.getAsSOAPMessage();
-    	}
+        Message msg = messageCtx.getMEPContext().getMessageObject();
+        if (msg != cachedMessage) {
+            cachedMessage = msg;
+            cachedSoapMessage = msg.getAsSOAPMessage();
+        } 
         return cachedSoapMessage;
     }
 
@@ -166,6 +168,7 @@
             Message msg =
                     ((MessageFactory) FactoryRegistry.getFactory(MessageFactory.class)).createFrom(soapmessage);
             messageCtx.getMEPContext().setMessage(msg);
+            cachedMessage = msg;
             cachedSoapMessage = soapmessage;
         } catch (XMLStreamException e) {
             // TODO log it, and throw something?

Modified: webservices/axis2/branches/java/1_4/modules/jaxws/test/org/apache/axis2/jaxws/handler/context/SOAPMessageContextTests.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/1_4/modules/jaxws/test/org/apache/axis2/jaxws/handler/context/SOAPMessageContextTests.java?rev=646654&r1=646653&r2=646654&view=diff
==============================================================================
--- webservices/axis2/branches/java/1_4/modules/jaxws/test/org/apache/axis2/jaxws/handler/context/SOAPMessageContextTests.java (original)
+++ webservices/axis2/branches/java/1_4/modules/jaxws/test/org/apache/axis2/jaxws/handler/context/SOAPMessageContextTests.java Wed Apr  9 22:15:37 2008
@@ -39,16 +39,17 @@
 
 public class SOAPMessageContextTests extends TestCase {
 
-	private final String INPUT = "sample input";
+	private final String INPUT_1 = "sample input";
+	private final String INPUT_2 = "sample input two";
 	
-    private SoapMessageContext createSampleContext() throws Exception {
+    private Message createMessage(String input) throws Exception {
         MessageFactory factory = (MessageFactory) FactoryRegistry.getFactory(MessageFactory.class);
         Message msg = factory.create(Protocol.soap11);
         
         // Create a jaxb object
         ObjectFactory objFactory = new ObjectFactory();
         EchoString echo = objFactory.createEchoString();
-        echo.setInput(INPUT);
+        echo.setInput(input);
         
         // Create the necessary JAXBContext
         JAXBContext jbc = JAXBContext.newInstance("test");
@@ -60,12 +61,16 @@
         
         msg.setBodyBlock(block);
         
+        return msg;
+    }
+    
+    private SoapMessageContext createSampleContext() throws Exception {
+        Message msg = createMessage(INPUT_1);
         MessageContext mc = new MessageContext();
         mc.setMEPContext(new MEPContext(mc));
         mc.setMessage(msg);
         
         return MessageContextFactory.createSoapMessageContext(mc);
-
     }
     
     public void testGetAsSoapMessageObjectID() {
@@ -78,5 +83,31 @@
     	} catch (Exception e) {
     		assertNull("should not get an exception in this test", e);
     	}
+    }
+    
+    public void testSoapMessageCaching() throws Exception {
+        Message msg1 = createMessage(INPUT_1);
+        Message msg2 = createMessage(INPUT_2);
+        
+        MessageContext mc = new MessageContext();
+        mc.setMessage(msg1);
+        SoapMessageContext soapCtx = MessageContextFactory.createSoapMessageContext(mc);
+        
+        SOAPMessage m1 = soapCtx.getMessage();
+        SOAPMessage m2 = soapCtx.getMessage();
+        
+        assertTrue("retrieval of message from SoapMessageContext twice in a row should result in same object", m1 == m2);
+        
+        // let's change underlying message as 
+        // HandlerChainProcessor.convertToFaultMessage() does
+        mc.setMessage(msg2);
+        
+        SOAPMessage m3 = soapCtx.getMessage();
+        SOAPMessage m4 = soapCtx.getMessage();
+        
+        assertTrue("retrieval of message from SoapMessageContext twice in a row should result in same object", m3 == m4);
+        
+        // Soap messages from before and after must be different!
+        assertTrue("retrieval of message from SoapMessageContext after message has changed in the underlying context", m1 != m3);  
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org