camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jan Matèrne (jhm) <apa...@materne.de>
Subject AW: AW: camel - xsd
Date Wed, 10 Dec 2014 11:02:56 GMT
No, input is valid xml.
After invoking xtokenize() the xml is invalid.

CAMEL-8106 is very .... short. I can't see whether it is related.


I posted an example on the user list
http://mail-archives.apache.org/mod_mbox/camel-users/201412.mbox/%3C002b01d01452%24e8ee27a0%24baca76e0%24%40de%3E

I had done a 'workaround' for this special example
    // Workaround of a bug?? in XMLTokenizerExpression
    .setBody(simple("${body.replace('</</news:Newsletter>', '</news:Newsletter>')}"))
    .setBody(simple("${body.replace('<</news:Newsletter>', '</news:Newsletter>')}"))

Without that the split messages have wrong end tags.


Jan


> -----Ursprüngliche Nachricht-----
> Von: Aki Yoshida [mailto:elakito@gmail.com]
> Gesendet: Mittwoch, 10. Dezember 2014 10:34
> An: users@camel.apache.org
> Betreff: Re: AW: camel - xsd
> 
> you are talking about the invalid-xml parsing bug in xtokenzier.
> that has been fixe with CAMEL-8106. It should be part of the new
> 2.14.1, which is to be released shortly.
> 
> regards, aki
> 
> 2014-12-10 9:25 GMT+01:00 Jan Matèrne (jhm) <apache@materne.de>:
> > 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/com
> > plex/\
> > "")
> >             )
> >         );
> >         // no error expected
> >         validationError.expectedMessageCount(0);
> >
> >         // Read xml from classpath and send to Camel route
> >         String xml =
> >
> IOUtils.toString(getClass().getResourceAsStream("/de/materne/camel/tes
> > t/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.thunga@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.
> >


Mime
View raw message