2016-12-19 2 views
0

Я пишу настраиваемый компонент для конкретной технологии, но переменная с аннотацией @UriPath не инициализируется. @UriParam в порядке.Непоследовательность аннотации Camel UriPath

Я проверил исходные коды компонентов компонентов Kafka и Servlet, но не смог понять, что действительно делает разницу между ними и моей.

Camel версия: 2.18.1

Endpont, как:

@UriEndpoint(scheme = "elastic", title = "ElasticSearch", syntax = "elastic:url", label = "elastic") 
public class ElasticSearchEndpoint extends DefaultEndpoint { 

    @UriPath 
    private String url; 

    @UriParam 
    private String searchType; 

    public ElasticSearchEndpoint(String endpointUri, ElasticSearchComponent component) { 
     super(endpointUri, component); 
    } 

    public Producer createProducer() throws Exception { 
     return new ElasticSearchProducer(this); 
    } 

    public Consumer createConsumer(Processor processor) throws Exception { 
     return null; 
    } 

    public boolean isSingleton() { 
     return false; 
    } 

    public String getUrl() { 
     return url; 
    } 

    public String getSearchType() { 
     return searchType; 
    } 

    public void setUrl(String url) { 
     this.url = url; 
    } 

    public void setSearchType(String searchType) { 
     this.searchType = searchType; 
    } 

} 

И компонент создан весной:

<bean id="elastic" class="elasticsearch.ElasticSearchComponent" /> 

Любые идеи?

ответ

1

Вам необходимо установить его из класса компонентов и вызвать ядро ​​setUri из компонента.

Только UriParam установлены автоматически.

Посмотрите, как это делает весь существующий компонент Camel.

И, кстати, ваша конечная точка должна быть singleton = true.