You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2006/10/28 03:18:35 UTC

svn commit: r468606 - in /incubator/servicemix/trunk/servicemix-ftp/src: main/java/org/apache/servicemix/ftp/ test/java/org/apache/servicemix/ftp/ test/resources/

Author: gnodet
Date: Fri Oct 27 18:18:35 2006
New Revision: 468606

URL: http://svn.apache.org/viewvc?view=rev&rev=468606
Log:
Handle URI for FTP endpoints / FTP resolved endpoints

Modified:
    incubator/servicemix/trunk/servicemix-ftp/src/main/java/org/apache/servicemix/ftp/FtpComponent.java
    incubator/servicemix/trunk/servicemix-ftp/src/main/java/org/apache/servicemix/ftp/FtpEndpoint.java
    incubator/servicemix/trunk/servicemix-ftp/src/test/java/org/apache/servicemix/ftp/DynamicEndpointTest.java
    incubator/servicemix/trunk/servicemix-ftp/src/test/java/org/apache/servicemix/ftp/SpringComponentTest.java
    incubator/servicemix/trunk/servicemix-ftp/src/test/resources/spring.xml

Modified: incubator/servicemix/trunk/servicemix-ftp/src/main/java/org/apache/servicemix/ftp/FtpComponent.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-ftp/src/main/java/org/apache/servicemix/ftp/FtpComponent.java?view=diff&rev=468606&r1=468605&r2=468606
==============================================================================
--- incubator/servicemix/trunk/servicemix-ftp/src/main/java/org/apache/servicemix/ftp/FtpComponent.java (original)
+++ incubator/servicemix/trunk/servicemix-ftp/src/main/java/org/apache/servicemix/ftp/FtpComponent.java Fri Oct 27 18:18:35 2006
@@ -18,11 +18,14 @@
 
 import java.net.URI;
 import java.util.List;
+import java.util.Map;
 
 import javax.jbi.servicedesc.ServiceEndpoint;
 
 import org.apache.servicemix.common.DefaultComponent;
 import org.apache.servicemix.common.Endpoint;
+import org.apache.servicemix.jbi.util.IntrospectionSupport;
+import org.apache.servicemix.jbi.util.URISupport;
 
 /**
  * An FTP based component
@@ -52,13 +55,11 @@
 
     protected Endpoint getResolvedEPR(ServiceEndpoint ep) throws Exception {
         FtpEndpoint ftpEndpoint = new FtpEndpoint(this, ep);
-
-        // TODO
-        //ftpEp.setRole(MessageExchange.Role.PROVIDER);
-
         URI uri = new URI(ep.getEndpointName());
-
+        Map map = URISupport.parseQuery(uri.getQuery());
+        IntrospectionSupport.setProperties(ftpEndpoint, map);
         ftpEndpoint.setUri(uri);
+        ftpEndpoint.validate();
         ftpEndpoint.activate();
         return ftpEndpoint;
     }

Modified: incubator/servicemix/trunk/servicemix-ftp/src/main/java/org/apache/servicemix/ftp/FtpEndpoint.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-ftp/src/main/java/org/apache/servicemix/ftp/FtpEndpoint.java?view=diff&rev=468606&r1=468605&r2=468606
==============================================================================
--- incubator/servicemix/trunk/servicemix-ftp/src/main/java/org/apache/servicemix/ftp/FtpEndpoint.java (original)
+++ incubator/servicemix/trunk/servicemix-ftp/src/main/java/org/apache/servicemix/ftp/FtpEndpoint.java Fri Oct 27 18:18:35 2006
@@ -22,6 +22,7 @@
 import org.apache.servicemix.components.util.DefaultFileMarshaler;
 import org.apache.servicemix.components.util.FileMarshaler;
 
+import javax.jbi.management.DeploymentException;
 import javax.jbi.messaging.MessageExchange;
 import javax.jbi.messaging.NormalizedMessage;
 import javax.jbi.servicedesc.ServiceEndpoint;
@@ -41,6 +42,7 @@
     private FileMarshaler marshaler = new DefaultFileMarshaler();
     private String uniqueFileName = "ServiceMix";
     private boolean overwrite = false;
+    private URI uri;
 
     public FtpEndpoint() {
     }
@@ -48,12 +50,22 @@
     public FtpEndpoint(FtpComponent component, ServiceEndpoint endpoint) {
         super(component, endpoint);
     }
+    
+    public void validate() throws DeploymentException {
+        super.validate();
+        if (uri == null && (getClientPool() == null || getClientPool().getHost() == null)) {
+            throw new DeploymentException("Property uri or clientPool.host must be configured");
+        }
+        if (uri != null && getClientPool() != null && getClientPool().getHost() != null) {
+            throw new DeploymentException("Properties uri and clientPool.host can not be configured at the same time");
+        }
+    }
 
     /**
      * Configures the endpoint from a URI
      */
     public void setUri(URI uri) {
-        // TODO
+        this.uri = uri;
     }
 
 
@@ -62,6 +74,17 @@
         if (clientPool == null) {
             clientPool = createClientPool();
         }
+        if (uri != null) {
+            clientPool.setHost(uri.getHost());
+            clientPool.setPort(uri.getPort());
+            if (uri.getUserInfo() != null) {
+                String[] infos = uri.getUserInfo().split(":");
+                clientPool.setUsername(infos[0]);
+                if (infos.length > 1) {
+                    clientPool.setPassword(infos[1]);
+                }
+            }
+        }
     }
 
     // Properties
