Apache Camel: создание класса с использованием его многопараметрического конструктора - PullRequest
0 голосов
/ 22 февраля 2020

Как мне go вызвать метод на объекте класса, создав его экземпляр с помощью своего многопараметрического конструктора на маршруте Camel, используя Spring DSL с привязкой bean-компонента в первую очередь?

Например, этот:

package org.my.package;

public class SomeClass {
     public SomeClass() {}

     public SomeClass(String param1, String param2) {
        ...
     }

     public void doSomething() {
     }
}

Вызов метода с использованием конструктора по умолчанию (без аргументов) ясен:

<to uri="bean:org.my.package.SomeClass?method=doSomething" />

1 Ответ

0 голосов
/ 23 февраля 2020

Вы можете создать экземпляр класса только с помощью конструктора по умолчанию без аргументов. Но вы можете использовать свойства bean для заданных полей класса.

Bean

<bean class="org.my.pack.SomeClass" factor:bean-type="DEFAULT"
    id="SomeClass" name="SomeClass">
    <property name="param1" value="Value1"/>
    <property name="param2" value="Value2"/>
</bean>

Class

package org.my.pack;

public class SomeClass {
    public String param1;
    public String param2;

    public String getParam1() {
        return param1;
    }

    public void setParam1(String param1) {
        this.param1 = param1;
    }

    public String getParam2() {
        return param2;
    }

    public void setParam2(String param2) {
        this.param2 = param2;
    }

    public String doSomething() {
        return "Param1 - " + param1 + " Param2 - " + param2;
    }

    public static void main(String[] args) {

    }
}

Или вы также можете использовать аннотации для параметров метода и принимать значения из например, заголовки (https://camel.apache.org/manual/latest/parameter-binding-annotations.html)

public String doSomething(@Header("param1") String param1,   @Header("param2") String param2) {
    return "Param1 - " + param1 + " Param2 - " + param2;
}
...