I also published the demo
https://github.com/janmaterne/CamelXtokenizer

Jan

> -----Ursprüngliche Nachricht-----
> Von: Jan Matèrne (jhm) [mailto:apa...@materne.de]
> Gesendet: Dienstag, 16. Dezember 2014 12:45
> An: users@camel.apache.org
> Betreff: AW: AW: camel - xsd
> 
> done
> 
> Jan
> 
> > -----Ursprüngliche Nachricht-----
> > Von: Claus Ibsen [mailto:claus.ib...@gmail.com]
> > Gesendet: Dienstag, 16. Dezember 2014 12:11
> > An: users@camel.apache.org
> > Betreff: Re: AW: camel - xsd
> >
> > Hi
> >
> > Ya sure its a good idea to update the docs with your findings.
> >
> > On Tue, Dec 16, 2014 at 11:09 AM, Jan Matèrne (jhm)
> > <apa...@materne.de>
> > wrote:
> > > I stripped down my own example and did a cross check to yours:
> > >
> > > When running on Java 1.8.0_20-ea-b20 the test failed.
> > > When I add Woodstox 4.4.1 as dependency the test passed.
> > >
> > > Same results when using Java 1.9.0-ea-b06.
> > >
> > > https://camel.apache.org/splitter.html sais "Note that this StAX
> > based
> > > tokenizer's uses StAX Location API and requires a StAX Reader
> > implementation (e.g., woodstox) that correctly returns the offset
> > position pointing to the beginning of each event triggering segment
> > (e.g., the offset position of '<' at each start and end element
> > event)."
> > >
> > >
> > > As we found the reason for the "error", should I update that
> > paragraph to say something about the consequences of a missing StAX-
> > with-Location?
> > >
> > >
> > > Jan
> > >
> > >
> > >
> > >> -----Ursprüngliche Nachricht-----
> > >> Von: Jan Matèrne (jhm) [mailto:apa...@materne.de]
> > >> Gesendet: Dienstag, 16. Dezember 2014 10:19
> > >> An: users@camel.apache.org
> > >> Betreff: AW: AW: camel - xsd
> > >>
> > >> Sorry for my late answer, I was ill :(
> > >>
> > >> Thanks for your sample project, I investigated into it now.
> > >> All tests passed. (Camel 2.14.0)
> > >>
> > >> But your test used the XMLTokenExpressionIterator directly I
> > migrated
> > >> my own test class (using the RouteBuilder) into your project.
> > >> - added the test class
> > >> - added the xsd
> > >> - added the dependency to commons-io + camel-test-spring
> > >> - changed the paths in my test class to fit your directory layout
> > Now
> > >> this also passed.
> > >>
> > >> It's good to see that there is no bug in Camel. ;)
> > >>
> > >>
> > >> Because my example still fails in my other environment I check
> that
> > ...
> > >>
> > >>
> > >> Jan
> > >>
> > >>
> > >> > -----Ursprüngliche Nachricht-----
> > >> > Von: Aki Yoshida [mailto:elak...@gmail.com]
> > >> > Gesendet: Mittwoch, 10. Dezember 2014 23:57
> > >> > An: users@camel.apache.org
> > >> > Betreff: Re: AW: camel - xsd
> > >> >
> > >> > i meant woodstox-core-asl (e.g., woodstox-core-asl-4.4.1.jar).
> > >> > its maven coordinate is
> > >> >
> > >> > mvn:org.codehaus.woodstox/woodstox-core-asl/4.4.1
> > >> >
> > >> > you need to have woodstox or some other parser that reliably
> > >> > reports the offset location at each parse event.
> > >> > Sjsxp (sun/oracle implementation included in JDK) doesn't do
> > >> > that, so you can't use it.
> > >> >
> > >> > jmtest.tar.gz contains a maven project that can be executed
> > >> > directly by typing mvn test at the console or can be imported
> > >> > into your
> > >> eclipse
> > >> > IDE.
> > >> >
> > >> > 2014-12-10 13:13 GMT+01:00 Aki Yoshida <elak...@gmail.com>:
> > >> > > i just created a test that uses your data and verified that it
> > is
> > >> > working fine.
> > >> > > please take a look at this file at my dropbox.
> > >> > > https://www.dropbox.com/s/pfgvs9si9bvujxo/jmtest.tar.gz?dl=0
> > >> > > just extract the files into camel-core and run JMNewsTest.
> > >> > > and see if that works in your environment, (i believe it
> does).
> > >> > >
> > >> > > in that case, we need to find out the difference to your case.
> > >> > > do you have woodstox-api in your class path?
> > >> > >
> > >> > >
> > >> > > 2014-12-10 12:15 GMT+01:00 Aki Yoshida <elak...@gmail.com>:
> > >> > >> okay.
> > >> > >> let me take a look.
> > >> > >>
> > >> > >>
> > >> > >> 2014-12-10 12:02 GMT+01:00 Jan Matèrne (jhm)
> > <apa...@materne.de>:
> > >> > >>> 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/%3C
> > >> > >>> 002b01d01452%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:elak...@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)
> > <apa...@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.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.
> > >> > >>>> >
> > >> > >>>
> > >
> > >
> >
> >
> >
> > --
> > Claus Ibsen
> > -----------------
> > Red Hat, Inc.
> > Email: cib...@redhat.com
> > Twitter: davsclaus
> > Blog: http://davsclaus.com
> > Author of Camel in Action: http://www.manning.com/ibsen
> > hawtio: http://hawt.io/
> > fabric8: http://fabric8.io/


Reply via email to