You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2009/02/25 08:50:45 UTC

svn commit: r747697 - in /camel/branches/camel-1.x: ./ camel-core/src/main/java/org/apache/camel/impl/ components/camel-mina/ components/camel-mina/src/main/java/org/apache/camel/component/mina/ components/camel-mina/src/test/java/org/apache/camel/comp...

Author: ningjiang
Date: Wed Feb 25 07:50:44 2009
New Revision: 747697

URL: http://svn.apache.org/viewvc?rev=747697&view=rev
Log:
Merged revisions 736980 via svnmerge from 
https://svn.apache.org/repos/asf/camel/trunk

........
  r736980 | davsclaus | 2009-01-23 18:04:36 +0800 (Fri, 23 Jan 2009) | 1 line
  
  CAMEL-505: Mina endpoints can now be configued using spring bean style.
........

Added:
    camel/branches/camel-1.x/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConfiguration.java
      - copied unchanged from r736980, camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConfiguration.java
    camel/branches/camel-1.x/components/camel-mina/src/test/java/org/apache/camel/component/mina/SpringMinaEndpointTest.java
      - copied unchanged from r736980, camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/SpringMinaEndpointTest.java
    camel/branches/camel-1.x/components/camel-mina/src/test/resources/org/
      - copied from r736980, camel/trunk/components/camel-mina/src/test/resources/org/
    camel/branches/camel-1.x/components/camel-mina/src/test/resources/org/apache/
      - copied from r736980, camel/trunk/components/camel-mina/src/test/resources/org/apache/
    camel/branches/camel-1.x/components/camel-mina/src/test/resources/org/apache/camel/
      - copied from r736980, camel/trunk/components/camel-mina/src/test/resources/org/apache/camel/
    camel/branches/camel-1.x/components/camel-mina/src/test/resources/org/apache/camel/component/
      - copied from r736980, camel/trunk/components/camel-mina/src/test/resources/org/apache/camel/component/
    camel/branches/camel-1.x/components/camel-mina/src/test/resources/org/apache/camel/component/mina/
      - copied from r736980, camel/trunk/components/camel-mina/src/test/resources/org/apache/camel/component/mina/
    camel/branches/camel-1.x/components/camel-mina/src/test/resources/org/apache/camel/component/mina/SpringMinaEndpointTest-context.xml
      - copied unchanged from r736980, camel/trunk/components/camel-mina/src/test/resources/org/apache/camel/component/mina/SpringMinaEndpointTest-context.xml
Modified:
    camel/branches/camel-1.x/   (props changed)
    camel/branches/camel-1.x/camel-core/src/main/java/org/apache/camel/impl/DefaultEndpoint.java
    camel/branches/camel-1.x/components/camel-mina/pom.xml
    camel/branches/camel-1.x/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaComponent.java
    camel/branches/camel-1.x/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java
    camel/branches/camel-1.x/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaEndpoint.java
    camel/branches/camel-1.x/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaPayloadHelper.java
    camel/branches/camel-1.x/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaProducer.java
    camel/branches/camel-1.x/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaUdpUsingTemplateTest.java
    camel/branches/camel-1.x/components/camel-spring/src/main/java/org/apache/camel/spring/CamelBeanPostProcessor.java

Propchange: camel/branches/camel-1.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Feb 25 07:50:44 2009
@@ -1 +1 @@
-/camel/trunk:739733,739904,740251,740295,740306,740596,740663,741848,742231,742705,742739,742854,742856,742898,742906,743613,743762,743773,743920,743959-743960,744123,745105,745367,745541,745751,745826,745978,746269,746872,746895,746962,747258
+/camel/trunk:736980,739733,739904,740251,740295,740306,740596,740663,741848,742231,742705,742739,742854,742856,742898,742906,743613,743762,743773,743920,743959-743960,744123,745105,745367,745541,745751,745826,745978,746269,746872,746895,746962,747258

Propchange: camel/branches/camel-1.x/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: camel/branches/camel-1.x/camel-core/src/main/java/org/apache/camel/impl/DefaultEndpoint.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/camel-core/src/main/java/org/apache/camel/impl/DefaultEndpoint.java?rev=747697&r1=747696&r2=747697&view=diff
==============================================================================
--- camel/branches/camel-1.x/camel-core/src/main/java/org/apache/camel/impl/DefaultEndpoint.java (original)
+++ camel/branches/camel-1.x/camel-core/src/main/java/org/apache/camel/impl/DefaultEndpoint.java Wed Feb 25 07:50:44 2009
@@ -78,7 +78,7 @@
         return "Endpoint[" + getEndpointUri() + "]";
     }
 
