You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Steffen Göde (Jira)" <ji...@apache.org> on 2019/11/01 20:56:00 UTC

[jira] [Created] (CAMEL-14126) stax component can cause infinite loop of file component

Steffen Göde created CAMEL-14126:
------------------------------------

             Summary: stax component can cause infinite loop of file component
                 Key: CAMEL-14126
                 URL: https://issues.apache.org/jira/browse/CAMEL-14126
             Project: Camel
          Issue Type: Bug
          Components: camel-stax
    Affects Versions: 2.24.2
            Reporter: Steffen Göde
         Attachments: staxSample.zip

I discovered a situation where the stax component causes an infinite loop of the file component in case of invalid UTF-8 characters in the file. I attached a sample project with the most simplistic route that shows the behaviour:  [^staxSample.zip] 

The input file containes invalid UTF-8 characters. The route definition is as following:
{code:java}
from("file://inbound?moveFailed=.failed")
    .split(stax(Product.class))
        .log("${body.name}");
{code}

I get the exceptions
{quote}
Error renaming file from C:\Users\...\inbound\products.xml to inbound\.failed\products.xml
{quote}
and
{quote}
[javax.xml.stream.XMLStreamException: ParseError at [row,col]:[4,29]
Message: Ungültiges Byte 2 von 3-Byte-UTF-8-Sequenz.]
{quote}

When I marshal the whole document at once I don't get the first exception. When I use the splitter with tokenizeXML I won't get any of the exceptions.

----

The sample contains another example where a combination of Splitter with aggregation + seda route called by inOut and an exception in the seda route causes the infinite loop too (Message is "error renaming file" as above). 

I could figure out that the issue doesn't occur if at least one of the following changes:
- the Exception is thrown in the "file"-route instead of in the seda route
- the aggregation returns the newExchange if the oldExchange is null instead of creating a new DefaultExchange
- "to" instead of "inOut" is used to call the seda endpoint



--
This message was sent by Atlassian Jira
(v8.3.4#803005)