You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@servicemix.apache.org by "Renaud Bruyeron (JIRA)" <ji...@apache.org> on 2007/07/04 17:33:32 UTC

[jira] Commented: (SM-993) StaxSource + FragmentStreamReader interference with TRaX

    [ https://issues.apache.org/activemq/browse/SM-993?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_39606 ] 

Renaud Bruyeron commented on SM-993:
------------------------------------


After applying the patch:
{code}
$ cd core/servicemix-core
$ mvn -Dtest=FragmentStreamReaderTest
{code}

To see that saxon + StreamResult works, you need to modify the servicemix-core pom to add saxon to the classpath:
{code:title=core/servicemix-core/pom.xml}
     <dependency>
      <groupId>net.sf.saxon</groupId>
      <artifactId>saxon</artifactId>
      <version>8.8</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>net.sf.saxon</groupId>
      <artifactId>saxon-dom</artifactId>
      <version>8.8</version>
      <scope>test</scope>
    </dependency>
{code}

Then change the testcase like so:
{code:title=switch to stream mode}
    public void testStaxSourceOnFragmentStream() throws Exception {
        InputStream is = getClass().getResourceAsStream("mm7.xml");
        InputStream xlsis = getClass().getResourceAsStream("clean-namespace.xsl");
        XMLInputFactory factory = XMLInputFactory.newInstance();
        factory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.FALSE);
        XMLStreamReader xsr = factory.createXMLStreamReader(is);
        xsr.nextTag();
        StaxSource ss = new StaxSource(new FragmentStreamReader(xsr));
        Transformer transformer = TransformerFactory.newInstance().newTransformer(new StreamSource(xlsis));
        //DOMResult result = new DOMResult();
        StringWriter sw = new StringWriter();
        StreamResult result = new StreamResult(sw);
        transformer.transform(ss, result);
        System.out.println(sw.toString());
        // output must be a document
        //assertTrue(Document.class.isAssignableFrom(result.getNode().getClass()));
        // there should be more than one element in the output document
        //assertTrue(result.getNode().getChildNodes().getLength() > 0);
    }
{code}

You should see this in the output:
{code}
<?xml version="1.0" encoding="UTF-8"?>
<SubmitReq xmlns="http://www.firsthop.com/specs/MM7-extended/MM7-extended-1-2">
   <MM7Version>5.3.0</MM7Version>
   <SenderIdentification>
      <VASPID>yo</VASPID>
      <VASID>dude</VASID>
      <SenderAddress>
         <Number>33611111125</Number>
      </SenderAddress>
   </SenderIdentification>
   <Recipients>
      <To>
         <Number>33601020304</Number>
      </To>
   </Recipients>
   <ServiceCode>9999</ServiceCode>
   <MessageClass>Personal</MessageClass>
   <TimeStamp>2007-07-04T11:49:38.260Z</TimeStamp>
   <DeliveryReport>false</DeliveryReport>
   <Content allowAdaptations="true" href="cid:mmscontent"/>
</SubmitReq>
{code}

> StaxSource + FragmentStreamReader interference with TRaX
> --------------------------------------------------------
>
>                 Key: SM-993
>                 URL: https://issues.apache.org/activemq/browse/SM-993
>             Project: ServiceMix
>          Issue Type: Bug
>          Components: servicemix-core
>    Affects Versions: 3.1.1
>         Environment: JDK5
>            Reporter: Renaud Bruyeron
>         Attachments: patch.txt
>
>
> My use-case is this:
> * a message comes in via an http:endpoint - it is a soap with attachment message, and thus the body is stored in a SoapMessage as a StaxSource, and a FragmentStreamReader is used to cut out the SOAP envelope and only keep the content of the soap message.
> * I try to apply an XSL on this body directly - I notice that it fails (output document is empty)
> * if I switch to saxon (instead of the default TrAx=xalan 2.7.0), it kind of works if I use a StreamResult, but not if I use a DOMResult: saxon complains that something is doing some unspeakable deed with namespaces ;-)
> I narrowed this down to the FragmentStreamReader, and wrote a simple testcase that shows the bug. However I can't see what's throwing off xalan/saxon, I am not familiar enough with Stax, therefore I don't have a fix.
> The testcase includes: an XML document, an XSL stylesheet, and a new testcase in FragmentStreamReaderTest

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.