You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by ve...@apache.org on 2008/08/30 22:51:42 UTC

svn commit: r690586 - in /synapse/trunk/java/modules/transports/src: main/java/org/apache/synapse/transport/vfs/ test/java/org/apache/synapse/transport/testkit/tests/async/ test/java/org/apache/synapse/transport/vfs/

Author: veithen
Date: Sat Aug 30 13:51:42 2008
New Revision: 690586

URL: http://svn.apache.org/viewvc?rev=690586&view=rev
Log:
SYNAPSE-423:
* Make sure that the VFS input stream is only closed after handleIncomingMessage has been executed. (Note: the previous version of VFSTransportListener worked with text/plain and application/octet-stream but not with (large) XML payloads)
* Added a regression test for large XML payloads.

Added:
    synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/testkit/tests/async/LargeSOAPAsyncMessageTestCase.java
Modified:
    synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSTransportListener.java
    synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/vfs/VFSTransportListenerTest.java

Modified: synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSTransportListener.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSTransportListener.java?rev=690586&r1=690585&r2=690586&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSTransportListener.java (original)
+++ synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSTransportListener.java Sat Aug 30 13:51:42 2008
@@ -435,6 +435,13 @@
                     return;
                 }
                 msgContext.setEnvelope(envelope);
+                
+                handleIncomingMessage(
+                    msgContext,
+                    transportHeaders,
+                    null, //* SOAP Action - not applicable *//
+                    contentType
+                );
             }
             finally {
                 try {
@@ -444,13 +451,6 @@
                 }
             }
 
-            handleIncomingMessage(
-                msgContext,
-                transportHeaders,
-                null, //* SOAP Action - not applicable *//
-                contentType
-            );
-
             if (log.isDebugEnabled()) {
                 log.debug("Processed file : " + file + " of Content-type : " + contentType);
             }

Added: synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/testkit/tests/async/LargeSOAPAsyncMessageTestCase.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/testkit/tests/async/LargeSOAPAsyncMessageTestCase.java?rev=690586&view=auto
==============================================================================
--- synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/testkit/tests/async/LargeSOAPAsyncMessageTestCase.java (added)
+++ synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/testkit/tests/async/LargeSOAPAsyncMessageTestCase.java Sat Aug 30 13:51:42 2008
@@ -0,0 +1,69 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.synapse.transport.testkit.tests.async;
+
+import java.util.Iterator;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.synapse.transport.testkit.client.AsyncTestClient;
+import org.apache.synapse.transport.testkit.listener.AsyncChannel;
+import org.apache.synapse.transport.testkit.message.XMLMessage;
+import org.apache.synapse.transport.testkit.name.Name;
+import org.apache.synapse.transport.testkit.server.AsyncEndpoint;
+
+@Name("AsyncSOAPLarge")
+// TODO: maybe we should use XMLUnit to construct these kind of tests
+public class LargeSOAPAsyncMessageTestCase extends AsyncMessageTestCase<XMLMessage,XMLMessage> {
+    public LargeSOAPAsyncMessageTestCase(AsyncChannel channel, AsyncTestClient<XMLMessage> client, AsyncEndpoint<XMLMessage> endpoint, Object... resources) {
+        super(channel, client, endpoint, XMLMessage.Type.SOAP11.getContentType(), "UTF-8", resources);
+    }
+    
+    @Override
+    protected XMLMessage prepareMessage() throws Exception {
+        OMFactory factory = OMAbstractFactory.getOMFactory();
+        OMElement root = factory.createOMElement(new QName("root"));
+        for (int i=0; i<1000; i++) {
+            OMElement child = factory.createOMElement(new QName("child"));
+            child.setText("text");
+            root.addChild(child);
+        }
+        return new XMLMessage(root, XMLMessage.Type.SOAP11);
+    }
+
+    @Override
+    protected void checkMessageData(XMLMessage message, XMLMessage messageData) throws Exception {
+        OMElement element = messageData.getPayload();
+        OMElement orgElement = message.getPayload();
+        assertEquals(orgElement.getQName(), element.getQName());
+        assertEquals(1000, countChildren(element));
+    }
+    
+    private static int countChildren(OMElement element) {
+        int count = 0;
+        for (Iterator<?> it = element.getChildElements(); it.hasNext(); count++) {
+            it.next();
+        }
+        return count;
+    }
+}

Modified: synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/vfs/VFSTransportListenerTest.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/vfs/VFSTransportListenerTest.java?rev=690586&r1=690585&r2=690586&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/vfs/VFSTransportListenerTest.java (original)
+++ synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/vfs/VFSTransportListenerTest.java Sat Aug 30 13:51:42 2008
@@ -38,6 +38,7 @@
 import org.apache.synapse.transport.testkit.message.XMLMessage;
 import org.apache.synapse.transport.testkit.server.axis2.AxisAsyncEndpoint;
 import org.apache.synapse.transport.testkit.server.axis2.ContentTypeServiceConfigurator;
+import org.apache.synapse.transport.testkit.tests.async.LargeSOAPAsyncMessageTestCase;
 
 /**
  * TransportListenerTestTemplate implementation for the VFS transport.
@@ -64,6 +65,8 @@
         }
         suite.addTextPlainTests(channel, adapt(vfsClient, MessageEncoder.STRING_TO_BYTE), adapt(asyncEndpoint, MessageDecoder.AXIS_TO_STRING), env, tdf, cfgtr);
         suite.addBinaryTest(channel, vfsClient, adapt(asyncEndpoint, MessageDecoder.AXIS_TO_BYTE), env, tdf, cfgtr);
+        // Regression test for SYNAPSE-423:
+        suite.addTest(new LargeSOAPAsyncMessageTestCase(channel, adapt(vfsClient, MessageEncoder.XML_TO_BYTE), adapt(new AxisAsyncEndpoint(), MessageDecoder.AXIS_TO_XML), env, tdf, cfgtr));
 //        suite.addTest(new MinConcurrencyTest(server, new AsyncChannel[] { new VFSFileChannel("req/in1"), new VFSFileChannel("req/in2") }, 1, true, env, tdf));
         return suite;
     }