You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Anton <ku...@gmail.com> on 2016/05/21 17:27:11 UTC

Custom component and retrieving UriParam values

Hello

I am trying to build  custom camel component, and have annotated several
properties with @UriParam.

However, these do not seem to get bound to the endpoint class.

What is the recommended way of accessing parameter values?

I am testing my component with the following.

public void configure() {
                from("jsoup://foo")  //TODO: pass i html dock
                .routeId(this.getClass().getSimpleName())

                .log("body is ${body}")
                .to("jsoup://bar&query=myQuery&baseurl=www.test.com")
                  //.to("jsoup://bar?option=2")/
                  .to("mock:result");
            }

This is my Endpoint class:



import org.apache.camel.Consumer;
import org.apache.camel.Processor;
import org.apache.camel.Producer;
import org.apache.camel.impl.DefaultEndpoint;
import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.UriEndpoint;
import org.apache.camel.spi.UriParam;
import org.apache.camel.spi.UriPath;

/**
 * Represents a jsoup endpoint.
 */
@UriEndpoint(scheme = "jsoup", title = "jsoup", syntax="jsoup:query",
consumerClass = jsoupConsumer.class, label = "jsoup")
public class jsoupEndpoint extends DefaultEndpoint {
@UriParam
@Metadata(required = "true")
    private String query;
@UriParam
private String baseurl;


@UriParam(defaultValue = "10")
    private int option = 10;

    public jsoupEndpoint() {
    }

    public jsoupEndpoint(String uri, jsoupComponent component) {
        super(uri, component);
    }

    public jsoupEndpoint(String endpointUri) {
        super(endpointUri);
    }

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

    public Consumer createConsumer(Processor processor) throws Exception {
        return new jsoupConsumer(this, processor);
    }

    public boolean isSingleton() {
        return true;
    }


    public String getBaseurl() {
return baseurl;
}

    /**
     * Sets the base url as used by JSoup
     * @param baseUrl for fetching content
     */
public void setBaseUrl(String baseUrl) {
this.baseurl = baseUrl;
}

    /**
     * Some description of this option, and what it does
     * @param  query for use with jsoup
     */
    public void setQuery(String query) {
        this.query = query;
    }

    public String getQuery() {
        return query;
    }

    /**
     * Some description of this option, and what it does
     * @param  option for use with jsoup
     */
    public void setOption(int option) {
        this.option = option;
    }

    public int getOption() {
        return option;
    }
}

Re: Custom component and retrieving UriParam values

Posted by Claus Ibsen <cl...@gmail.com>.
The option query is not a parameter value but a path value, so you
should use @UriPath.

On Sat, May 21, 2016 at 7:27 PM, Anton <ku...@gmail.com> wrote:
> Hello
>
> I am trying to build  custom camel component, and have annotated several
> properties with @UriParam.
>
> However, these do not seem to get bound to the endpoint class.
>
> What is the recommended way of accessing parameter values?
>
> I am testing my component with the following.
>
> public void configure() {
>                 from("jsoup://foo")  //TODO: pass i html dock
>                 .routeId(this.getClass().getSimpleName())
>
>                 .log("body is ${body}")
>                 .to("jsoup://bar&query=myQuery&baseurl=www.test.com")
>                   //.to("jsoup://bar?option=2")/
>                   .to("mock:result");
>             }
>
> This is my Endpoint class:
>
>
>
> import org.apache.camel.Consumer;
> import org.apache.camel.Processor;
> import org.apache.camel.Producer;
> import org.apache.camel.impl.DefaultEndpoint;
> import org.apache.camel.spi.Metadata;
> import org.apache.camel.spi.UriEndpoint;
> import org.apache.camel.spi.UriParam;
> import org.apache.camel.spi.UriPath;
>
> /**
>  * Represents a jsoup endpoint.
>  */
> @UriEndpoint(scheme = "jsoup", title = "jsoup", syntax="jsoup:query",
> consumerClass = jsoupConsumer.class, label = "jsoup")
> public class jsoupEndpoint extends DefaultEndpoint {
> @UriParam
> @Metadata(required = "true")
>     private String query;
> @UriParam
> private String baseurl;
>
>
> @UriParam(defaultValue = "10")
>     private int option = 10;
>
>     public jsoupEndpoint() {
>     }
>
>     public jsoupEndpoint(String uri, jsoupComponent component) {
>         super(uri, component);
>     }
>
>     public jsoupEndpoint(String endpointUri) {
>         super(endpointUri);
>     }
>
>     public Producer createProducer() throws Exception {
>         return new jsoupProducer(this);
>     }
>
>     public Consumer createConsumer(Processor processor) throws Exception {
>         return new jsoupConsumer(this, processor);
>     }
>
>     public boolean isSingleton() {
>         return true;
>     }
>
>
>     public String getBaseurl() {
> return baseurl;
> }
>
>     /**
>      * Sets the base url as used by JSoup
>      * @param baseUrl for fetching content
>      */
> public void setBaseUrl(String baseUrl) {
> this.baseurl = baseUrl;
> }
>
>     /**
>      * Some description of this option, and what it does
>      * @param  query for use with jsoup
>      */
>     public void setQuery(String query) {
>         this.query = query;
>     }
>
>     public String getQuery() {
>         return query;
>     }
>
>     /**
>      * Some description of this option, and what it does
>      * @param  option for use with jsoup
>      */
>     public void setOption(int option) {
>         this.option = option;
>     }
>
>     public int getOption() {
>         return option;
>     }
> }



-- 
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2