如何在不使用注册表的情况下为文件或RemoteFile端点设置ProcessStrategy

时间:2018-07-02 17:02:39

标签: apache-camel

我有一个Routebuilder类,该类的PollEnrich端点是通过String字段设置的。在routbuilder中,我想在不使用注册表的情况下将自定义文件,FTP或SFTP ProcessStrategy添加到端点,即通过将&processStrategy=#customProcessStrategyName添加到字符串URI。这将要求Routebuilder类的调用者提前设置该策略,而我想在类本身中完成。

如果将端点作为端点对象会很容易,在这种情况下,我可以调用setProcessStrategy方法。

如何在将Endpoint对象用于pollenrich之前或从中获取Endpoint对象,如何将setProcessStrategy对象用于Endpoint,然后仅使用pollenrich中的[HttpPost] public ActionResult BuscarExpediente(Entrega02Programacion03.Models.Expediente model) { int? Codigo = model.Codigo; int? Cedula = model.Solicitante?.Cedula; string Email = model.Funcionario?.Email; //Expediente expediente = db.Expediente.Find(id); //var expediente = db.Expediente.SingleOrDefault(e => e.Codigo == id); //si me dan el id de expediente lo busco de esta forma if ((Codigo != null) &&(Cedula == null) &&(Email == null)) { //var expediente = db.Expediente.Where(E => E.Codigo == Codigo).SingleOrDefault(); //return View(expediente); TempData["idExpedienteBuscar"] = Codigo; return RedirectToAction("ExpedientesPorId"); } //si me dal la cedula de un solicitante busco de esta forma if((Cedula != null)&& (Email == null)&& (Codigo == null)) { TempData["ExpedientesCedulaSolicitante"] = Cedula; return RedirectToAction("ExpedientesPorCedulaSolicitante"); } //si me dan un funcionario busco de esta forma if((Email != null)&& (Codigo == null) && (Cedula == null)) { TempData["ExpedienteBuscarFuncionarioID"] = Email; return RedirectToAction("ExpedientesPorFuncionario"); } //si no me dan nada busco de estra otra else { //que de el mensaje de que solo se puede insertar un campo de busqueda //hay que poner en el view un label o algo para tirar el msj } //ViewBag.FechInicio = expediente.FechaCreacion; //ViewBag.Tramite = expediente.Tramite.Titulo; //ViewBag.Funcionario = expediente.Funcionario.Nombre; return View(); } 对象,而不是更常见的字符串。

1 个答案:

答案 0 :(得分:0)

您可以使用CamelContext#getEndpoint方法以编程方式获取端点,该方法可以重用或创建新端点。

请参见CamelContext#getEndpoint javadoc

  

将给定名称解析为指定类型的端点。如果名称已注册了单例端点,则返回单例。否则,将创建一个新的端点并在EndpointRegistry中注册。

然后将此创建的端点与.pollEnrich().constant(endpoint)

一起使用
FileEndpoint fileEndpoint = getContext().getEndpoint("file://somewhere", FileEndpoint.class);
fileEndpoint.setProcessStrategy(new Something<>());
from("direct:input")
        .pollEnrich().constant(fileEndpoint)
        .to("log:output");

from(fileEndpoint)中使用RouteBuilder#from(Endpoint)来简单地在from()中使用端点