Hello,

I know it is already possible to define camel endpoint MLLP. But I think a
camel-mllp component would be welcome.


I therefore propose to add it. this would avoid having to add each time the
same code to set the codec.


I have in my project numerous endpoint mllp and I noticed that the
developpers diverge more or less on how to go about it.
the code: from ("mllp://host:8808") is easy to implement and does not cause
confusion.


So I defined a camel-mllp componet which extends camel-mina.
this component does is create a codec mllp and delegates the rest of the
work to Mina. it is simple to  implement.


I therefore propose to bring this component (or the idea of such a
component) in the incubator.


the component being reduced to a single class I think the camel maintenace
code will not be more complicated.


http://camel.465427.n5.nabble.com/file/n5711304/camel-mllp.zip
camel-mllp.zip 
/**
 * 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.camel.component.mllp;

import java.util.Map;

import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
import org.apache.camel.component.hl7.HL7MLLPCodec;
import org.apache.camel.component.mina.MinaComponent;
import org.apache.camel.component.mina.MinaConfiguration;

/**
 * Component for Apache MLLP.
 * Camel MLLP extends Camel Mina.
 * It accept all mina options. except the codec option.
 * Camel-MLLP always uses the codec HL7MLLPCodec.
 * If the codec option is present, an IllegalArgumentException is thrown.
 * usage:
 * from ("mllp://localhost:8889?encoding=ISO-8859-1")
 * 
 * @version 
 */
public class MLLPComponent extends MinaComponent
{
   /**
    * MLLP_DEFAULT_CHARSET default encodingt: UTF-8
    */
   public static final String MLLP_DEFAULT_CHARSET = "UTF-8";
   /**
    * MLLP_CHARSET encoding option name. 
    */
   public static final String MLLP_CHARSET = "encoding";
   /**
    * MINA_CODEC mina codec option name. 
    */
   public static final String MINA_CODEC = "codec";
   /**
    * MLLP_DEFAULT_SYNC default exchange pattern: true
    */
   public static final boolean MLLP_DEFAULT_SYNC = true;
   /**
    * MLLP_SYNC exchange pattern Option name
    */
   public static final String MLLP_SYNC = "sync";


   public MLLPComponent(){
      super();
   }

   public MLLPComponent(final CamelContext context){
      super(context);
   }

   /**
    * A factory method allowing derived components to create a new mina
endpoint
    * from the given URI, remaining path and optional parameters
    *
    * @param uri the full URI of the endpoint
    * @param remaining the remaining part of the URI without the query
    *                parameters or component prefix
    * @param parameters the optional parameters passed in
    * @return a newly created mina endpoint or null if the endpoint cannot
be
    *         created based on the inputs
    */
   @Override
   protected Endpoint createEndpoint(String uri, String remaining,
Map<String, Object> parameters) 
      throws Exception{

      String charSet = MLLP_DEFAULT_CHARSET;

      //set config properties
      if(parameters.containsKey(MLLP_CHARSET)){
         charSet = (String) parameters.get(MLLP_CHARSET);
         parameters.remove(MLLP_CHARSET);
      }
      if(!parameters.containsKey(MLLP_SYNC)){
         parameters.put(MLLP_SYNC, MLLP_DEFAULT_SYNC);
      }

      if(parameters.containsKey(MINA_CODEC)){
         throw new IllegalArgumentException("Unrecognised MLLP " +
MINA_CODEC + ": the " + MINA_CODEC
            + " option is not supported");
      }
 
      //define config with codec.
      this.setConfiguration(getDefaultConfig(charSet));

      //call mina ceateEndPoint for TCP socket.
      return super.createEndpoint(uri, "tcp://" + remaining, parameters);
   }
   
   /**
    * Create new mina configuration
    * Create a new mina configuration that contains a new instance of
HL7MLLPCodec set with charSet
    * @param charSet encoding for HL7MLLPCodec
    * @return a newly created mina configuration
    */
   private MinaConfiguration getDefaultConfig(String charSet){
      final MinaConfiguration config = new MinaConfiguration();
      final HL7MLLPCodec mllp = new HL7MLLPCodec();
      mllp.setCharset(charSet);
      config.setCodec(mllp);
      return config;
   }
}


A+JYT

PS: I'm Running camel 2.8.0 sandalone and 2.8.0 in fuse

--
View this message in context: 
http://camel.465427.n5.nabble.com/Suggest-Add-a-camel-mllp-component-into-the-incubator-tp5711304.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to