I played a little bit.

Jan


public class XmlTest extends CamelTestSupport {

    @EndpointInject(uri="mock:valid")
    MockEndpoint valid;

    @EndpointInject(uri="mock:validationError")
    MockEndpoint validationError;



    @Test
    public void validNewsfeed() throws Exception {
        // Newsfeed contains 2 news
        valid.expectedMessageCount(2);
        valid.expectedMessagesMatches(
            // Use helper methods from the static imported PredicateBuilder
            and(
                header("newsfeed.date").isEqualTo("2014.12.09 14:15"),
                header("news.author").isEqualTo("Jan"),
 
body().contains("xmlns:news=\"http://www.materne.de/camel/test/xml/complex/\
"")
            )                          
        );
        // no error expected
        validationError.expectedMessageCount(0);

        // Read xml from classpath and send to Camel route
        String xml =
IOUtils.toString(getClass().getResourceAsStream("/de/materne/camel/test/xml/
complex/validNewsfeed.xml"));
        sendBody("direct:in", xml);

        // 'execute' all tests
        assertMockEndpointsSatisfied();
    }


    @Test
    public void invalidXml() throws Exception {
        valid.expectedMessageCount(0);
        validationError.expectedMessageCount(1);

        String xml = "<xml/>";
        sendBody("direct:in", xml);

        assertMockEndpointsSatisfied();
    }



    @Override
    protected RouteBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                // Our XML uses namespaces, so we have to deal with that.
                Namespaces ns = new Namespaces("news",
"http://www.materne.de/camel/test/xml/complex/";);
                
                // XSD-invalid data goes to this endpoint
                onException(ValidationException.class)
                    .to("mock:validationError");
                
                from("direct:in")
                    // XSD-validation
 
.to("validator:de/materne/camel/test/xml/complex/newsfeed.xsd")
                    
                    // Store newsfeed data in the header before split, so we
haven't to do that on each 
                    // splittet news-message.
                    .setHeader("newsfeed.date",
ns.xpath("/news:Newsletter/@date";, String.class))
                    
                    // http://camel.apache.org/splitter.html
                    // xtokenize() is available since Camel 2.14.
                    // Use the 'wrap'-mode so we keep the Newsletter-Header
                    .split().xtokenize("/news:Newsletter/News";, 'w', ns)
                    
                    // Workaround of a bug?? in XMLTokenizerExpression
                    .setBody(simple("${body.replace('</</news:Newsletter>',
'</news:Newsletter>')}"))
                    .setBody(simple("${body.replace('<</news:Newsletter>',
'</news:Newsletter>')}"))
                    
                    // Get some data from the splittet news
                    .setHeader("news.date",
ns.xpath("/news:Newsletter/News/@date";, String.class))
                    .setHeader("news.author",
ns.xpath("/news:Newsletter//News/@author";, String.class))
                    
                    .to("mock:valid");
            }
        };
    }

}



<?xml version="1.0" encoding="UTF-8"?>
<schema 
        xmlns="http://www.w3.org/2001/XMLSchema"; 
        xmlns:news="http://www.materne.de/camel/test/xml/complex/";
        targetNamespace="http://www.materne.de/camel/test/xml/complex/";>

        <element name="Newsletter">
            <complexType>
                <sequence>
                        <element name="News" minOccurs="1"
maxOccurs="unbounded">
                                        <complexType>
                                                <simpleContent>
                                                        <extension
base="string">
                                                        <attribute
name="date" type="string"/>
                                                        <attribute
name="author" type="string"/>
                                                        </extension>
                                                </simpleContent>
                                        </complexType>
                        </element>
                </sequence>
                <attribute name="date" type="string"/>
            </complexType>
        </element>

</schema>



<news:Newsletter 
                xmlns:news="http://www.materne.de/camel/test/xml/complex/";
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
        
xsi:schemaLocation="http://www.materne.de/camel/test/xml/complex/
newsfeed.xsd "
                date="2014.12.09 14:15">
        <News date="2014.12.09 14:15" author="Jan">
                Here is a demo news.
        </News>
        <News date="2014.12.09 14:13" author="Jan">
                Second news paragraph.
        </News>
</news:Newsletter>



> -----Ursprüngliche Nachricht-----
> Von: smilevasu6 [mailto:srinivas.thu...@gmail.com]
> Gesendet: Dienstag, 9. Dezember 2014 15:12
> An: users@camel.apache.org
> Betreff: Re: AW: camel - xsd
> 
> Don't mind can you give me sample code instead of link
> 
> 
> 
> --
> View this message in context: http://camel.465427.n5.nabble.com/camel-
> xsd-tp5760376p5760396.html
> Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to