Good catch :)

Jan

> -----Ursprüngliche Nachricht-----
> Von: Aki Yoshida [mailto:elak...@gmail.com]
> Gesendet: Donnerstag, 18. Dezember 2014 18:29
> An: users@camel.apache.org
> Betreff: Re: AW: camel - xsd
> 
> Jan and I had a couple of email exchange on this.
> It turns out that the compliance check at the beginning of the
> processing was not working when there is no xml-declaration in the
> input.
> Consequently, when your input message has no xml-declaration and you
> have sjxp parser, you will get incorrectly extracted tokens.
> I created CAMEL-8164 to fix this.
> 
> 2014-12-17 19:35 GMT+01:00 Aki Yoshida <elak...@gmail.com>:
> > @Jan,
> > the failing test itself is expected if you don't have woodstox. The
> > question is how it is failing, whether it stops at the beginning and
> > throws the exception like in the quoted console output in my previous
> > reply or after extracting the bad token and when comparing the token?
> > You mentioned that you observed this second behavior and I would like
> > to know where I can reproduce it.
> >
> > thanks.
> >
> >
> > 2014-12-17 16:40 GMT+01:00 Jan Matèrne (jhm) <apa...@materne.de>:
> >> Java(TM) SE Runtime Environment (build 1.7.0_21-b11) Java
> HotSpot(TM)
> >> 64-Bit Server VM (build 23.21-b01, mixed mode) by Oracle (according
> >> to the copyright file)
> >> - without woodstox: fail
> >> - with woodstox: pass
> >>
> >>
> >> Same for
> >> Java(TM) SE Runtime Environment (build 1.6.0_43-b01) Java
> HotSpot(TM)
> >> 64-Bit Server VM (build 20.14-b01, mixed mode) (also Oracle)
> >>
> >>
> >> Same for
> >> Java(TM) SE Runtime Environment (build 1.8.0-ea-b87) Java
> HotSpot(TM)
> >> 64-Bit Server VM (build 25.0-b28, mixed mode) (also Oracle)
> >>
> >>
> >> Same for
> >> Java(TM) SE Runtime Environment (build 1.9.0-ea-b06) Java
> HotSpot(TM)
> >> 64-Bit Server VM (build 25.0-b62, mixed mode) (also Oracle)
> >>
> >>
> >> All on Win7 64bit.
> >>
> >>
> >> Jan
> >>
> >>
> >>
> >>> -----Ursprüngliche Nachricht-----
> >>> Von: Aki Yoshida [mailto:elak...@gmail.com]
> >>> Gesendet: Mittwoch, 17. Dezember 2014 15:49
> >>> An: users@camel.apache.org
> >>> Cc: Jan Matèrne (jhm)
> >>> Betreff: Re: AW: camel - xsd
> >>>
> >>> @Jan
> >>> I just ran the camel-core's unit test
> XMLTokenExpressionIteratorTest
> >>> on
> >>> jdk8 without woodstox (use profile deactivation -P!woodstox to
> >>> disable woodstox), the tokenizer correctly reports the error at the
> >>> beginning without proceeding to the tokenizing step. (on both OSX
> >>> and Ubuntu with Oracle JDK8).
> >>>
> >>>
> testExtractSomeUnqualifiedChild(org.apache.camel.support.XMLTokenExp
> >>> res
> >>> sionIteratorTest)
> >>>  Time elapsed: 0.001 sec  <<< ERROR!
> >>> javax.xml.stream.XMLStreamException: reader not supporting Location
> >>> at
> >>>
> org.apache.camel.support.XMLTokenExpressionIterator$XMLTokenIterator
> >>> .<i
> >>> nit>(XMLTokenExpressionIterator.java:219)
> >>>
> >>> Can you tell me which JDK you had to get the incorrectly extracted
> >>> tokens?
> >>>
> >>> thanks
> >>>
> >>> 2014-12-16 14:27 GMT+01:00 Aki Yoshida <elak...@gmail.com>:
> >>> > @Jan,
> >>> > I just missed your previous replies.
> >>> > I just saw you also have provided the JDK info already.
> >>> > thanks.
> >>> >
> >>> > 2014-12-16 14:25 GMT+01:00 Aki Yoshida <elak...@gmail.com>:
> >>> >> It's good to hear it is working in your environment.
> >>> >>
> >>> >> by the way, I saw your camael doc update regarding the concrete
> >>> error
> >>> >> example you saw.
> >>> >> We need to formulate that differently.
> >>> >> There is a small sanity check before starting the tokenization
> >>> >> (not comparing the impl name itself but trying to infer its
> >>> >> conformance
> >>> by
> >>> >> its initial behavior). That check was working for Oracle JDK 7
> on
> >>> OSX.
> >>> >> I would like to know which JDK that you use. In any case, we can
> >>> >> either make the initial sanity check to detect this incompatible
> >>> >> behavior and detect it later if it is not detected at the
> beginning.
> >>> >> In either way, we can throw an exception at some point.
> >>> >>
> >>> >> regards, aki
> >>> >>
> >>> >> 2014-12-16 10:18 GMT+01:00 Jan Matèrne (jhm)
> <apa...@materne.de>:
> >>> >>> 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.xs
> >>> >>>> >>>> > d")
> >>> >>>> >>>> >
> >>> >>>> >>>> >                     // 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/comple
> >>> >>>> >>>> > x/">
> >>> >>>> >>>> >
> >>> >>>> >>>> >         <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/comple
> >>> >>>> x/
> >>> >>>> >>>> > 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