-    public String getEndpointUri() {
+    public String getEndpointUri() {        
         if (endpointUri == null) {
             endpointUri = createEndpointUri();
             if (endpointUri == null) {
@@ -198,6 +198,17 @@
         this.endpointUri = endpointUri;
     }
     
+    /**
+     * Sets the endpointUri if it has not been specified yet via some kind of dependency injection mechanism.
+     * This allows dependency injection frameworks such as Spring or Guice to set the default endpoint URI in cases
+     * where it has not been explicitly configured using the name/context in which an Endpoint is created.
+     */
+    public void setEndpointUriIfNotSpecified(String value) {
+        if (endpointUri == null) {
+            setEndpointUri(value);
+        }
+    }
+    
     @Deprecated
     public CamelContext getContext() {
         return getCamelContext();

Modified: camel/branches/camel-1.x/components/camel-mina/pom.xml
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-mina/pom.xml?rev=747697&r1=747696&r2=747697&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-mina/pom.xml (original)
+++ camel/branches/camel-1.x/components/camel-mina/pom.xml Wed Feb 25 07:50:44 2009
@@ -70,6 +70,17 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-spring</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-spring</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <scope>test</scope>

Modified: camel/branches/camel-1.x/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaComponent.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaComponent.java?rev=747697&r1=747696&r2=747697&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaComponent.java (original)
+++ camel/branches/camel-1.x/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaComponent.java Wed Feb 25 07:50:44 2009
@@ -29,6 +29,7 @@
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.NoTypeConversionAvailableException;
 import org.apache.camel.impl.DefaultComponent;
+import org.apache.camel.util.ObjectHelper;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.mina.common.ByteBuffer;
@@ -64,19 +65,7 @@
  */
 public class MinaComponent extends DefaultComponent<MinaExchange> {
     private static final transient Log LOG = LogFactory.getLog(MinaComponent.class);
-
-    private static final long DEFAULT_CONNECT_TIMEOUT = 30000;
-    private boolean sync = true;
-    private boolean textline;
-    private TextLineDelimiter textlineDelimiter;
-    private String codec;
-    private String encoding;
-    private long timeout;
-    private boolean lazySessionCreation;
-    private boolean transferExchange;
-    private boolean minaLogger;
-    // encoder used for datagram
-    private CharsetEncoder encoder;
+    private MinaConfiguration configuration = new MinaConfiguration();
 
     public MinaComponent() {
     }
@@ -91,49 +80,69 @@
             LOG.debug("Creating MinaEndpoint from uri: " + uri);
         }
 
-        setProperties(this, parameters);
+        // must use copy as each endpoint can have different options
+        ObjectHelper.notNull(configuration, "configuration");
+        MinaConfiguration config = configuration.copy();
 
         URI u = new URI(remaining);
+        config.setHost(u.getHost());
+        config.setPort(u.getPort());
+        config.setProtocol(u.getScheme());
+        setProperties(config, parameters);
+
+        return createEndpoint(uri, config);
+    }
+
+    public Endpoint createEndpoint(MinaConfiguration config) throws Exception {
+        return createEndpoint(null, config);
+    }
 
-        String protocol = u.getScheme();
+    private Endpoint createEndpoint(String uri, MinaConfiguration config) throws Exception {
+        String protocol = config.getProtocol();
         // if mistyped uri then protocol can be null
         if (protocol != null) {
             if (protocol.equals("tcp")) {
-                return createSocketEndpoint(uri, u, parameters);
+                return createSocketEndpoint(uri, config);
             } else if (protocol.equals("udp") || protocol.equals("mcast") || protocol.equals("multicast")) {
-                return createDatagramEndpoint(uri, u, parameters);
+                return createDatagramEndpoint(uri, config);
             } else if (protocol.equals("vm")) {
-                return createVmEndpoint(uri, u);
+                return createVmEndpoint(uri, config);
             }
         }
         // protocol not resolved so error
         throw new IllegalArgumentException("Unrecognised MINA protocol: " + protocol + " for uri: " + uri);
+
     }
 
     // Implementation methods
     //-------------------------------------------------------------------------
 
-    protected MinaEndpoint createVmEndpoint(String uri, URI connectUri) {
+    protected MinaEndpoint createVmEndpoint(String uri, MinaConfiguration configuration) {
+        boolean minaLogger = configuration.isMinaLogger();
+        boolean sync = configuration.isSync();
+
         IoAcceptor acceptor = new VmPipeAcceptor();
-        SocketAddress address = new VmPipeAddress(connectUri.getPort());
+        SocketAddress address = new VmPipeAddress(configuration.getPort());
         IoConnector connector = new VmPipeConnector();
 
         // connector config
-        configureCodecFactory("MinaProducer", connector.getDefaultConfig(), textline, encoding, codec);
+        configureCodecFactory("MinaProducer", connector.getDefaultConfig(), configuration);
         if (minaLogger) {
             connector.getFilterChain().addLast("logger", new LoggingFilter());
         }
 
         // acceptor connectorConfig
-        configureCodecFactory("MinaConsumer", acceptor.getDefaultConfig(), textline, encoding, codec);
+        configureCodecFactory("MinaConsumer", acceptor.getDefaultConfig(), configuration);
         if (minaLogger) {
             acceptor.getFilterChain().addLast("logger", new LoggingFilter());
         }
 
-        MinaEndpoint endpoint = new MinaEndpoint(uri, this, address, acceptor, null, connector, null, false, timeout, transferExchange, sync);
-        if (encoding != null) {
-            endpoint.setCharsetName(getEncodingParameter("MinaProducer", encoding).name());
-        }
+        MinaEndpoint endpoint = new MinaEndpoint(uri, this);
+        endpoint.setAddress(address);
+        endpoint.setAcceptor(acceptor);
+        endpoint.setConnector(connector);
+        endpoint.setConfiguration(configuration);
+
         // set sync or async mode after endpoint is created
         if (sync) {
             endpoint.setExchangePattern(ExchangePattern.InOut);
@@ -144,34 +153,41 @@
         return endpoint;
     }
 
-    protected MinaEndpoint createSocketEndpoint(String uri, URI connectUri, Map parameters) {
+    protected MinaEndpoint createSocketEndpoint(String uri, MinaConfiguration configuration) {
+        boolean minaLogger = configuration.isMinaLogger();
+        long timeout = configuration.getTimeout();
+        boolean sync = configuration.isSync();
+
         IoAcceptor acceptor = new SocketAcceptor();
-        SocketAddress address = new InetSocketAddress(connectUri.getHost(), connectUri.getPort());
+        SocketAddress address = new InetSocketAddress(configuration.getHost(), configuration.getPort());
         IoConnector connector = new SocketConnector();
 
         // connector config
         SocketConnectorConfig connectorConfig = new SocketConnectorConfig();
-        configureCodecFactory("MinaProducer", connectorConfig, textline, encoding, codec);
+        configureCodecFactory("MinaProducer", connectorConfig, configuration);
         if (minaLogger) {
             connectorConfig.getFilterChain().addLast("logger", new LoggingFilter());
         }
         // set connect timeout to mina in seconds
-        long connectTimeout = timeout > 0 ? timeout : DEFAULT_CONNECT_TIMEOUT;
-        connectorConfig.setConnectTimeout((int)(connectTimeout / 1000));
+        connectorConfig.setConnectTimeout((int) (timeout / 1000));
 
         // acceptor connectorConfig
         SocketAcceptorConfig acceptorConfig = new SocketAcceptorConfig();
-        configureCodecFactory("MinaConsumer", acceptorConfig, textline, encoding, codec);
+        configureCodecFactory("MinaConsumer", acceptorConfig, configuration);
         acceptorConfig.setReuseAddress(true);
         acceptorConfig.setDisconnectOnUnbind(true);
         if (minaLogger) {
             acceptorConfig.getFilterChain().addLast("logger", new LoggingFilter());
         }
 
-        MinaEndpoint endpoint = new MinaEndpoint(uri, this, address, acceptor, acceptorConfig, connector, connectorConfig, lazySessionCreation, timeout, transferExchange, sync);
-        if (encoding != null) {
-            endpoint.setCharsetName(getEncodingParameter("MinaProducer", encoding).name());
-        }
+        MinaEndpoint endpoint = new MinaEndpoint(uri, this);
+        endpoint.setAddress(address);
+        endpoint.setAcceptor(acceptor);
+        endpoint.setAcceptorConfig(acceptorConfig);
+        endpoint.setConnector(connector);
+        endpoint.setConnectorConfig(connectorConfig);
+        endpoint.setConfiguration(configuration);
+
         // set sync or async mode after endpoint is created
         if (sync) {
             endpoint.setExchangePattern(ExchangePattern.InOut);
@@ -182,17 +198,18 @@
         return endpoint;
     }
 
-    protected void configureCodecFactory(String type, IoServiceConfig config, boolean textline, String encoding, String codec) {
-        ProtocolCodecFactory codecFactory = getCodecFactory(type, codec);
+    protected void configureCodecFactory(String type, IoServiceConfig config, MinaConfiguration configuration) {
+        ProtocolCodecFactory codecFactory = getCodecFactory(type, configuration.getCodec());
 
         if (codecFactory == null) {
-            if (textline) {
-                Charset charset = getEncodingParameter(type, encoding);
-                LineDelimiter delimiter = getLineDelimiterParameter();
+            if (configuration.isTextline()) {
+                Charset charset = getEncodingParameter(type, configuration);
+                LineDelimiter delimiter = getLineDelimiterParameter(configuration.getTextlineDelimiter());
                 codecFactory = new TextLineCodecFactory(charset, delimiter);
                 if (LOG.isDebugEnabled()) {
                     LOG.debug(type + ": Using TextLineCodecFactory: " + codecFactory + " using encoding: "
-                              + charset + " and line delimiter: " + textlineDelimiter + "(" + delimiter + ")");
+                            + charset + " and line delimiter: " + configuration.getTextlineDelimiter()
+                            + "(" + delimiter + ")");
                 }
             } else {
                 codecFactory = new ObjectSerializationCodecFactory();
@@ -205,9 +222,14 @@
         addCodecFactory(config, codecFactory);
     }
 
-    protected MinaEndpoint createDatagramEndpoint(String uri, URI connectUri, Map parameters) {
+    protected MinaEndpoint createDatagramEndpoint(String uri, MinaConfiguration configuration) {
+        boolean minaLogger = configuration.isMinaLogger();
+        long timeout = configuration.getTimeout();
+        boolean transferExchange = configuration.isTransferExchange();
+        boolean sync = configuration.isSync();
+
         IoAcceptor acceptor = new DatagramAcceptor();
-        SocketAddress address = new InetSocketAddress(connectUri.getHost(), connectUri.getPort());
+        SocketAddress address = new InetSocketAddress(configuration.getHost(), configuration.getPort());
         IoConnector connector = new DatagramConnector();
 
         if (transferExchange) {
@@ -215,26 +237,28 @@
         }
 
         DatagramConnectorConfig connectorConfig = new DatagramConnectorConfig();
-        configureDataGramCodecFactory("MinaProducer", connectorConfig, encoding, codec);
+        configureDataGramCodecFactory("MinaProducer", connectorConfig, configuration);
         if (minaLogger) {
             connectorConfig.getFilterChain().addLast("logger", new LoggingFilter());
         }
         // set connect timeout to mina in seconds
-        long connectTimeout = timeout > 0 ? timeout : DEFAULT_CONNECT_TIMEOUT;
-        connectorConfig.setConnectTimeout((int)(connectTimeout / 1000));
+        connectorConfig.setConnectTimeout((int) (timeout / 1000));
 
         DatagramAcceptorConfig acceptorConfig = new DatagramAcceptorConfig();
-        configureDataGramCodecFactory("MinaConsumer", acceptorConfig, encoding, codec);
+        configureDataGramCodecFactory("MinaConsumer", acceptorConfig, configuration);
         acceptorConfig.setDisconnectOnUnbind(true);
         // reuse address is default true for datagram
         if (minaLogger) {
             acceptorConfig.getFilterChain().addLast("logger", new LoggingFilter());
         }
 
-        MinaEndpoint endpoint = new MinaEndpoint(uri, this, address, acceptor, acceptorConfig, connector, connectorConfig, lazySessionCreation, timeout, transferExchange, sync);
-        if (encoding != null) {
-            endpoint.setCharsetName(getEncodingParameter("MinaProducer", encoding).name());
-        }
+        MinaEndpoint endpoint = new MinaEndpoint(uri, this);
+        endpoint.setAddress(address);
+        endpoint.setAcceptor(acceptor);
+        endpoint.setAcceptorConfig(acceptorConfig);
+        endpoint.setConnector(connector);
+        endpoint.setConnectorConfig(connectorConfig);
+        endpoint.setConfiguration(configuration);
         // set sync or async mode after endpoint is created
         if (sync) {
             endpoint.setExchangePattern(ExchangePattern.InOut);
@@ -245,32 +269,26 @@
         return endpoint;
     }
 
-    private static Charset getEncodingParameter(String type, String encoding) {
-        if (encoding == null) {
-            encoding = Charset.defaultCharset().name();
-            if (LOG.isDebugEnabled()) {
-                LOG.debug(type + ": No encoding parameter using default charset: " + encoding);
-            }
-        }
-        if (!Charset.isSupported(encoding)) {
-            throw new IllegalArgumentException("The encoding: " + encoding + " is not supported");
-        }
-
-        return Charset.forName(encoding);
-    }
-
     /**
      * For datagrams the entire message is available as a single ByteBuffer so lets just pass those around by default
      * and try converting whatever they payload is into ByteBuffers unless some custom converter is specified
      */
-    protected void configureDataGramCodecFactory(String type, IoServiceConfig config, String encoding, String codec) {
-        ProtocolCodecFactory codecFactory = getCodecFactory(type, codec);
+    protected void configureDataGramCodecFactory(final String type, final IoServiceConfig config, final MinaConfiguration configuration) {
+        ProtocolCodecFactory codecFactory = getCodecFactory(type, configuration.getCodec());
         if (codecFactory == null) {
+            final Charset charset = getEncodingParameter(type, configuration);
+
+            // set the encoder used for this datagram codec factory
             codecFactory = new ProtocolCodecFactory() {
                 public ProtocolEncoder getEncoder() throws Exception {
                     return new ProtocolEncoder() {
+                        private CharsetEncoder encoder;
+
                         public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws Exception {
-                            ByteBuffer buf = toByteBuffer(message);
+                            if (encoder == null) {
+                                encoder = charset.newEncoder();
+                            }
+                            ByteBuffer buf = toByteBuffer(message, encoder);
                             buf.flip();
                             out.write(buf);
                         }
@@ -302,10 +320,6 @@
                 }
             };
 
-            // set the encoder used for this datagram codec factory
-            Charset charset = getEncodingParameter(type, encoding);
-            encoder = charset.newEncoder();
-
             if (LOG.isDebugEnabled()) {
                 LOG.debug(type + ": Using CodecFactory: " + codecFactory + " using encoding: " + charset);
             }
@@ -314,8 +328,8 @@
         addCodecFactory(config, codecFactory);
     }
 
-    protected ByteBuffer toByteBuffer(Object message) throws CharacterCodingException {
-        ByteBuffer answer = null;
+    private ByteBuffer toByteBuffer(Object message, CharsetEncoder encoder) throws CharacterCodingException {
+        ByteBuffer answer;
         try {
             answer = convertTo(ByteBuffer.class, message);
         } catch (NoTypeConversionAvailableException e) {
@@ -326,7 +340,7 @@
         return answer;
     }
 
-    protected ProtocolCodecFactory getCodecFactory(String type, String codec) {
+    private ProtocolCodecFactory getCodecFactory(String type, String codec) {
         ProtocolCodecFactory codecFactory = null;
         if (codec != null) {
             codecFactory = getCamelContext().getRegistry().lookup(codec, ProtocolCodecFactory.class);
@@ -340,16 +354,16 @@
         return codecFactory;
     }
 
-    protected void addCodecFactory(IoServiceConfig config, ProtocolCodecFactory codecFactory) {
+    private void addCodecFactory(IoServiceConfig config, ProtocolCodecFactory codecFactory) {
         config.getFilterChain().addLast("codec", new ProtocolCodecFilter(codecFactory));
     }
 
-    private LineDelimiter getLineDelimiterParameter() {
-        if (textlineDelimiter == null) {
+    private static LineDelimiter getLineDelimiterParameter(TextLineDelimiter delimiter) {
+        if (delimiter == null) {
             return LineDelimiter.DEFAULT;
         }
 
-        switch (textlineDelimiter) {
+        switch (delimiter) {
         case DEFAULT:
             return LineDelimiter.DEFAULT;
         case AUTO:
@@ -361,83 +375,38 @@
         case MAC:
             return LineDelimiter.MAC;
         default:
-            throw new IllegalArgumentException("Unknown textline delimiter: " + textlineDelimiter);
+            throw new IllegalArgumentException("Unknown textline delimiter: " + delimiter);
         }
     }
 
-    // Properties
-    //-------------------------------------------------------------------------
-
-    public boolean isSync() {
-        return sync;
-    }
-
-    public void setSync(boolean sync) {
-        this.sync = sync;
-    }
-
-    public boolean isTextline() {
-        return textline;
-    }
-
-    public void setTextline(boolean textline) {
-        this.textline = textline;
-    }
-
-    public TextLineDelimiter getTextlineDelimiter() {
-        return textlineDelimiter;
-    }
-
-    public void setTextlineDelimiter(TextLineDelimiter textlineDelimiter) {
-        this.textlineDelimiter = textlineDelimiter;
-    }
-
-    public String getCodec() {
-        return codec;
-    }
-
-    public void setCodec(String codec) {
-        this.codec = codec;
-    }
-
-    public String getEncoding() {
-        return encoding;
-    }
-
-    public void setEncoding(String encoding) {
-        this.encoding = encoding;
-    }
-
-    public long getTimeout() {
-        return timeout;
-    }
-
-    public void setTimeout(long timeout) {
-        this.timeout = timeout;
-    }
-
-    public boolean isLazySessionCreation() {
-        return lazySessionCreation;
-    }
-
-    public void setLazySessionCreation(boolean lazySessionCreation) {
-        this.lazySessionCreation = lazySessionCreation;
-    }
+    private static Charset getEncodingParameter(String type, MinaConfiguration configuration) {
+        String encoding = configuration.getEncoding();
+        if (encoding == null) {
+            encoding = Charset.defaultCharset().name();
+            // set in on configuration so its updated
+            configuration.setEncoding(encoding);
+            if (LOG.isDebugEnabled()) {
+                LOG.debug(type + ": No encoding parameter using default charset: " + encoding);
+            }
+        }
+        if (!Charset.isSupported(encoding)) {
+            throw new IllegalArgumentException("The encoding: " + encoding + " is not supported");
+        }
 
-    public boolean isTransferExchange() {
-        return transferExchange;
+        return Charset.forName(encoding);
     }
 
-    public void setTransferExchange(boolean transferExchange) {
-        this.transferExchange = transferExchange;
-    }
+    // Properties
+    //-------------------------------------------------------------------------
 
-    public boolean isMinaLogger() {
-        return minaLogger;
+    public synchronized MinaConfiguration getConfiguration() {
+        if (configuration == null) {
+            configuration = new MinaConfiguration();
+        }
+        return configuration;
     }
 
-    public void setMinaLogger(boolean minaLogger) {
-        this.minaLogger = minaLogger;
+    public void setConfiguration(MinaConfiguration configuration) {
+        this.configuration = configuration;
     }
-
 }

Modified: camel/branches/camel-1.x/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java?rev=747697&r1=747696&r2=747697&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java (original)
+++ camel/branches/camel-1.x/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java Wed Feb 25 07:50:44 2009
@@ -50,7 +50,7 @@
         this.endpoint = endpoint;
         this.address = endpoint.getAddress();
         this.acceptor = endpoint.getAcceptor();
-        this.sync = endpoint.isSync();
+        this.sync = endpoint.getConfiguration().isSync();
     }
 
     @Override
@@ -98,8 +98,8 @@
 
             MinaExchange exchange = endpoint.createExchange(session, object);
             //Set the exchange charset property for converting
-            if (endpoint.getCharsetName() != null) {
-                exchange.setProperty(Exchange.CHARSET_NAME, endpoint.getCharsetName());
+            if (endpoint.getConfiguration().getCharsetName() != null) {
+                exchange.setProperty(Exchange.CHARSET_NAME, endpoint.getConfiguration().getCharsetName());
             }
             getProcessor().process(exchange);
 
@@ -113,7 +113,7 @@
                 }
 
                 boolean failed = exchange.isFailed();
-                if (failed && !endpoint.isTransferExchange()) {
+                if (failed && !endpoint.getConfiguration().isTransferExchange()) {
                     if (exchange.getException() != null) {
                         body = exchange.getException();
                     } else {

Modified: camel/branches/camel-1.x/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaEndpoint.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaEndpoint.java?rev=747697&r1=747696&r2=747697&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaEndpoint.java (original)
+++ camel/branches/camel-1.x/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaEndpoint.java Wed Feb 25 07:50:44 2009
@@ -17,13 +17,13 @@
 package org.apache.camel.component.mina;
 
 import java.net.SocketAddress;
-import java.nio.charset.Charset;
 
 import org.apache.camel.Consumer;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
 import org.apache.camel.impl.DefaultEndpoint;
+import org.apache.camel.util.ObjectHelper;
 import org.apache.mina.common.IoAcceptor;
 import org.apache.mina.common.IoAcceptorConfig;
 import org.apache.mina.common.IoConnector;
@@ -37,49 +37,45 @@
  */
 public class MinaEndpoint extends DefaultEndpoint<MinaExchange> {
 
-    private static final long DEFAULT_TIMEOUT = 30000;
-    private long timeout = DEFAULT_TIMEOUT;
+    private SocketAddress address;
+    private IoAcceptor acceptor;
+    private IoConnector connector;
+    private IoAcceptorConfig acceptorConfig;
+    private IoConnectorConfig connectorConfig;
+    private MinaConfiguration configuration;
 
-    private final IoAcceptor acceptor;
-    private final SocketAddress address;
-    private final IoConnector connector;
-    private final IoAcceptorConfig acceptorConfig;
-    private final IoConnectorConfig connectorConfig;
-    private final boolean lazySessionCreation;
-    private final boolean transferExchange;
-    private final boolean sync;
-    private String charsetName;
-
-    public MinaEndpoint(String endpointUri, MinaComponent component, SocketAddress address,
-                        IoAcceptor acceptor, IoAcceptorConfig acceptorConfig, IoConnector connector,
-                        IoConnectorConfig connectorConfig, boolean lazySessionCreation, long timeout,
-                        boolean transferExchange, boolean sync) {
+    public MinaEndpoint() {
+    }
+
+    public MinaEndpoint(String endpointUri, MinaComponent component) {
         super(endpointUri, component);
-        this.address = address;
-        this.acceptor = acceptor;
-        this.acceptorConfig = acceptorConfig;
-        this.connectorConfig = connectorConfig;
-        this.connector = connector;
-        this.lazySessionCreation = lazySessionCreation;
-        if (timeout > 0) {
-            // override default timeout if provided
-            this.timeout = timeout;
-        }
-        this.transferExchange = transferExchange;
-        this.sync = sync;
     }
 
 
     @SuppressWarnings({"unchecked"})
     public Producer<MinaExchange> createProducer() throws Exception {
+        ObjectHelper.notNull(configuration, "configuration"); 
+        ObjectHelper.notNull(address, "address");
+        ObjectHelper.notNull(connector, "connector");
+        // wm protocol does not have config
+        if (!configuration.getProtocol().equalsIgnoreCase("vm")) {
+            ObjectHelper.notNull(connectorConfig, "connectorConfig");
+        }
         return new MinaProducer(this);
     }
 
     public Consumer<MinaExchange> createConsumer(Processor processor) throws Exception {
+        ObjectHelper.notNull(configuration, "configuration");
+        ObjectHelper.notNull(address, "address");
+        ObjectHelper.notNull(acceptor, "acceptor");
+        // wm protocol does not have config
+        if (!configuration.getProtocol().equalsIgnoreCase("vm")) {
+            ObjectHelper.notNull(acceptorConfig, "acceptorConfig");
+        }
         return new MinaConsumer(this, processor);
     }
 
-    @Override
+    
     public MinaExchange createExchange(ExchangePattern pattern) {
         return new MinaExchange(getCamelContext(), pattern, null);
     }
@@ -90,53 +86,58 @@
         return exchange;
     }
 
+    public boolean isSingleton() {
+        return true;
+    }
+
     // Properties
     // -------------------------------------------------------------------------
-    public IoAcceptor getAcceptor() {
-        return acceptor;
+
+    public MinaConfiguration getConfiguration() {
+        return configuration;
     }
 
-    public SocketAddress getAddress() {
-        return address;
+    public void setConfiguration(MinaConfiguration configuration) {
+        this.configuration = configuration;
     }
 
-    public IoConnector getConnector() {
-        return connector;
+    public SocketAddress getAddress() {
+        return address;
     }
 
-    public boolean isLazySessionCreation() {
-        return lazySessionCreation;
+    public void setAddress(SocketAddress address) {
+        this.address = address;
     }
 
-    public IoAcceptorConfig getAcceptorConfig() {
-        return acceptorConfig;
+    public IoAcceptor getAcceptor() {
+        return acceptor;
     }
 
-    public IoConnectorConfig getConnectorConfig() {
-        return connectorConfig;
+    public void setAcceptor(IoAcceptor acceptor) {
+        this.acceptor = acceptor;
     }
 
-    public boolean isSingleton() {
-        return true;
+    public IoConnector getConnector() {
+        return connector;
     }
 
-    public long getTimeout() {
-        return timeout;
+    public void setConnector(IoConnector connector) {
+        this.connector = connector;
     }
 
-    public boolean isTransferExchange() {
-        return transferExchange;
+    public IoAcceptorConfig getAcceptorConfig() {
+        return acceptorConfig;
     }
 
-    public boolean isSync() {
-        return sync;
+    public void setAcceptorConfig(IoAcceptorConfig acceptorConfig) {
+        this.acceptorConfig = acceptorConfig;
     }
 
-    public void setCharsetName(String charset) {
-        this.charsetName = charset;
+    public IoConnectorConfig getConnectorConfig() {
+        return connectorConfig;
     }
 
-    public String getCharsetName() {
-        return charsetName;
+    public void setConnectorConfig(IoConnectorConfig connectorConfig) {
+        this.connectorConfig = connectorConfig;
     }
 }

Modified: camel/branches/camel-1.x/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaPayloadHelper.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaPayloadHelper.java?rev=747697&r1=747696&r2=747697&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaPayloadHelper.java (original)
+++ camel/branches/camel-1.x/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaPayloadHelper.java Wed Feb 25 07:50:44 2009
@@ -34,7 +34,7 @@
     }
 
     public static Object getIn(MinaEndpoint endpoint, Exchange exchange) {
-        if (endpoint.isTransferExchange()) {
+        if (endpoint.getConfiguration().isTransferExchange()) {
             // we should transfer the entire exchange over the wire (includes in/out)
             return MinaPayloadHolder.marshal(exchange);
         } else {
@@ -44,7 +44,7 @@
     }
 
     public static Object getOut(MinaEndpoint endpoint, Exchange exchange) {
-        if (endpoint.isTransferExchange()) {
+        if (endpoint.getConfiguration().isTransferExchange()) {
             // we should transfer the entire exchange over the wire (includes in/out)
             return MinaPayloadHolder.marshal(exchange);
         } else {

Modified: camel/branches/camel-1.x/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaProducer.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaProducer.java?rev=747697&r1=747696&r2=747697&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaProducer.java (original)
+++ camel/branches/camel-1.x/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaProducer.java Wed Feb 25 07:50:44 2009
@@ -53,9 +53,9 @@
     public MinaProducer(MinaEndpoint endpoint) {
         super(endpoint);
         this.endpoint = endpoint;
-        this.lazySessionCreation = endpoint.isLazySessionCreation();
-        this.timeout = endpoint.getTimeout();
-        this.sync = endpoint.isSync();
+        this.lazySessionCreation = endpoint.getConfiguration().isLazySessionCreation();
+        this.timeout = endpoint.getConfiguration().getTimeout();
+        this.sync = endpoint.getConfiguration().isSync();
     }
 
     public void process(Exchange exchange) throws Exception {
@@ -67,8 +67,8 @@
         }
 
         // set the exchange encoding property
-        if (endpoint.getCharsetName() != null) {
-            exchange.setProperty(Exchange.CHARSET_NAME, endpoint.getCharsetName());
+        if (endpoint.getConfiguration().getCharsetName() != null) {
+            exchange.setProperty(Exchange.CHARSET_NAME, endpoint.getConfiguration().getCharsetName());
         }
 
         Object body = MinaPayloadHelper.getIn(endpoint, exchange);

Modified: camel/branches/camel-1.x/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaUdpUsingTemplateTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaUdpUsingTemplateTest.java?rev=747697&r1=747696&r2=747697&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaUdpUsingTemplateTest.java (original)
+++ camel/branches/camel-1.x/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaUdpUsingTemplateTest.java Wed Feb 25 07:50:44 2009
@@ -44,7 +44,7 @@
 
     protected void sendUdpMessages() throws Exception {
         for (int i = 0; i < messageCount; i++) {
-            template.sendBody("mina:udp://127.0.0.1:4445", "Hello Message: " + i);
+            template.sendBody("mina:udp://127.0.0.1:4445?sync=false", "Hello Message: " + i);
         }
     }
 

Modified: camel/branches/camel-1.x/components/camel-spring/src/main/java/org/apache/camel/spring/CamelBeanPostProcessor.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-spring/src/main/java/org/apache/camel/spring/CamelBeanPostProcessor.java?rev=747697&r1=747696&r2=747697&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-spring/src/main/java/org/apache/camel/spring/CamelBeanPostProcessor.java (original)
+++ camel/branches/camel-1.x/components/camel-spring/src/main/java/org/apache/camel/spring/CamelBeanPostProcessor.java Wed Feb 25 07:50:44 2009
@@ -29,6 +29,7 @@
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Produce;
 import org.apache.camel.impl.CamelPostProcessorHelper;
+import org.apache.camel.impl.DefaultEndpoint;
 import org.apache.camel.spring.util.ReflectionUtils;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.commons.logging.Log;
@@ -85,6 +86,10 @@
     }
 
     public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
+        if (bean instanceof DefaultEndpoint) {
+            DefaultEndpoint defaultEndpoint = (DefaultEndpoint) bean;
+            defaultEndpoint.setEndpointUriIfNotSpecified(beanName);
+        }
         return bean;
     }