> in camel example here :
> 
> <camelContext id="xpathHeaderNameTest"<b>
>         <xpath headerName="invoiceDetails">/invoice/@orderType =
'premium'</xpath>

Means a header "invoiceDetails" with data like <invoice
@orderType="premium"/>


>                       <log message="*****************
${headers.RouteConfiguration}***************" />
>                                       <xpath
headerName="ROUTE_CONFIGURATION_HEADER">authorizationCheck/text()='enabled'<
/xpath>

Which header do you want to access?
- RouteConfiguration
- ROUTE_CONFIGURATION_HEADER

Again header structure for ROUTE_CONFIGURATION_HEADER is something like
<authorizationCheck>enabled</authorizationCheck>


I played a little bit on headers (using JavaDSL) if this helps.


Jan



import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.junit.Test;

public class XPathHeaderTest extends CamelTestSupport {

    @Test
    public void header() throws InterruptedException {
 
getMockEndpoint("mock:end").expectedHeaderReceived("NO_AUTHENTIFICATION",
true);
        template.sendBodyAndHeader("direct:header", "<data>123</data>",
"ROUTE_CONFIGURATION_HEADER",
"<authorizationCheck>disabled</authorizationCheck>");
        assertMockEndpointsSatisfied();
    }
    
    @Test
    public void headerAuth() throws InterruptedException {
 
getMockEndpoint("mock:end").expectedHeaderReceived("WITH_AUTHENTIFICATION",
true);
        template.sendBodyAndHeader("direct:header", "<data>123</data>",
"ROUTE_CONFIGURATION_HEADER",
"<authorizationCheck>enabled</authorizationCheck>");
        assertMockEndpointsSatisfied();
    }
    
    @Test
    public void headerUnknown() throws InterruptedException {
 
getMockEndpoint("mock:end").expectedHeaderReceived("NO_AUTHENTIFICATION",
true);
        template.sendBody("direct:header", "<data>123</data>");
        assertMockEndpointsSatisfied();
    }
    
    
    @Override
    protected RouteBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                String headerName = "ROUTE_CONFIGURATION_HEADER";
                // ensure that the config-header is set, otherwise xpath on
that wont work:
                // org.apache.camel.builder.xml.InvalidXPathExpression: 
                //   Invalid xpath: /authorizationCheck='enabled' with
headerName ROUTE_CONFIGURATION_HEADER. 
                //   Reason: javax.xml.xpath.XPathExpressionException
                from("direct:header")
                    .choice()
                        .when().simple("${in.header." + headerName +
"}").to("direct:withConfigHeader")
                        .otherwise().to("direct:withoutConfigHeader");
                from("direct:withConfigHeader")
                    .choice()
                        .when().xpath("/authorizationCheck='enabled'",
headerName)
                            .setHeader("WITH_AUTHENTIFICATION",
constant(true))
                    .otherwise()
                        .setHeader("NO_AUTHENTIFICATION", constant(true));
                from("direct:withoutConfigHeader")
                    .setHeader("NO_AUTHENTIFICATION", constant(true))
                    .to("mock:end");
            }
        };
    }
}

Reply via email to