Thank you for the explanation. Chris
2012/1/27 Łukasz Dywicki <l...@code-house.org> > Hey Chris, > Let me try to explain what happens under the hood. > > XSLT transformation requires an instance of javax.xml.transform.Source > [1]. The result from the splitter is a org.w3c.dom.Node (or something > similar). By default your node will be wrapped in DOMSource [2]. The > explicit type conversion lets XSLT work with a Document instead of Node. > Seems that xslt processor handles differently a Document instances and Node > instances, but I don't know why. > > I guess that org.w3c.dom.Document is not supported as result type in > XPathExpression [3] which is used for evaluation. Camel checks only if > result can be assigned to org.w3c.dom.Node. > > Best regards, > Łukasz Dywicki > -- > Code-House > http://code-house.org > > [1] > https://github.com/apache/camel/blob/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java#L409 > [2] > https://github.com/apache/camel/blob/trunk/camel-core/src/main/java/org/apache/camel/converter/jaxp/XmlConverter.java#L266 > [3] > http://docs.oracle.com/javase/1.5.0/docs/api/javax/xml/xpath/XPathExpression.html > > Wiadomość napisana przez Chris Geer w dniu 2012-01-26, o godz. 21:40: > > > Thank you guys. I added the converyBodyTo command instead of my crazy > > setBody command and it seemed to work. I did have to change the attribute > > to type vs javaType though. > > > > I wish I could explain why that was needed though. It seems odd that > split > > would change the data into something not compatible with xslt. I even > tried > > setting the resultType attribute on the split/xpath to > org.w3c.dom.Document > > and it didn't help. > > > > Chris > > > > On Thu, Jan 26, 2012 at 8:12 AM, Doug Douglass <douglass.d...@gmail.com > >wrote: > > > >> Excellent suggestion Łukasz! > >> > >> Chris, have a look at > >> http://camel.apache.org/xslt.html#XSLT-NotesonusingXSLTandJavaVersions, > >> perhaps that will resolve your issue. For my quick unit test I'm using > >> openjdk 1.6.0_22 (ArchLinux-6.b22_1.10.5-1-x86_64) and xalan 2.6.0 was > >> already in my projects dependencies/classpath. > >> > >> Doug > >> > >> > >> 2012/1/26 Łukasz Dywicki <l...@code-house.org> > >> > >>> I think you should not have any problems, the conversion is really > >> simple. > >>> After split statement you have a Node as body. For XSLT you need a > >> Source. > >>> Try adding this instead setBody > >>> > >>> <camel:convertBodyTo javaType="org.w3c.dom.Document" /> > >>> > >>> That should force conversion to document object and I belive fix your > >>> problem. > >>> > >>> Best regards, > >>> Łukasz Dywicki > >>> -- > >>> Code-House > >>> http://code-house.org > >>> > >>> > >>> Wiadomość napisana przez Chris Geer w dniu 2012-01-26, o godz. 01:36: > >>> > >>>> Doug, > >>>> > >>>> It doesn't make much sense to me either but I do know that with the > >>> setBody > >>>> command everything works and without it, it fails. If I run the XSLT > >>>> against the same XML (save the XML to a file from the flow after the > >>> split) > >>>> in netbeans it works fine without the <?xml...?> but in camel it > fails. > >>>> > >>>> Could the split be converting the output to a string? That would > >> explain > >>>> the problem. > >>>> > >>>> Chris > >>>> > >>>> On Wed, Jan 25, 2012 at 5:03 PM, Doug Douglass < > >> douglass.d...@gmail.com > >>>> wrote: > >>>> > >>>>> Chris, > >>>>> > >>>>> I think the xml processing "fix" you've got there is a bit of > >>> red-herring. > >>>>> > >>>>> The xml processing instruction should only be necessary if you are > >>>>> converting the output of the xpath to a String prior to the xslt > >>> endpoint, > >>>>> whether directly or indirectly. Without any explicit conversion, the > >>> output > >>>>> of the xpath will be a Node object (DeferredElementNSImpl in my > test), > >>>>> which is converted to a Source via camel's built-in type conversion. > >>>>> > >>>>> I just set up a quick unit test with a route very similar to yours > and > >>>>> everything worked as I expected. Granted this test was in an existing > >>>>> project using camel 2.7.3 (time to upgrade!). > >>>>> > >>>>> I suspect you're either running into a namespace problem[1] or your > >>>>> templates XPaths aren't expecting Parcel (from your example) as the > >> root > >>>>> element. > >>>>> > >>>>> [1] > >>>>> > >>> > http://camel.apache.org/xpath.html#XPath-Namespaceauditingtoaiddebugging > >>>>> > >>>>> Let us know more info (example XML and XSLT) if my suspicions are off > >>> base. > >>>>> > >>>>> HTH, > >>>>> Doug > >>>>> > >>>>> On Wed, Jan 25, 2012 at 3:35 PM, Chris Geer <ch...@cxtsoftware.com> > >>> wrote: > >>>>> > >>>>>> Sorry, 2.8.3. > >>>>>> > >>>>>> On Wed, Jan 25, 2012 at 3:29 PM, Babak Vahdat > >>>>>> <babak.vah...@swissonline.ch>wrote: > >>>>>> > >>>>>>> And what about the Camel version you use? > >>>>>>> > >>>>>>> Babak > >>>>>>> > >>>>>>> -- > >>>>>>> View this message in context: > >>>>>>> > >>>>>> > >>>>> > >>> > >> > http://camel.465427.n5.nabble.com/Splitting-on-XML-Documents-tp5431032p5431531.html > >>>>>>> Sent from the Camel - Users mailing list archive at Nabble.com. > >>>>>>> > >>>>>> > >>>>> > >>> > >>> > >> > >