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