@@ -111,6 +134,10 @@
         OutputStream out = null;
         try {
             client = (FTPClient) getClientPool().borrowClient();
+            // Change to the directory specified by the URI path if any
+            if (uri != null && uri.getPath() != null) {
+                client.changeWorkingDirectory(uri.getPath());
+            }
 
             String name = marshaler.getOutputName(exchange, message);
             if (name == null) {
@@ -150,9 +177,10 @@
         }
     }
 
-    protected FTPClientPool createClientPool() {
-        FTPClientPool answer = new FTPClientPool();
-        return answer;
+    protected FTPClientPool createClientPool() throws Exception {
+        FTPClientPool pool = new FTPClientPool();
+        pool.afterPropertiesSet();
+        return pool;
     }
 
     protected void returnClient(SocketClient client) {

Modified: incubator/servicemix/trunk/servicemix-ftp/src/test/java/org/apache/servicemix/ftp/DynamicEndpointTest.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-ftp/src/test/java/org/apache/servicemix/ftp/DynamicEndpointTest.java?view=diff&rev=468606&r1=468605&r2=468606
==============================================================================
--- incubator/servicemix/trunk/servicemix-ftp/src/test/java/org/apache/servicemix/ftp/DynamicEndpointTest.java (original)
+++ incubator/servicemix/trunk/servicemix-ftp/src/test/java/org/apache/servicemix/ftp/DynamicEndpointTest.java Fri Oct 27 18:18:35 2006
@@ -16,29 +16,31 @@
  */
 package org.apache.servicemix.ftp;
 
+import javax.jbi.messaging.ExchangeStatus;
+import javax.jbi.messaging.InOnly;
+import javax.jbi.messaging.MessageExchange;
+import javax.jbi.servicedesc.ServiceEndpoint;
+
 import org.apache.servicemix.client.DefaultServiceMixClient;
 import org.apache.servicemix.client.ServiceMixClient;
+import org.apache.servicemix.components.util.DefaultFileMarshaler;
 import org.apache.servicemix.jbi.jaxp.SourceTransformer;
 import org.apache.servicemix.jbi.jaxp.StringSource;
 import org.apache.servicemix.tck.SpringTestSupport;
 import org.apache.xbean.spring.context.ClassPathXmlApplicationContext;
 import org.springframework.context.support.AbstractXmlApplicationContext;
 
-import javax.jbi.messaging.ExchangeStatus;
-import javax.jbi.messaging.InOnly;
-import javax.jbi.messaging.MessageExchange;
-import javax.jbi.servicedesc.ServiceEndpoint;
-
 public class DynamicEndpointTest extends SpringTestSupport {
 
     public void testSendingToDynamicEndpoint() throws Exception {
         ServiceMixClient client = new DefaultServiceMixClient(jbi);
 
-        ServiceEndpoint se = client.resolveEndpointReference("ftp://host/path");
+        ServiceEndpoint se = client.resolveEndpointReference("ftp://servicemix:rocks@localhost/smx/test");
         assertNotNull("We should find a service endpoint!", se);
 
         InOnly exchange = client.createInOnlyExchange();
         exchange.setEndpoint(se);
+        exchange.getInMessage().setProperty(DefaultFileMarshaler.FILE_NAME_PROPERTY, "test.xml");
         exchange.getInMessage().setContent(new StringSource("<hello>world</hello>"));
         client.sendSync(exchange);
 

Modified: incubator/servicemix/trunk/servicemix-ftp/src/test/java/org/apache/servicemix/ftp/SpringComponentTest.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-ftp/src/test/java/org/apache/servicemix/ftp/SpringComponentTest.java?view=diff&rev=468606&r1=468605&r2=468606
==============================================================================
--- incubator/servicemix/trunk/servicemix-ftp/src/test/java/org/apache/servicemix/ftp/SpringComponentTest.java (original)
+++ incubator/servicemix/trunk/servicemix-ftp/src/test/java/org/apache/servicemix/ftp/SpringComponentTest.java Fri Oct 27 18:18:35 2006
@@ -18,6 +18,7 @@
 
 import org.apache.servicemix.tck.SpringTestSupport;
 import org.apache.servicemix.client.DefaultServiceMixClient;
+import org.apache.servicemix.components.util.DefaultFileMarshaler;
 import org.apache.servicemix.jbi.jaxp.StringSource;
 import org.apache.servicemix.jbi.jaxp.SourceTransformer;
 import org.apache.xbean.spring.context.ClassPathXmlApplicationContext;
@@ -37,7 +38,7 @@
         me.setService(new QName("urn:test", "service"));
         NormalizedMessage message = me.getInMessage();
 
-        message.setProperty("name", "cheese");
+        message.setProperty(DefaultFileMarshaler.FILE_NAME_PROPERTY, "test2.xml");
         message.setContent(new StringSource("<hello>world</hello>"));
 
         client.sendSync(me);

Modified: incubator/servicemix/trunk/servicemix-ftp/src/test/resources/spring.xml
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-ftp/src/test/resources/spring.xml?view=diff&rev=468606&r1=468605&r2=468606
==============================================================================
--- incubator/servicemix/trunk/servicemix-ftp/src/test/resources/spring.xml (original)
+++ incubator/servicemix/trunk/servicemix-ftp/src/test/resources/spring.xml Fri Oct 27 18:18:35 2006
@@ -29,7 +29,7 @@
       	<sm:component>
             <ftp:component>
             	<ftp:endpoints>
-            		<ftp:endpoint service="test:service" endpoint="endpoint" uri="ftp://host/foo/bar"/>
+            		<ftp:endpoint service="test:service" endpoint="endpoint" uri="ftp://servicemix:rocks@localhost/smx/test"/>
             	</ftp:endpoints>
             </ftp:component>
         </sm:component>