| == Splitting big XML payloads |
| |
| === Introduction |
| |
| This example shows how to deal with big XML files in Camel. |
| |
| The XPath tokenizer will load the entire XML content into memory, so |
| it's not well suited for very big XML payloads. |
| Instead, you can use the StAX or XML tokenizers to efficiently iterate |
| the XML payload in a streamed fashion. |
| For more information please read the |
| http://camel.apache.org/splitter.html[official documentation]. |
| |
| There are 2 tests: |
| |
| [arabic] |
| . `StaxTokenizerTest` : requires using JAXB and process messages using |
| a SAX ContentHandler |
| . `XmlTokenizerTest` : easier to use but can't handle complex XML |
| structures (i.e. nested naming clash) |
| |
| The test XML contains a simple collection of records. |
| |
| [source,xml] |
| ---- |
| <?xml version="1.0" encoding="UTF-8"?> |
| <records xmlns="http://fvaleri.it/records"> |
| <record> |
| <key>0</key> |
| <value>The quick brown fox jumps over the lazy dog</value> |
| </record> |
| </records> |
| ---- |
| |
| You can customize numOfRecords and maxWaitTime to do performance tests |
| with different payloads. + |
| Max JVM heap is restricted to 20 MB to show that it works with a very |
| limited amount of memory (see `pom.xml`). |
| |
| There are also a number of optional runtime settings: - no cache enabled |
| - no parallel processing - no mock endpoints with in-memory exchange |
| store - enabled Throughput Logging for DEBUG level - disabled JMX |
| instrumentation |
| |
| === Build and run |
| |
| The test XML file is built once beforehand using `@BeforeClass`. |
| |
| [source,sh] |
| ---- |
| $ mvn test |
| ---- |
| |
| === Test results |
| |
| Tested on MacBook Pro 2,8 GHz Intel Core i7; 16 GB 2133 MHz LPDDR3; Java |
| 1.8.0_181. |
| |
| [cols=",,,,",options="header",] |
| |=== |
| |tokenizer |numOfRecords |maxWaitTime (ms) |XML size (kB) |time (ms) |
| |StAX |40000 |5000 |3543 |3052 |
| |XML |40000 |5000 |3543 |2756 |
| |StAX |1000000 |20000 |89735 |11740 |
| |XML |1000000 |20000 |89735 |11137 |
| |StAX |15000000 |200000 |1366102 |132176 |
| |XML |15000000 |200000 |1366102 |132549 |
| |=== |
| |
| === Help and contributions |
| |
| If you hit any problem using Camel or have some feedback, then please |
| https://camel.apache.org/community/support/[let us know]. |
| |
| We also love contributors, so |
| https://camel.apache.org/community/contributing/[get involved] :-) |
| |
| The Camel riders! |