You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cg...@apache.org on 2024/03/25 00:21:52 UTC

(plc4x) branch feature/merlot updated (529ea92ff4 -> 9e3c73509a)

This is an automated email from the ASF dual-hosted git repository.

cgarcia pushed a change to branch feature/merlot
in repository https://gitbox.apache.org/repos/asf/plc4x.git


    from 529ea92ff4 Updating to 0.12.0-SNAPSHOT.
     add 1d8b596a66 Team/glcj (#1326)
     add c27ccbbcdd fix(plc4py/modbus): Tidy up the Modbus implementation
     add bede1cdad1 build(deps): bump org.apache.rat:apache-rat-plugin from 0.15 to 0.16 (#1329)
     add dd40563bb7 build(deps): bump golang.org/x/net from 0.19.0 to 0.20.0 in /plc4go (#1327)
     add a14fa487b0 build(deps): bump slf4j.version from 2.0.10 to 2.0.11 (#1328)
     add 7aa46a2696 fix(website): Update hutcheb details
     add d074450071 build(deps): bump org.apache.karaf.tooling:karaf-maven-plugin (#1334)
     add 4a30540658 build(deps): bump org.apache.maven.plugins:maven-surefire-plugin (#1333)
     add bfdc6f06ed build(deps): bump org.apache.maven.plugins:maven-failsafe-plugin (#1332)
     add eb52a8856c build(deps): bump nl.jqno.equalsverifier:equalsverifier (#1331)
     add 443d1449a6 build(deps): bump golang.org/x/tools from 0.16.1 to 0.17.0 in /plc4go (#1337)
     add afbf8121a0 build(deps): bump com.microsoft.azure.sdk.iot:iot-device-client (#1336)
     add fceee4cec9 build(deps): bump com.google.protobuf:protobuf-java (#1335)
     add df8a231cc3 build(deps): bump mockito.version from 5.8.0 to 5.9.0 (#1341)
     add ea0144865c build(deps): bump org.asciidoctor:asciidoctor-maven-plugin (#1340)
     add 6fdc24b7b2 build(deps): bump org.cyclonedx:cyclonedx-maven-plugin (#1345)
     add 85faa461a5 build(deps): bump netty.version from 4.1.104.Final to 4.1.105.Final (#1343)
     add c488aa935e build(deps): bump actions/cache from 3 to 4 (#1347)
     add 83031bcca5 build(deps): bump actions/dependency-review-action from 3 to 4 (#1348)
     add c8a4d8e5f4 build(deps): bump groovy.version from 4.0.17 to 4.0.18 (#1349)
     add dbbcbd5ab1 Feature/new UI tool (#1350)
     add 663bf957bc refactor: Renamed the frontend directory inside the frontend module to "project"
     add 008b8f791c build: Tested the new 0.16.1 version of Rat and left a comment to update to 0.16.1, once that's released.
     add e9ffa6bb84 fix: Replaced the while-loop in the ProfinetDevice with a timer triggered executor and this made the connection stable.
     add 86d4a5d6d2 build: Updated the Java version used to build PLC4X on jenkins to 21 as using Java 11 was causing the sonacube plugin to fail and this way also the new UI module is built.
     add 806fdf5854 build(deps): bump netty.version from 4.1.105.Final to 4.1.106.Final (#1353)
     add 5cf934e6c1 build(deps): bump com.github.eirslett:frontend-maven-plugin (#1352)
     add cf643ab291 build(deps): bump org.aspectj:aspectjweaver from 1.9.20.1 to 1.9.21 (#1357)
     add baf214918f build(deps): bump org.springframework.boot:spring-boot-maven-plugin (#1355)
     add af6bdd53da fix: Found and fixed the reason for the second reconnect to fail.
     add 93c4f7cf14 build(deps): bump org.springframework.boot:spring-boot-dependencies (#1360)
     add 7b339cf04a build(deps): bump github.com/google/uuid from 1.5.0 to 1.6.0 in /plc4go (#1358)
     add b6fbfbcc1d feat(plc4go/connectioncache): add GetConnectionWithContext to connection cache
     add fae748c366 fix(plc4go): ensure discoverer respect context cancel
     add 4e5203affa build(deps): bump mockito.version from 5.9.0 to 5.10.0 (#1365)
     add 6010002115 build(deps): bump org.apache.rat:apache-rat-plugin from 0.15 to 0.16 (#1354)
     add 6142f2429d chore: update notice year to 2024 (#1351)
     add 54888eaa7e fix: Gave the initial connection request a bit more time ... also tried to find the reason for the reconnects.
     add d54b88de97 fix: Gave the initial connection request a bit more time ... also tried to find the reason for the reconnects.
     add b5396263db chore: Update vendor ids
     add 0395846889 chore: Update vendor ids
     add 1f9a949a78 fix: Reduced the version of the rat plugin till the version 0.16.1 is released, which will fix the problem causing the build to pause for several minutes.
     add dc6dd21db3 feat: Implemented the functionality to edit, add, delete devices.
     add be54e22225 fix: Fixed a build error.
     add b529aff5d1 build: Adjusted the java versions for the matrix from 19 to 21
     add cc2c773386 build(deps): bump org.codehaus.mojo:license-maven-plugin (#1368)
     add dc8e5f9def build(deps): bump io.swagger:swagger-annotations from 1.6.12 to 1.6.13 (#1367)
     add d63099d9e7 build(deps): bump io.jsonwebtoken:jjwt-api from 0.12.3 to 0.12.4 (#1370)
     add 5cbce4cace build(deps): bump org.apache.rat:apache-rat-plugin from 0.15 to 0.16.1 (#1369)
     add 7ca76028c4 fix(plc4j/eip): Remove unnecessary Thread.sleep (#1374)
     add dadd5fce48 build(deps): bump release-drafter/release-drafter from 5 to 6 (#1377)
     add e21e1cc382 add Apache Hop Logo
     add e2043bf8e5 build(deps): bump github.com/rs/zerolog from 1.31.0 to 1.32.0 in /plc4go (#1378)
     add e750c3d34c build(deps): bump com.influxdb:influxdb-client-java from 6.12.0 to 7.0.0 (#1372)
     add 2b64eb5693 build(deps): bump nifi.version from 1.24.0 to 1.25.0 (#1371)
     add a7310e34de feat: Added support for all missing S7 64bit types (L-Types) as well as Duration/Time/Date types
     add bdab045bbe build(deps): bump org.assertj:assertj-core from 3.25.1 to 3.25.3 (#1381)
     add 4c89f63445 build(deps): bump org.asciidoctor:asciidoctorj-diagram (#1380)
     add 570cf1ea79 chore: Updated some generated knx files
     add faba6fec57 fix(plc4go): port over s7 changes to golang
     add 3d2ab35678 chore(plc4go): fix build not failing properly
     add add6906273 fix: Ensured everywhere a transaction manager is created, that it's also shutdown correctly.
     add 80d6de9156 chore: Fixed a variable with wrong case.
     add 90f43c9204 chore(plc4go): fix build
     add 51434bd8bd feat(plc4go): support for DATE_AND_LTIME
     add 464f5106d9 fix: fixed the build prior to java 19
     add fdda471da2 fix(plc4go/s7): port over some changes from plc4j
     add fb33c7b011 fix(plc4go): wrong logger usage
     add fc89f789a8 fix(knx): Fixed the typed for knx datatypes PDT_BITSET8 and PDT_BITSET16
     add f8a4a33d87 chore: Made sure the tests are only executed once.
     add 29aad05163 chore(build): add a `with-java` profile to speed up build
     add 1171c41522 chore(plc4go): test bump
     add 8aebf3ced7 chore: dispatch issues to issues [skip ci]
     add 1259eb15d4 fix(knx): Fixed how 16 bit floating-point numbers are parsed.
     add a9a8a531c5 chore: Updated the RELEASE_NOTES
     add 5bc0a4e895 chore: Updated the RELEASE_NOTES
     add 8c9c06157e build(deps): bump joda-time:joda-time from 2.12.6 to 2.12.7 (#1386)
     add a21858e1b8 build(deps): bump milo.version from 0.6.11 to 0.6.12 (#1385)
     add ae87e18504 build(deps): bump io.jsonwebtoken:jjwt-api from 0.12.4 to 0.12.5 (#1384)
     add 0eeb4da8aa build(deps): bump junit.jupiter.version from 5.10.1 to 5.10.2 (#1383)
     add add5c37040 chore: Update vendor ids
     add 77a9b12f69 fix: Fixed the configuration options for serial transports (the parity, was actually not the number of parity bits, but the type of parity being used) feat: Now it's possible to use enums in configuration.
     add ae0ef34921 build(deps): bump golang.org/x/net from 0.20.0 to 0.21.0 in /plc4go (#1387)
     add 9798603829 build(deps-dev): bump org.json:json from 20231013 to 20240205 (#1388)
     add 3681c5bf38 build(deps): bump slf4j.version from 2.0.11 to 2.0.12 (#1389)
     add c6ae867d88 build(deps): bump org.eclipse.jetty:jetty-util from 11.0.19 to 11.0.20 (#1390)
     add f132b0b943 fix: Made sure plc-values are serialized in LittleEndian format
     add 4048a8afbd build(deps): bump commons-codec:commons-codec from 1.16.0 to 1.16.1 (#1392)
     add a65b483bf8 build(deps): bump com.gradle:gradle-enterprise-maven-extension (#1393)
     add 6cc7d4b3ba Fixed the last problems with writing complex types to ADS (#1394)
     add 780a104cba feat(plc4py/umas): UMAS implementation (#1339)
     add 5580b2bf6e Fix/enum discriminators (#1395)
     add 0468254247 chore: Disabled the flaky test again in order to make the build pass. (Investigating the issue in a separate PR)
     add 725f1f5991 build(deps): bump org.asciidoctor:asciidoctor-maven-plugin (#1398)
     add 9f658e6ded fix(plc4go): options should now correctly be applied
     add b1619a1632 test(plc4go): fix configuration test
     add c572e58db5 feat: Implementation of opc ua client security.
     add 7202ec6530 fix: Fix remaining unit tests.
     add 6692f6f8ea feat: OPC-UA mspec updates.
     add d0893d7ac7 feat(plc4j/opcua): Chunking and encryption of request/response calls.
     add f8b0b3bf77 fix(plc4go): Update golang opcua structs.
     add 6b033d3f7d fix(plc4go): Fix golang compile errors.
     add 271e1cbfb0 fix(plc4j): Stabilization of build after opcua security PR merges.
     add 3c380ae5cf Links to S7 & Modbus Adapter
     add 550b8ade1a build(deps): bump org.asciidoctor:asciidoctorj-diagram (#1403)
     add 267f597ce0 build(deps): bump golang.org/x/tools from 0.17.0 to 0.18.0 in /plc4go (#1402)
     add 70bf2a5caa Auto-Generated Driver Documentation
     add 8c4bd28a43 refactor: Refactored the API to provide metadata information directly.
     add dce42c45a3 fix: Updated the connection string to the updated attribute names.
     add 11de90a46a fix: Enabled the "with-java" profile when building the plc4j-driver-all
     add f7a6a3406e fix: Fixed several issues with the new generated-documentation.
     add 2ab1795b35 fix: Fixed several issues with the new generated-documentation.
     add e156be1c08 docs: Made the current-last-released-version be output instead of the place-holder.
     add 387c44f01c feat: add support for nested configuration in the metadata reporting
     add aa8a3c906a feat: add support for nested configuration in the metadata reporting
     add 12f08bebbc feat: add support for nested configuration in the metadata reporting
     add e34fa6571b build(deps): bump org.aspectj:aspectjweaver from 1.9.21 to 1.9.21.1 (#1404)
     add fd53a59a68 docs: Updated two more places, where we didn't output a concrete version in the docs.
     add ccd8bd2266 fix: nested defaults should now be unwrapped
     add b5912bd50c docs: Updated the way the headlines of the transport options are highlighted to using h4 blocks.
     add bc51fe49d9 Corrects the call to generate events that were commented. Tests again… (#1400)
     add 0329142126 refactor: Cleaned up in the API (moved the PlcConfiguration-related interfaces back to SPI), renamed the "canX()" methods to match the bean naming convention of "isXSupported()". Also removed one or two obsolete interfaces)
     add 15fc55ebec chore: Added the osgi bundle generation calls to the bacnet plugin (It was the only one missing this)
     add 2a3e5eab9a feat: Added the code for signing all artifacts after the release-build was finished.
     add ec7a614049 feat: Finished a first version of the release scripts.
     add fa615dc366 feat: Added a pingAddress config option to the modbus driver, which allows providing an address string, that can be used for ping-operations (Defaults to reading holding-register:1)
     add 526ca16b82 docs: Fixed some invalid links on the webpage.
     add f3b528284d chore: updated generated code
     add a1da03aa01 docs: Updated the most recent changes.
     add 9e7c44f9c9 build: Fixed an issue in the release-1-create-branch.sh script.
     add 69f0886af7 build: Fixed a typo
     add ec728f98e4 build: Fixed a problem in the build not having set the git user email and name in docker.
     add 8696ebd5e7 build: Fixed a problem in the build not having set the git user email and name in docker.
     add f27cc07c20 build: Made the branch operation run on the host and not in docker.
     add 9c1ec178b3 build: Made the branch operation run on the host and not in docker.
     add 8e5f659f54 build: Made the release-prepare operation run on the host and not in docker.
     add eedc76e736 [maven-release-plugin] prepare branch @{releaseLabel}
     add de19e70c2a [maven-release-plugin] prepare for next development iteration
     add 2be8f3cc19 chore: prepared the RELEASE_NOTES for the next version.
     add ed758a0637 build: Fixed a minor issue in the prepare-release script.
     add 276a6b201f chore: Some improvements added during the last release attempt
     add 98b44c3280 chore: Reset everything for a new release attempt using the scripts.
     add 562982aadc [maven-release-plugin] prepare branch @{releaseLabel}
     add ab21a4e532 [maven-release-plugin] prepare for next development iteration
     add ec3e662ebe chore: prepared the RELEASE_NOTES for the next version.
     add f8bead6f53 chore: Reset everything for a new release attempt using the scripts.
     add 39adc7b982 chore: Improved the release-abort.sh script.
     add 99ad2bc23a [maven-release-plugin] prepare branch @{releaseLabel}
     add cf8efbebae [maven-release-plugin] prepare for next development iteration
     add c3407374ce chore: prepared the RELEASE_NOTES for the next version.
     add d860c19b15 build: Globally disabled signing of artifacts (Required for release with our new build scripts)
     add edb872a8be chore: Reset everything for a new release attempt using the scripts.
     add 667aa1ec8d chore: Improved the release-abort.sh script.
     add 40387b4109 [maven-release-plugin] prepare branch @{releaseLabel}
     add 458736a0a1 [maven-release-plugin] prepare for next development iteration
     add b21ddf8a24 chore: prepared the RELEASE_NOTES for the next version.
     add 69a9defc40 chore: Reset everything for a new release attempt using the scripts. Also changed the deployment url in the apache-release profile.
     add 566b48fd1a chore: Reset everything for a new release attempt using the scripts. Also changed the deployment url in the apache-release profile.
     add 516b2f670f chore: Reset everything for a new release attempt using the scripts. Also changed the deployment url in the apache-release profile.
     add ded920055e [maven-release-plugin] prepare branch @{releaseLabel}
     add b4ef73707e [maven-release-plugin] prepare for next development iteration
     add 9717491fe7 chore: prepared the RELEASE_NOTES for the next version.
     add 8f5e5f6c7c chore: Reset everything for a new release attempt using the scripts.
     add bf99e453e9 chore: Reset everything for a new release attempt using the scripts.
     add 6b6218f7f6 [maven-release-plugin] prepare branch @{releaseLabel}
     add d2b77a056d [maven-release-plugin] prepare for next development iteration
     add 524eb5930d chore: prepared the RELEASE_NOTES for the next version.
     add f3c7482a3f build: Final updates needed to get the script-release working.
     add 9abf569133 docs(changelog): update release notes
     add d6730c60c4 chore(doc): fix broken changelog update [skip ci]
     add cd79e06323 chore: Reset everything for a new release attempt using the scripts.
     add a7e7eb6616 [maven-release-plugin] prepare branch @{releaseLabel}
     add 6161965ff9 [maven-release-plugin] prepare for next development iteration
     add 5ad5b1c068 chore: prepared the RELEASE_NOTES for the next version.
     add da19efa652 build: Made the update-code step skip the tests (They are run later on in the release process)
     add 8b7c880a56 [maven-release-plugin] prepare branch @{releaseLabel}
     add 9f5942adeb [maven-release-plugin] prepare for next development iteration
     add 6a387e6d74 chore: prepared the RELEASE_NOTES for the next version.
     add 04ece2944c build: Merged changes back from the release branch.
     add ad99ffadee build: Merged changes back from the release branch.
     add 9ad8ac2004 chore: Made the Nats example build again.
     add 2d450b76f2 chore: Removed an unneeded pom.xml
     add 5307db45f4 chore: Made the UI tool's modules have names that match the other modules.
     add 195ff6acb8 refactor: Moved the code generation of the UI tool into the update-generated-code profile.
     add 3236bed01e chore: Updated generated code.
     add e1bec3f26c fix: Added the "update-generated-code" profile to the build, so the artifacts are built also added all other "with-" profiles, that were missing.
     add 02e82162b2 fix: Removed the "with-dotnet" module again, as it doesn't seem to be available on Jenkins.
     add 381433398f fix: Removed the "with-python" module again, as it doesn't seem to be available on Jenkins.
     add 239e3af9c1 fix: Updated all plugins used in the Jenkinsfile to the most recent ones.
     add 216790459e chore: Removed the duplicated code-generation/tests modules
     add fdf68785d8 chore: Updated the website after the successful release vote.
     add 1d0df83d2b chore: Fixed the right release version
     add 7a590c201b docs(changelog): update release notes
     add 7b2e2f35dc Revert "docs(changelog): update release notes"
     add c7cebba69d build(deps): bump github.com/gdamore/tcell/v2 in /plc4go (#1413)
     add 2369f21e81 build(deps): bump com.googlecode.maven-download-plugin:download-maven-plugin (#1409)
     add abffafbb7b build(deps): bump org.asciidoctor:asciidoctor-maven-plugin (#1408)
     add 50447e81e7 build(deps): bump netty.version from 4.1.106.Final to 4.1.107.Final (#1405)
     add 89f9eb022b build(deps): bump org.apache.maven:maven-artifact from 3.6.3 to 3.9.6 (#1406)
     add 101d327ea1 fix: Reverted the asciidoctor update in order to make the site build again.
     add 7c6d2203fe build(deps): bump logback.version from 1.4.14 to 1.5.0 (#1418)
     add 73f5b100d5 build(deps): bump org.codehaus.mojo:exec-maven-plugin (#1415)
     add a1bd684a91 build(deps): bump com.google.errorprone:error_prone_annotations (#1416)
     add 176a430831 build(deps): bump net.bytebuddy:byte-buddy from 1.14.11 to 1.14.12 (#1417)
     add d3df151e45 build(deps-dev): bump org.apache.commons:commons-compress (#1422)
     add d2a1b8a6f8 build(deps): bump org.springframework.boot:spring-boot-maven-plugin (#1421)
     add 999df5c7b8 build(deps): bump org.springframework.boot:spring-boot-dependencies (#1420)
     add d9d538815e build(deps): bump github.com/schollz/progressbar/v3 in /plc4go (#1428)
     add 7e0db6a228 build(deps): bump com.google.protobuf:protobuf-java (#1427)
     add 6f98c86796 build(deps): bump com.google.googlejavaformat:google-java-format (#1426)
     add fbaaca8af8 build(deps): bump nl.jqno.equalsverifier:equalsverifier (#1425)
     add 1204c9240a build(deps): bump io.nats:jnats from 2.15.3 to 2.17.3 (#1431)
     add bbd7f1e1e9 fix(plc4py): Documentation and Write Requests (#1437)
     add 504604e6fd Fix PLC4Py Gettingstarted example
     add 303892317c fix(plc4py): Add more to fix documentation
     add ef181af5b8 chore: Updated the PMC entries in the rdp
     add 6fe2829d5a docs: Updated the "Users" part of the website.
     add f5269b5ef1 fix: added timeouts for reading data/getting connection (#1361)
     add f9546c0757 docs: Updated the "Developers" part of the website.
     add be513fb75e fix(plc4py/umas): Fixed a few issues I introduced on the last commit
     add 09fdbd51d5 build(deps): bump github.com/stretchr/testify in /plc4go (#1439)
     add 419f65c3cc build(deps): bump golang.org/x/tools from 0.18.0 to 0.19.0 in /plc4go (#1440)
     add 428f7dfe35 build(deps): bump logback.version from 1.5.0 to 1.5.1 (#1435)
     add 88f7928981 build(deps): bump github.com/gdamore/tcell/v2 in /plc4go (#1438)
     add 8a2b07e270 build(deps): bump golang.org/x/net from 0.21.0 to 0.22.0 in /plc4go (#1441)
     add e22fde25a8 build(deps): bump jakarta.activation:jakarta.activation-api (#1436)
     add eaa0fe155e fix(plc4j/genericcan) Fix of generic CAN driver and CAN transports after recent releases.
     add 1a8e0f35c4 chore: Disabled a flaky test in GO
     add d61da27505 docs: Updated the url for the opie tool
     add 9452f491f3 chore: Updated vendor ids
     add 0cc4997e54 docs: Added some information on the site plugin and the asciidoctor plugin.
     add a89d016d5a chore: Updated vendor ids
     add 645eeba472 build: Continued fine-tuning the reproducible build release-scripts.
     add dbb84b57a8 chore: Updated vendor ids
     add 210a348b16 feat: The S7 driver now returns supporting S7, if the connected device is an S7-300.
     add f9c2e8ccb9 fix: Fixed logging in the example.
     add 7203ad8121 refactor: Made the "protocol" accessible in the AbstractPlcConnection
     add ad92e6a801 refactor: Added S7-400 to the list of supported devices.
     add 13fcae7fde fix: Fixed the dependency usage error.
     add 5a1f768f1c Fix/s7async (#1451)
     add 4647f0b4a1 build(deps): bump com.google.googlejavaformat:google-java-format (#1449)
     add 65fc66e70f build(deps): bump logback.version from 1.5.1 to 1.5.3 (#1448)
     add 795dd93cc7 build(deps): bump com.gradle:common-custom-user-data-maven-extension (#1434)
     add 608c9179b1 Update PlcRawByteArray.java (#1453)
     add d26955d296 chore: Disabled some OPC-UA tests, that were continuously failing the build.
     add 9ce5a2ff0a chore: Disabled some OPC-UA tests, that were continuously failing the build.
     add b26b686eee feat: Added a new flag allowing to disable tests on Jenkins. Added this to the flaky OPC-UA tests and re-enabled them.
     add a7d23bae53 build(deps-dev): bump org.apache.commons:commons-compress (#1456)
     add 00d32ec646 build(deps): bump org.awaitility:awaitility from 4.2.0 to 4.2.1 (#1455)
     add ee0259e10e docs: Added "slave-id" to the description of the unit-identifier.
     add 6eb6d57191 chore: Disabled the OpcuaPlcDriverTest as it also seems to regularly fail on GitHub actions.
     add dae94095ba build(deps): bump org.springframework.boot:spring-boot-maven-plugin (#1460)
     add bd70de4aed build(deps): bump com.google.errorprone:error_prone_annotations (#1461)
     add 81957342b3 build(deps): bump org.springframework.boot:spring-boot-dependencies (#1462)
     add 099ca20d09 docs: Updated some documentation on the code-generation.
     add d05711ab38 refactor: Renamed the paddingField paddingCondition to timesPadding
     add ddbf5a06e4 chore: Removed some unneeded code.
     add 5d4d437caf chore: Updated vendor ids
     add 750f3d6f69 chore: Cleaned up in the sandbox
     add 610ff5a2f2 fix(plc4py): type extensions module added to setup.py
     add 5ce7d69a00 fix(plc4py): Move out of sandbox
     add 45ffc58d84 chore(sandbox): Remove the Sandbox Directory
     add 57a0f62353 chore(plc4px): Remove manual test
     new 9e3c73509a Merge develop repo.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .asf.yaml                                          |      2 +-
 .dockerignore                                      |     12 +-
 .github/workflows/c-platform.yml                   |      2 +-
 .github/workflows/dependency-review.yml            |      2 +-
 .github/workflows/go-platform.yml                  |      2 +-
 .github/workflows/java-platform-test-report.yml    |      2 +-
 .github/workflows/java-platform.yml                |      8 +-
 .github/workflows/python-platform.yml              |     12 +-
 .github/workflows/release-drafter.yml              |      2 +-
 .gitignore                                         |     26 +-
 .idea/sonarlint/issuestore/index.pb                |     31 +
 .idea/sonarlint/securityhotspotstore/index.pb      |     31 +
 .mvn/extensions.xml                                |      4 +-
 CHANGELOG.md                                       |    393 +
 Dockerfile                                         |      2 +-
 Jenkinsfile                                        |     14 +-
 NOTICE                                             |      2 +-
 README.md                                          |     16 +-
 RELEASE_NOTES                                      |     48 +-
 build-reproducible.sh                              |      4 +-
 .../language-base-freemarker/.factorypath          |     40 +
 code-generation/language-base-freemarker/pom.xml   |      6 +-
 code-generation/language-c/.factorypath            |     38 +
 code-generation/language-c/pom.xml                 |     14 +-
 code-generation/language-cs/.factorypath           |     38 +
 code-generation/language-cs/pom.xml                |      6 +-
 code-generation/language-go/.factorypath           |     38 +
 code-generation/language-go/pom.xml                |     14 +-
 .../templates/go/data-io-template.go.ftlh          |     53 +-
 code-generation/language-java/.factorypath         |     45 +
 code-generation/language-java/pom.xml              |     22 +-
 .../language/java/JavaLanguageTemplateHelper.java  |     76 +
 .../templates/java/complex-type-template.java.ftlh |      6 +-
 .../templates/java/data-io-template.java.ftlh      |    931 +-
 code-generation/language-python/.factorypath       |     38 +
 code-generation/language-python/pom.xml            |     16 +-
 .../python/PythonLanguageTemplateHelper.java       |     19 +-
 .../python/complex-type-template.python.ftlh       |    105 +-
 .../templates/python/data-io-template.python.ftlh  |     34 +-
 .../src/test/resources/integration-test/pom.xml    |     96 +-
 code-generation/pom.xml                            |     13 +-
 code-generation/protocol-base-mspec/.factorypath   |     35 +
 code-generation/protocol-base-mspec/pom.xml        |      4 +-
 .../plugins/codegenerator/language/mspec/MSpec.g4  |     10 +-
 .../mspec/parser/MessageFormatListener.java        |      4 +-
 code-generation/protocol-test/.factorypath         |     33 +
 code-generation/protocol-test/pom.xml              |      6 +-
 code-generation/tests/pom.xml                      |     89 -
 code-generation/tests/protocol-test-java/pom.xml   |    157 -
 .../java/test/readwrite/AbstractTypeTest.java      |    166 -
 .../test/readwrite/AbstractTypeTestSubType.java    |    260 -
 .../plc4x/java/test/readwrite/ArrayTypeTest.java   |    248 -
 .../java/test/readwrite/CheckSumTypeTest.java      |    141 -
 .../test/readwrite/ComplexOfComplexUsageA.java     |    131 -
 .../test/readwrite/ComplexOfComplexUsageB.java     |    158 -
 .../test/readwrite/ComplexOfComplexUsageC.java     |    127 -
 .../test/readwrite/ComplexOfComplexUsageD.java     |    127 -
 .../plc4x/java/test/readwrite/ConstTypeTest.java   |    196 -
 .../plc4x/java/test/readwrite/DataIOType.java      |    110 -
 .../java/test/readwrite/EnumDiscriminatedType.java |    155 -
 .../test/readwrite/EnumDiscriminatedTypeA.java     |    141 -
 .../test/readwrite/EnumDiscriminatedTypeB.java     |    141 -
 .../test/readwrite/EnumDiscriminatedTypeC.java     |    141 -
 .../readwrite/EnumDiscriminatedTypeMultiple.java   |    190 -
 .../readwrite/EnumDiscriminatedTypeMultipleA.java  |    147 -
 .../readwrite/EnumDiscriminatedTypeMultipleB.java  |    147 -
 .../readwrite/EnumDiscriminatedTypeMultipleC.java  |    147 -
 .../readwrite/EnumDiscriminatedTypeParameter.java  |    160 -
 .../readwrite/EnumDiscriminatedTypeParameterA.java |    144 -
 .../readwrite/EnumDiscriminatedTypeParameterB.java |    144 -
 .../readwrite/EnumDiscriminatedTypeParameterC.java |    144 -
 .../EnumDiscriminatedTypeParameterMultiple.java    |    183 -
 .../EnumDiscriminatedTypeParameterMultipleA.java   |    149 -
 .../EnumDiscriminatedTypeParameterMultipleB.java   |    149 -
 .../EnumDiscriminatedTypeParameterMultipleC.java   |    149 -
 .../apache/plc4x/java/test/readwrite/EnumType.java |     57 -
 .../plc4x/java/test/readwrite/EnumTypeBit.java     |     55 -
 .../plc4x/java/test/readwrite/EnumTypeInt.java     |     56 -
 .../java/test/readwrite/EnumTypeParameters.java    |    188 -
 .../plc4x/java/test/readwrite/EnumTypeTest.java    |    138 -
 .../plc4x/java/test/readwrite/FieldTypeTest.java   |    322 -
 .../readwrite/FieldTypeTestWithUnknownField.java   |    222 -
 .../readwrite/ImplicitPascalStringTypeTest.java    |    138 -
 .../java/test/readwrite/ImplicitTypeTest.java      |    187 -
 .../plc4x/java/test/readwrite/IntTypeTest.java     |    217 -
 .../plc4x/java/test/readwrite/LengthLoopTest.java  |    137 -
 .../java/test/readwrite/OptionalTypeTest.java      |    146 -
 .../plc4x/java/test/readwrite/PaddingTypeTest.java |    139 -
 .../java/test/readwrite/PascalStringTypeTest.java  |    143 -
 .../java/test/readwrite/ReservedTypeTest.java      |    120 -
 .../java/test/readwrite/ReservedTypeTestChild.java |    128 -
 .../test/readwrite/ReservedTypeTestParent.java     |    163 -
 .../java/test/readwrite/SimpleBitTypeTest.java     |    127 -
 .../test/readwrite/SimpleDiscriminatedType.java    |    147 -
 .../test/readwrite/SimpleDiscriminatedTypeA.java   |    141 -
 .../test/readwrite/SimpleDiscriminatedTypeB.java   |    141 -
 .../test/readwrite/SimpleDiscriminatedTypeC.java   |    141 -
 .../plc4x/java/test/readwrite/SimpleTypeTest.java  |    234 -
 .../TypeSwitchInTypeSwitchParentType.java          |    175 -
 .../TypeSwitchInTypeSwitchParentTypeChild0.java    |    192 -
 ...eSwitchInTypeSwitchParentTypeChild0Infant0.java |    194 -
 ...SwitchParentTypeChild0Infant0InfantsChild0.java |    160 -
 ...SwitchParentTypeChild0Infant0InfantsChild1.java |    160 -
 ...eSwitchInTypeSwitchParentTypeChild0Infant1.java |    151 -
 ...eSwitchInTypeSwitchParentTypeChild0Infant2.java |    151 -
 .../TypeSwitchInTypeSwitchParentTypeChild1.java    |    192 -
 ...eSwitchInTypeSwitchParentTypeChild1Infant3.java |    150 -
 ...eSwitchInTypeSwitchParentTypeChild1Infant4.java |    151 -
 ...eSwitchInTypeSwitchParentTypeChild1Infant5.java |    151 -
 .../TypeSwitchInTypeSwitchParentTypeChild2.java    |    198 -
 ...eSwitchInTypeSwitchParentTypeChild2Infant6.java |    151 -
 ...eSwitchInTypeSwitchParentTypeChild2Infant7.java |    151 -
 ...eSwitchInTypeSwitchParentTypeChild2Infant8.java |    151 -
 .../plc4x/java/test/readwrite/UIntTypeTest.java    |    219 -
 .../java/test/readwrite/VirtualFieldTest.java      |    194 -
 .../java/test/readwrite/utils/StaticHelper.java    |     90 -
 docker-compose.yaml                                |      2 +-
 jenkins.pom                                        |     26 +-
 media/release-image-template.svg                   |      4 +-
 plc4c/api/include/plc4c/data.h                     |      4 +
 plc4c/drivers/s7/include/plc4c/driver_s7_static.h  |      2 +
 plc4c/drivers/s7/src/driver_s7_sm_read.c           |      6 +-
 plc4c/drivers/s7/src/driver_s7_static.c            |      4 +
 plc4c/generated-sources/plc4x/src/plc4x_value.c    |      3 -
 .../generated-sources/s7/include/controller_type.h |     63 +
 plc4c/generated-sources/s7/include/data_item.h     |      9 +-
 .../s7/include/s7_payload_user_data_item.h         |      4 +-
 .../generated-sources/s7/include/transport_size.h  |     13 +-
 .../s7/src/alarm_message_ack_push_type.c           |     12 +-
 .../s7/src/alarm_message_push_type.c               |     12 +-
 .../s7/src/alarm_message_query_type.c              |     14 +-
 plc4c/generated-sources/s7/src/controller_type.c   |    127 +
 plc4c/generated-sources/s7/src/data_item.c         |    223 +-
 plc4c/generated-sources/s7/src/date_and_time.c     |     98 +-
 .../s7/src/s7_payload_user_data_item.c             |    218 +-
 plc4c/generated-sources/s7/src/transport_size.c    |    373 +-
 plc4c/pom.xml                                      |     12 +-
 plc4c/spi/include/plc4c/spi/types_private.h        |      1 +
 plc4c/spi/src/data.c                               |     10 +
 .../testing/protocols/ads/DriverTestsuite.xml      |   1404 +-
 .../protocols/modbus/tcp/Modbus-all-datatypes.xml  |   3404 +
 .../testing/protocols/opcua/DriverTestsuite.xml    |     48 +-
 plc4go/go.mod                                      |     28 +-
 plc4go/go.sum                                      |     54 +-
 plc4go/internal/ads/Discoverer.go                  |     30 +
 plc4go/internal/bacnetip/Discoverer.go             |     25 +-
 plc4go/internal/cbus/Browser_test.go               |      2 +
 plc4go/internal/cbus/Configuration.go              |     10 +
 plc4go/internal/cbus/Configuration_test.go         |      2 +-
 plc4go/internal/cbus/Discoverer.go                 |     17 +-
 plc4go/internal/knxnetip/Discoverer.go             |     21 +-
 plc4go/internal/opcua/Configuration.go             |     54 +-
 plc4go/internal/opcua/Configuration_plc4xgen.go    |     38 +-
 plc4go/internal/opcua/Driver.go                    |     12 +-
 plc4go/internal/opcua/DriverContext.go             |      2 +-
 plc4go/internal/opcua/EncryptionHandler.go         |      4 +-
 plc4go/internal/opcua/SecureChannel.go             |    265 +-
 plc4go/internal/opcua/SecureChannel_plc4xgen.go    |      4 +-
 plc4go/internal/s7/Reader.go                       |      7 +-
 plc4go/internal/s7/Writer.go                       |      2 +-
 plc4go/pkg/api/cache/PlcConnectionCache.go         |     21 +-
 plc4go/pkg/api/cache/connectionContainer.go        |     18 +-
 plc4go/pkg/api/cache/connectionContainer_test.go   |      4 +-
 .../pkg/api/cache/mock_PlcConnectionCache_test.go  |     47 +
 plc4go/pkg/api/cache/plcConnectionLease.go         |      2 +-
 plc4go/pkg/api/values/plc_value.go                 |      3 +-
 plc4go/pom.xml                                     |    170 +-
 plc4go/protocols/ads/readwrite/model/DataItem.go   |     27 +
 .../bacnetip/readwrite/model/BACnetVendorId.go     |    160 +-
 .../knxnetip/readwrite/model/KnxDatapoint.go       |    705 +-
 .../knxnetip/readwrite/model/KnxManufacturer.go    |    240 +-
 .../knxnetip/readwrite/model/KnxProperty.go        |    181 +-
 .../protocols/modbus/readwrite/model/DataItem.go   |     31 +
 plc4go/protocols/opcua/readwrite/ParserHelper.go   |     24 +
 .../protocols/opcua/readwrite/XmlParserHelper.go   |     19 +
 .../opcua/readwrite/model/BinaryPayload.go         |    212 +
 .../protocols/opcua/readwrite/model/ChunkType.go   |    159 +
 .../opcua/readwrite/model/ExtensiblePayload.go     |    223 +
 .../protocols/opcua/readwrite/model/MessagePDU.go  |     80 +-
 .../protocols/opcua/readwrite/model/MessageType.go |    183 +
 .../readwrite/model/OpcuaAcknowledgeResponse.go    |    188 +-
 .../opcua/readwrite/model/OpcuaCloseRequest.go     |    186 +-
 .../opcua/readwrite/model/OpcuaConstants.go        |    174 +
 .../opcua/readwrite/model/OpcuaHelloRequest.go     |    194 +-
 .../opcua/readwrite/model/OpcuaMessageError.go     |     51 +-
 .../opcua/readwrite/model/OpcuaMessageRequest.go   |    228 +-
 .../opcua/readwrite/model/OpcuaMessageResponse.go  |    228 +-
 .../opcua/readwrite/model/OpcuaOpenRequest.go      |    313 +-
 .../opcua/readwrite/model/OpcuaOpenResponse.go     |    313 +-
 .../opcua/readwrite/model/OpcuaProtocolLimits.go   |    250 +
 .../opcua/readwrite/model/OpenChannelMessage.go    |    185 +
 .../readwrite/model/OpenChannelMessageRequest.go   |    319 +
 .../readwrite/model/OpenChannelMessageResponse.go  |    319 +
 plc4go/protocols/opcua/readwrite/model/Payload.go  |    243 +
 .../opcua/readwrite/model/SecurityHeader.go        |    200 +
 .../opcua/readwrite/model/SequenceHeader.go        |    200 +
 plc4go/protocols/s7/readwrite/ParserHelper.go      |      5 +-
 plc4go/protocols/s7/readwrite/XmlParserHelper.go   |      7 +-
 .../s7/readwrite/model/AlarmMessageAckPushType.go  |     42 +-
 .../s7/readwrite/model/AlarmMessagePushType.go     |     42 +-
 .../s7/readwrite/model/AlarmMessageQueryType.go    |     22 +-
 .../protocols/s7/readwrite/model/ControllerType.go |    191 +
 plc4go/protocols/s7/readwrite/model/DataItem.go    |    190 +-
 plc4go/protocols/s7/readwrite/model/DateAndTime.go |    126 +-
 .../readwrite/model/S7PayloadDiagnosticMessage.go  |    198 +-
 .../model/S7PayloadUserDataItemClkFResponse.go     |    104 +-
 .../model/S7PayloadUserDataItemClkResponse.go      |    104 +-
 .../model/S7PayloadUserDataItemClkSetRequest.go    |     42 +-
 ...serDataItemCpuFunctionMsgSubscriptionRequest.go |    102 +-
 .../protocols/s7/readwrite/model/StaticHelper.go   |     22 +
 .../protocols/s7/readwrite/model/TransportSize.go  |    384 +-
 .../simulated/readwrite/model/DataItem.go          |     36 +
 plc4go/script/validate-go-test-results.groovy      |     36 -
 plc4go/spi/pool/executor_test.go                   |      3 +-
 plc4go/spi/pool/future_test.go                     |     23 +-
 plc4go/spi/pool/worker.go                          |      3 +-
 plc4go/spi/pool/worker_test.go                     |      3 +-
 .../transactions/RequestTransactionManager_test.go |      4 +-
 plc4go/spi/transactions/RequestTransaction_test.go |     11 +-
 plc4go/spi/utils/Buffer.go                         |     10 +
 plc4go/spi/utils/bufferCommons.go                  |     22 +
 plc4go/spi/utils/dumpUtils_test.go                 |      1 +
 plc4go/spi/values/PlcDATE_AND_LTIME.go             |    132 +
 plc4go/spi/values/PlcDATE_AND_TIME.go              |      4 +
 plc4j/api/.factorypath                             |     30 +
 plc4j/api/pom.xml                                  |      9 +-
 .../apache/plc4x/java/DefaultPlcDriverManager.java |      4 +-
 .../plc4x/java/api/PlcConnectionExtension.java     |     81 -
 .../java/org/apache/plc4x/java/api/PlcDriver.java  |     37 +-
 .../apache/plc4x/java/api/PlcDriverManager.java    |      2 +-
 .../plc4x/java/api/messages/PlcBrowseItem.java     |      2 -
 .../plc4x/java/api/messages/PlcRequestBuilder.java |      1 +
 .../plc4x/java/api/messages/PlcResponse.java       |      2 +
 .../org/apache/plc4x/java/api/metadata/Option.java |     36 +
 .../plc4x/java/api/metadata/OptionMetadata.java    |     30 +
 .../java/api/metadata/PlcConnectionMetadata.java   |      8 +-
 .../plc4x/java/api/metadata/PlcDriverMetadata.java |     28 +-
 .../apache/plc4x/java/api/types/OptionType.java    |     30 +
 .../apache/plc4x/java/api/types/PlcValueType.java  |      3 +-
 plc4j/drivers/ab-eth/.factorypath                  |     47 +
 plc4j/drivers/ab-eth/pom.xml                       |     18 +-
 .../org/apache/plc4x/java/abeth/AbEthDriver.java   |     39 +-
 .../abeth/configuration/AbEthConfiguration.java    |      6 +-
 .../java/abeth/protocol/AbEthProtocolLogic.java    |     57 +-
 plc4j/drivers/ads/.factorypath                     |     47 +
 plc4j/drivers/ads/pom.xml                          |     18 +-
 .../ads/discovery/readwrite/AdsDiscoveryBlock.java |      3 +-
 .../apache/plc4x/java/ads/readwrite/AmsPacket.java |      3 +-
 .../apache/plc4x/java/ads/readwrite/DataItem.java  |    571 +-
 .../org/apache/plc4x/java/ads/AdsPlcDriver.java    |     45 +-
 .../java/ads/configuration/AdsConfiguration.java   |     30 +-
 .../plc4x/java/ads/protocol/AdsProtocolLogic.java  |    188 +-
 .../org/apache/plc4x/protocol/ads/AdsDriverIT.java |      1 -
 .../plc4x/protocol/ads/ManualAdsDriverTest.java    |      2 +-
 .../org/apache/plc4x/protocol/ads/Scanner.java     |      4 +-
 .../ads/src/test/resources/logback-test.xml        |      2 +-
 plc4j/drivers/all/pom.xml                          |     87 +-
 plc4j/drivers/all/src/site/generated/ab-eth.adoc   |     48 +
 plc4j/drivers/all/src/site/generated/ads.adoc      |     53 +
 .../drivers/all/src/site/generated/bacnet-ip.adoc  |     73 +
 plc4j/drivers/all/src/site/generated/c-bus.adoc    |     48 +
 plc4j/drivers/all/src/site/generated/canopen.adoc  |     47 +
 plc4j/drivers/all/src/site/generated/eip.adoc      |     50 +
 plc4j/drivers/all/src/site/generated/firmata.adoc  |     72 +
 .../drivers/all/src/site/generated/genericcan.adoc |     46 +
 .../all/src/site/generated/iec-60870-5-104.adoc    |     48 +
 .../drivers/all/src/site/generated/knxnet-ip.adoc  |     84 +
 plc4j/drivers/all/src/site/generated/logix.adoc    |     53 +
 .../all/src/site/generated/modbus-ascii.adoc       |     82 +
 .../drivers/all/src/site/generated/modbus-rtu.adoc |     82 +
 .../drivers/all/src/site/generated/modbus-tcp.adoc |     50 +
 plc4j/drivers/all/src/site/generated/opcua.adoc    |     80 +
 .../all/src/site/generated/open-protocol.adoc      |     47 +
 plc4j/drivers/all/src/site/generated/plc4x.adoc    |     49 +
 plc4j/drivers/all/src/site/generated/profinet.adoc |     50 +
 plc4j/drivers/all/src/site/generated/s7.adoc       |     67 +
 .../drivers/all/src/site/generated/simulated.adoc  |     37 +
 .../groovy/generate-config-documentation.groovy    |    132 +
 plc4j/drivers/bacnet/.factorypath                  |     58 +
 plc4j/drivers/bacnet/pom.xml                       |     77 +-
 .../apache/plc4x/java/bacnetip/readwrite/APDU.java |      3 +-
 .../readwrite/BACnetConfirmedServiceRequest.java   |      3 +-
 .../java/bacnetip/readwrite/BACnetServiceAck.java  |      3 +-
 .../readwrite/BACnetUnconfirmedServiceRequest.java |      3 +-
 .../java/bacnetip/readwrite/BACnetVendorId.java    |     11 +-
 .../apache/plc4x/java/bacnetip/BacNetIpDriver.java |     46 +-
 .../configuration/BacNetIpConfiguration.java       |      7 +-
 .../BacNetPcapReplayTransportConfiguration.java    |      2 +
 .../BacNetRawSocketTransportConfiguration.java     |      2 +
 plc4j/drivers/c-bus/.factorypath                   |     48 +
 plc4j/drivers/c-bus/pom.xml                        |     18 +-
 .../org/apache/plc4x/java/cbus/CBusDriver.java     |     44 +-
 .../java/cbus/configuration/CBusConfiguration.java |      6 +-
 .../java/cbus/protocol/CBusProtocolLogic.java      |      9 +-
 plc4j/drivers/can/.factorypath                     |     47 +
 plc4j/drivers/can/pom.xml                          |     26 +-
 .../plc4x/java/genericcan/readwrite/DataItem.java  |    321 +-
 .../genericcan/readwrite/GenericCANDataType.java   |      3 +-
 .../conversation/ConversationContextWrapper.java   |      4 +-
 .../plc4x/java/can/generic/GenericCANDriver.java   |     16 +-
 .../configuration/GenericCANConfiguration.java     |      9 +-
 .../generic/protocol/GenericCANProtocolLogic.java  |     30 +-
 .../transport/GenericCANFrameDataHandler.java      |      6 +
 .../java/can/generic/transport/GenericFrame.java   |     32 +-
 .../java/can/generic/GenericCANDriverTest.java     |    168 +-
 plc4j/drivers/canopen/.factorypath                 |     47 +
 plc4j/drivers/canopen/pom.xml                      |     22 +-
 .../java/canopen/readwrite/CANOpenDataType.java    |      4 +-
 .../plc4x/java/canopen/readwrite/DataItem.java     |    369 +-
 .../plc4x/java/canopen/CANOpenPlcDriver.java       |     18 +-
 .../canopen/SDODownloadConversation.java           |      2 +-
 .../configuration/CANOpenConfiguration.java        |     10 +-
 .../canopen/protocol/CANOpenProtocolLogic.java     |     21 +-
 .../canopen/transport/CANOpenFrameDataHandler.java |      2 +-
 .../plc4x/java/canopen/CANTestTransport.java       |      4 +-
 plc4j/drivers/ctrlx/.factorypath                   |     54 +
 plc4j/drivers/ctrlx/pom.xml                        |      8 +-
 .../ctrlx/readwrite/rest/datalayer/ApiClient.java  |   1028 -
 .../plc4x/java/ctrlx/readwrite/CtrlXDriver.java    |     14 +-
 .../configuration/CtrlXConfiguration.java          |      6 +-
 .../readwrite/connection/CtrlXConnection.java      |     10 +-
 .../ctrlx/readwrite/rest/datalayer/ApiClient.java  |   1028 +
 .../readwrite/rest/datalayer/ApiException.java     |      0
 .../readwrite/rest/datalayer/Configuration.java    |      0
 .../rest/datalayer/JavaTimeFormatter.java          |      0
 .../java/ctrlx/readwrite/rest/datalayer/Pair.java  |      0
 .../rest/datalayer/RFC3339DateFormat.java          |      0
 .../rest/datalayer/ServerConfiguration.java        |      0
 .../readwrite/rest/datalayer/ServerVariable.java   |      0
 .../ctrlx/readwrite/rest/datalayer/StringUtil.java |      0
 .../rest/datalayer/api/BulkAccessApi.java          |      0
 .../api/DataLayerInformationAndSettingsApi.java    |      0
 .../readwrite/rest/datalayer/api/NodesApi.java     |      0
 .../readwrite/rest/datalayer/api/RemotesApi.java   |      0
 .../rest/datalayer/api/RetainMemoryApi.java        |      0
 .../api/SubscriptionInformationAndSettingsApi.java |      0
 .../rest/datalayer/api/SubscriptionsApi.java       |      0
 .../readwrite/rest/datalayer/api/TypesApi.java     |      0
 .../readwrite/rest/datalayer/auth/ApiKeyAuth.java  |      0
 .../rest/datalayer/auth/Authentication.java        |      0
 .../rest/datalayer/auth/HttpBasicAuth.java         |      0
 .../rest/datalayer/auth/HttpBearerAuth.java        |      0
 .../ctrlx/readwrite/rest/datalayer/auth/OAuth.java |      0
 .../readwrite/rest/datalayer/auth/OAuthFlow.java   |      0
 .../readwrite/rest/datalayer/model/ARString.java   |      0
 .../rest/datalayer/model/AllowedOperations.java    |      0
 .../readwrite/rest/datalayer/model/BrowseData.java |      0
 .../rest/datalayer/model/BulkRequestInner.java     |      0
 .../rest/datalayer/model/BulkResponseInner.java    |      0
 .../datalayer/model/ChangeSubscriptionRequest.java |      0
 .../datalayer/model/CommDatalayerChangeEvents.java |      0
 .../datalayer/model/CommDatalayerCounting.java     |      0
 .../model/CommDatalayerDataChangeFilter.java       |      0
 .../model/CommDatalayerDataChangeTrigger.java      |      0
 .../datalayer/model/CommDatalayerProperties.java   |      0
 .../datalayer/model/CommDatalayerProperty.java     |      0
 .../datalayer/model/CommDatalayerPropertyRule.java |      0
 .../model/CommDatalayerQueueBehaviour.java         |      0
 .../datalayer/model/CommDatalayerQueueing.java     |      0
 .../model/CommDatalayerRemoteConfigItem.java       |      0
 .../datalayer/model/CommDatalayerSampling.java     |      0
 .../model/CommDatalayerServerSettings.java         |      0
 .../model/CommDatalayerSubscriptionData.java       |      0
 .../model/CommDatalayerSubscriptionProperties.java |      0
 .../rest/datalayer/model/CreateRemoteRequest.java  |      0
 .../datalayer/model/CreateSubscriptionRequest.java |      0
 .../model/CreateSubscriptionRequestAllOf.java      |      0
 .../readwrite/rest/datalayer/model/DLARString.java |      0
 .../readwrite/rest/datalayer/model/DLString.java   |      0
 .../readwrite/rest/datalayer/model/DLUInt32.java   |      0
 .../ctrlx/readwrite/rest/datalayer/model/Data.java |      0
 .../readwrite/rest/datalayer/model/Extension.java  |      0
 .../readwrite/rest/datalayer/model/JsonString.java |      0
 .../readwrite/rest/datalayer/model/Memory.java     |      0
 .../readwrite/rest/datalayer/model/MemoryType.java |      0
 .../rest/datalayer/model/MemoryValue.java          |      0
 .../readwrite/rest/datalayer/model/MetaData.java   |      0
 .../readwrite/rest/datalayer/model/NodeClass.java  |      0
 .../readwrite/rest/datalayer/model/Problem.java    |      0
 .../rest/datalayer/model/ReadNode200Response.java  |      0
 .../readwrite/rest/datalayer/model/Reference.java  |      0
 .../readwrite/rest/datalayer/model/Reflection.java |      0
 .../rest/datalayer/model/ReflectionBaseType.java   |      0
 .../rest/datalayer/model/ReflectionEnum.java       |      0
 .../rest/datalayer/model/ReflectionEnumVal.java    |      0
 .../rest/datalayer/model/ReflectionField.java      |      0
 .../rest/datalayer/model/ReflectionKeyValue.java   |      0
 .../rest/datalayer/model/ReflectionObject.java     |      0
 .../rest/datalayer/model/ReflectionRPCCall.java    |      0
 .../rest/datalayer/model/ReflectionSchema.java     |      0
 .../rest/datalayer/model/ReflectionService.java    |      0
 .../rest/datalayer/model/ReflectionType.java       |      0
 .../rest/datalayer/model/RemoteConfig.java         |      0
 .../rest/datalayer/model/RetainStats.java          |      0
 .../readwrite/rest/datalayer/model/SSEEvent.java   |      0
 .../rest/datalayer/model/SSEEventData.java         |      0
 .../rest/datalayer/model/SSEEventData1.java        |      0
 .../rest/datalayer/model/ServerSettings.java       |      0
 .../readwrite/rest/datalayer/model/State.java      |      0
 .../rest/datalayer/model/SubscriptionData.java     |      0
 .../rest/datalayer/model/SubscriptionID.java       |      0
 .../rest/datalayer/model/SubscriptionNodeList.java |      0
 .../datalayer/model/SubscriptionProperties.java    |      0
 .../model/SubscriptionPropertiesData.java          |      0
 .../rest/datalayer/model/SubscriptionSettings.java |      0
 .../ctrlx/readwrite/rest/datalayer/model/Task.java |      0
 .../readwrite/rest/datalayer/model/UInt32.java     |      0
 .../plc4x/java/ctrlx/readwrite/tag/CtrlXQuery.java |      2 +-
 .../plc4x/java/ctrlx/readwrite/tag/CtrlXTag.java   |      2 +-
 .../java/ctrlx/readwrite/tag/CtrlXTagHandler.java  |      2 +-
 .../ctrlx/readwrite/utils/ApiClientFactory.java    |      2 +-
 .../java/ctrlx/readwrite/utils/OauthHelper.java    |      2 +-
 .../plc4x/java/ctrlx/readwrite/BrowseTest.java     |      2 +-
 .../java/ctrlx/readwrite/ManualDriverTest.java     |      2 +-
 plc4j/drivers/eip/.factorypath                     |     48 +
 plc4j/drivers/eip/pom.xml                          |     18 +-
 .../plc4x/java/eip/readwrite/CipExchange.java      |    204 -
 .../org/apache/plc4x/java/eip/base/EIPDriver.java  |     53 +-
 .../eip/base/configuration/EIPConfiguration.java   |     12 +-
 .../java/eip/base/protocol/EipProtocolLogic.java   |    201 +-
 .../apache/plc4x/java/eip/logix/LogixDriver.java   |     36 +-
 .../logix/configuration/LogixConfiguration.java    |      6 +-
 .../LogixTcpTransportConfiguration.java            |     32 +
 plc4j/drivers/firmata/.factorypath                 |     50 +
 plc4j/drivers/firmata/pom.xml                      |     23 +-
 .../java/firmata/readwrite/FirmataDriver.java      |     16 +-
 .../configuration/FirmataConfiguration.java        |      4 +-
 .../readwrite/protocol/FirmataProtocolLogic.java   |     20 +-
 .../java/firmata/readwrite/FirmataManualTest.java  |     41 +
 .../firmata/src/test/resources/logback-test.xml    |      2 +-
 plc4j/drivers/iec-60870/.factorypath               |     47 +
 plc4j/drivers/iec-60870/pom.xml                    |     18 +-
 .../readwrite/Iec60870514PlcDriver.java            |     45 +-
 .../configuration/Iec608705014Configuration.java   |     18 +-
 .../readwrite/protocol/Iec608705104Protocol.java   |     37 +-
 .../apache/plc4x/java/iec608705104/ManualTest.java |      3 +-
 plc4j/drivers/knxnetip/.factorypath                |     59 +
 plc4j/drivers/knxnetip/pom.xml                     |     24 +-
 .../java/knxnetip/readwrite/KnxDatapoint.java      |  19263 +--
 .../java/knxnetip/readwrite/KnxManufacturer.java   |     23 +-
 .../plc4x/java/knxnetip/readwrite/KnxProperty.java |   2024 +-
 .../apache/plc4x/java/knxnetip/KnxNetIpDriver.java |     55 +-
 .../configuration/KnxNetIpConfiguration.java       |     19 +-
 .../knxnetip/protocol/KnxNetIpProtocolLogic.java   |     47 +-
 plc4j/drivers/mock/.factorypath                    |     53 +
 plc4j/drivers/mock/pom.xml                         |      8 +-
 .../plc4x/java/mock/connection/MockConnection.java |      8 +-
 plc4j/drivers/modbus/.factorypath                  |     53 +
 plc4j/drivers/modbus/pom.xml                       |     27 +-
 .../plc4x/java/modbus/readwrite/DataItem.java      |   1061 +-
 .../plc4x/java/modbus/ascii/ModbusAsciiDriver.java |     39 +-
 .../ascii/config/ModbusAsciiConfiguration.java     |     11 +-
 .../ascii/protocol/ModbusAsciiProtocolLogic.java   |     17 +-
 .../modbus/base/protocol/ModbusProtocolLogic.java  |      6 +-
 .../plc4x/java/modbus/rtu/ModbusRtuDriver.java     |     39 +-
 .../modbus/rtu/config/ModbusRtuConfiguration.java  |      7 +-
 .../rtu/protocol/ModbusRtuProtocolLogic.java       |     22 +-
 .../plc4x/java/modbus/tcp/ModbusTcpDriver.java     |     39 +-
 .../modbus/tcp/config/ModbusTcpConfiguration.java  |     18 +-
 .../tcp/protocol/ModbusTcpProtocolLogic.java       |     19 +-
 .../java/modbus/ManualModbusASCIIDriverTest.java   |    105 +
 .../plc4x/java/modbus/ManualModbusDriverTest.java  |    106 -
 .../java/modbus/ManualModbusRTUDriverTest.java     |    105 +
 .../java/modbus/ManualModbusTCPDriverTest.java     |    104 +
 .../java/modbus/tcp/ModbusTcpAllDatatypesIT.java   |     29 +
 plc4j/drivers/opcua/.factorypath                   |     49 +
 plc4j/drivers/opcua/pom.xml                        |     22 +-
 .../plc4x/java/opcua/readwrite/BinaryPayload.java  |    141 +
 .../plc4x/java/opcua/readwrite/ChunkType.java      |     56 +
 .../apache/plc4x/java/opcua/readwrite/Date.java    |    110 -
 .../java/opcua/readwrite/DecimalDataType.java      |    164 -
 .../java/opcua/readwrite/ExtensiblePayload.java    |    143 +
 .../plc4x/java/opcua/readwrite/MessagePDU.java     |     54 +-
 .../plc4x/java/opcua/readwrite/MessageType.java    |     59 +
 .../apache/plc4x/java/opcua/readwrite/Node.java    |    362 -
 .../java/opcua/readwrite/NodeIdTypeDefinition.java |      3 +-
 .../opcua/readwrite/OpcuaAcknowledgeResponse.java  |    153 +-
 .../java/opcua/readwrite/OpcuaCloseRequest.java    |    152 +-
 .../plc4x/java/opcua/readwrite/OpcuaConstants.java |    128 +
 .../java/opcua/readwrite/OpcuaHelloRequest.java    |    161 +-
 .../java/opcua/readwrite/OpcuaMessageError.java    |     41 +-
 .../java/opcua/readwrite/OpcuaMessageRequest.java  |    172 +-
 .../java/opcua/readwrite/OpcuaMessageResponse.java |    172 +-
 .../OpcuaNodeIdServicesVariableAddress.java        |     69 -
 .../OpcuaNodeIdServicesVariableChoice.java         |     54 -
 .../OpcuaNodeIdServicesVariableDevice.java         |     66 -
 .../OpcuaNodeIdServicesVariableDiscrete.java       |    193 -
 .../OpcuaNodeIdServicesVariableInitial.java        |     54 -
 .../OpcuaNodeIdServicesVariableInstrument.java     |    193 -
 .../OpcuaNodeIdServicesVariableRefresh.java        |     92 -
 .../readwrite/OpcuaNodeIdServicesVariableTrip.java |    192 -
 .../java/opcua/readwrite/OpcuaOpenRequest.java     |    247 +-
 .../java/opcua/readwrite/OpcuaOpenResponse.java    |    248 +-
 .../java/opcua/readwrite/OpcuaProtocolLimits.java  |    176 +
 .../java/opcua/readwrite/OpenChannelMessage.java   |    158 +
 .../opcua/readwrite/OpenChannelMessageRequest.java |    225 +
 .../readwrite/OpenChannelMessageResponse.java      |    226 +
 .../apache/plc4x/java/opcua/readwrite/Payload.java |    185 +
 .../plc4x/java/opcua/readwrite/ReferenceNode.java  |    195 -
 .../plc4x/java/opcua/readwrite/SecurityHeader.java |    143 +
 .../plc4x/java/opcua/readwrite/SequenceHeader.java |    143 +
 .../apache/plc4x/java/opcua/readwrite/Time.java    |    110 -
 .../apache/plc4x/java/opcua/OpcuaPlcDriver.java    |     22 +-
 .../org/apache/plc4x/java/opcua/config/Limits.java |     74 +
 .../java/opcua/config/OpcuaConfiguration.java      |    171 +-
 .../opcua/context/AsymmetricEncryptionHandler.java |    108 +
 .../java/opcua/context/BaseEncryptionHandler.java  |    239 +
 .../plc4x/java/opcua/context/CallContext.java      |     49 +
 .../java/opcua/context/CertificateKeyPair.java     |     24 +-
 .../plc4x/java/opcua/context/Conversation.java     |    497 +
 .../java/opcua/context/EncryptionHandler.java      |    263 +-
 .../java/opcua/context/OpcuaDriverContext.java     |    112 +-
 .../plc4x/java/opcua/context/SecureChannel.java    |   1236 +-
 .../context/SecureChannelTransactionManager.java   |     88 +-
 .../opcua/context/SymmetricEncryptionHandler.java  |    126 +
 .../java/opcua/protocol/OpcuaProtocolLogic.java    |    430 +-
 .../opcua/protocol/OpcuaSubscriptionHandle.java    |    359 +-
 .../plc4x/java/opcua/protocol/chunk/Chunk.java     |    149 +
 .../java/opcua/protocol/chunk/ChunkFactory.java    |    156 +
 .../java/opcua/protocol/chunk/ChunkStorage.java    |     46 +
 .../opcua/protocol/chunk/MemoryChunkStorage.java   |     59 +
 .../opcua/protocol/chunk/PayloadConverter.java     |     93 +
 .../java/opcua/security/CertificateVerifier.java   |     29 +
 .../plc4x/java/opcua/security/MessageSecurity.java |     40 +
 .../security/PermissiveCertificateVerifier.java    |     35 +
 .../plc4x/java/opcua/security/SecurityPolicy.java  |    210 +
 .../plc4x/java/opcua/security/SymmetricKeys.java   |    155 +
 .../security/TrustStoreCertificateVerifier.java    |     55 +
 .../org/apache/plc4x/java/opcua/OpcuaDriverIT.java |      1 +
 .../plc4x/java/opcua/OpcuaPlcDriverTest.java       |    313 +-
 .../plc4x/java/opcua/TestCertificateGenerator.java |     69 +
 .../java/opcua/context/EncryptionHandlerTest.java  |    276 +
 .../protocol/OpcuaSubscriptionHandleTest.java      |    439 +-
 .../opcua/protocol/chunk/ChunkFactoryTest.java     |    140 +
 .../opcua/protocol/chunk/PayloadConverterTest.java |     71 +
 .../milo/examples/server/TestMiloServer.java       |    281 +
 .../src/test/resources/chunk-calculation-1024.csv  |     49 +
 .../src/test/resources/chunk-calculation-2048.csv  |     49 +
 .../src/test/resources/chunk-calculation-3072.csv  |     49 +
 .../src/test/resources/chunk-calculation-4096.csv  |     49 +
 .../src/test/resources/chunk-calculation-5120.csv  |     49 +
 .../opcua/src/test/resources/log4j.properties      |     24 -
 .../opcua/src/test/resources/logback-test.xml      |      6 +-
 plc4j/drivers/open-protocol/.factorypath           |     49 +
 plc4j/drivers/open-protocol/pom.xml                |     20 +-
 .../readwrite/OpenProtocolMessage.java             |      3 +-
 .../java/openprotocol/OpenProtocolDriver.java      |     39 +-
 .../config/OpenProtocolConfiguration.java          |      4 +-
 plc4j/drivers/plc4x/.factorypath                   |     48 +
 plc4j/drivers/plc4x/pom.xml                        |     18 +-
 .../plc4x/java/plc4x/readwrite/Plc4xMessage.java   |      3 +-
 .../plc4x/java/plc4x/readwrite/Plc4xValue.java     |    461 +-
 .../org/apache/plc4x/java/plc4x/Plc4xDriver.java   |     47 +-
 .../java/plc4x/config/Plc4xConfiguration.java      |      7 +-
 .../java/plc4x/protocol/Plc4xProtocolLogic.java    |     18 +-
 plc4j/drivers/pom.xml                              |      4 +-
 plc4j/drivers/profinet-ng/.factorypath             |     56 +
 plc4j/drivers/profinet-ng/pom.xml                  |     24 +-
 .../plc4x/java/profinet/readwrite/DataItem.java    |   1332 +-
 .../plc4x/java/profinet/readwrite/LldpUnit.java    |      3 +-
 .../plc4x/java/profinet/readwrite/PnDcp_Block.java |      3 +-
 .../readwrite/PnDcp_Pdu_IdentifyRes_Payload.java   |      3 +-
 .../java/profinet/readwrite/PnIoCm_Block.java      |      3 +-
 .../java/profinet/readwrite/PnIoCm_Submodule.java  |      3 +-
 .../readwrite/TlvOrgSpecificIeee8023Unit.java      |      3 +-
 .../readwrite/TlvOrgSpecificProfibusUnit.java      |      3 +-
 .../apache/plc4x/java/profinet/ProfinetDriver.java |     49 +-
 .../profinet/config/ProfinetConfiguration.java     |      4 +-
 .../java/profinet/packets/PnDcpPacketFactory.java  |     70 +-
 .../profinet/protocol/ProfinetProtocolLogic.java   |     89 +-
 .../profinet/ManualProfinetIoTestAdam6117PN.java   |     48 +
 .../profinet/ManualProfinetIoTestAdam6150PN.java   |     48 +
 .../java/profinet/ManualProfinetIoTestAdamPN.java  |     45 -
 .../profinet/ManualProfinetIoTestSimocode.java     |     44 -
 .../profinet/ManualProfinetIoTestSimocodePN.java   |     55 +
 .../java/profinet/ManualProfinetIoTestWagoPN.java  |     44 +
 .../ManualProfinetIoTestWagoPNCoupler.java         |     45 -
 .../profinet/ManualProfinetIoTestZylkSimocode.java |      2 +-
 .../GSDML-V2.2-Advantech-ADAM6100-20111216.xml     |    346 +
 .../GSDML-V2.3-SIEMENS-SIMOCODEproVPN-20201104.xml |    873 +
 .../GSDML-V2.33-wago-series750_753-20230115.xml    | 113157 ++++++++++++++++++
 ...GSDML-V2.43-SIEMENS-SIMOCODEproVPN-20220817.xml |   1217 +
 .../src/test/resources/logback-test.xml            |      2 +-
 plc4j/drivers/profinet/.factorypath                |     55 +
 plc4j/drivers/profinet/pom.xml                     |     42 +-
 .../plc4x/java/profinet/readwrite/DataItem.java    |   1332 +-
 .../plc4x/java/profinet/readwrite/LldpUnit.java    |      3 +-
 .../plc4x/java/profinet/readwrite/PnDcp_Block.java |      3 +-
 .../readwrite/PnDcp_Pdu_IdentifyRes_Payload.java   |      3 +-
 .../java/profinet/readwrite/PnIoCm_Block.java      |      3 +-
 .../java/profinet/readwrite/PnIoCm_Submodule.java  |      3 +-
 .../readwrite/TlvOrgSpecificIeee8023Unit.java      |      3 +-
 .../readwrite/TlvOrgSpecificProfibusUnit.java      |      3 +-
 .../apache/plc4x/java/profinet/ProfinetDriver.java |     45 +-
 .../profinet/config/ProfinetConfiguration.java     |     25 +-
 .../profinet/context/ProfinetDeviceContext.java    |      2 +-
 .../plc4x/java/profinet/device/ProfinetDevice.java |     62 +-
 .../java/profinet/ManualProfinetIoAdamTest.java    |     73 +
 .../profinet/ManualProfinetIoSimocodeTest.java     |     76 +
 .../plc4x/java/profinet/ManualProfinetIoTest.java  |     73 -
 .../java/profinet/ManualProfinetPcapTest.java      |    120 +
 plc4j/drivers/s7/.factorypath                      |     49 +
 plc4j/drivers/s7/pom.xml                           |     18 +-
 .../java/s7/readwrite/AlarmMessageAckPushType.java |     22 +-
 .../java/s7/readwrite/AlarmMessagePushType.java    |     22 +-
 .../java/s7/readwrite/AlarmMessageQueryType.java   |     10 +-
 .../java/s7/readwrite/AssociatedValueType.java     |      6 +-
 .../plc4x/java/s7/readwrite/ControllerType.java    |     60 +
 .../apache/plc4x/java/s7/readwrite/DataItem.java   |    943 +-
 .../plc4x/java/s7/readwrite/DateAndTime.java       |    141 +-
 .../s7/readwrite/S7PayloadDiagnosticMessage.java   |    174 +-
 .../S7PayloadUserDataItemClkFResponse.java         |     76 +-
 .../S7PayloadUserDataItemClkResponse.java          |     76 +-
 .../S7PayloadUserDataItemClkSetRequest.java        |     30 +-
 ...rDataItemCpuFunctionMsgSubscriptionRequest.java |     82 +-
 .../plc4x/java/s7/readwrite/TransportSize.java     |    121 +-
 .../apache/plc4x/java/s7/events/S7CyclicEvent.java |    288 +-
 .../apache/plc4x/java/s7/readwrite/S7Driver.java   |     17 +-
 .../readwrite/configuration/S7Configuration.java   |     23 +-
 .../java/s7/readwrite/context/S7DriverContext.java |     12 +-
 .../readwrite/protocol/S7HGeneratedDriverBase.java |     74 +-
 .../plc4x/java/s7/readwrite/protocol/S7HMux.java   |      4 +-
 .../java/s7/readwrite/protocol/S7HMuxImpl.java     |      7 +-
 .../s7/readwrite/protocol/S7HPlcConnection.java    |     33 +-
 .../protocol/S7HSingleProtocolStackConfigurer.java |      6 +-
 .../readwrite/protocol/S7ProtocolEventLogic.java   |     36 +-
 .../s7/readwrite/protocol/S7ProtocolLogic.java     |    277 +-
 .../java/s7/readwrite/tag/S7SubscriptionTag.java   |     37 +-
 .../apache/plc4x/java/s7/readwrite/tag/S7Tag.java  |     14 +-
 .../java/s7/readwrite/types/S7ControllerType.java  |     31 -
 .../readwrite/utils/S7PlcSubscriptionRequest.java  |    363 +
 .../java/s7/readwrite/utils/StaticHelper.java      |    261 +-
 .../s7/src/test/java/BenchmarkGeneratedS7.java     |      2 +-
 .../java/s7/readwrite/ManualS71200DriverTest.java  |    104 +
 .../java/s7/readwrite/ManualS71500DriverTest.java  |     70 +
 .../java/s7/readwrite/ManualS7DriverTest.java      |    119 -
 .../readwrite/tag/S7StringFixedLengthTagTest.java  |      2 +-
 plc4j/drivers/simulated/.factorypath               |     46 +
 plc4j/drivers/simulated/pom.xml                    |     15 +-
 .../plc4x/java/simulated/readwrite/DataItem.java   |   1423 +-
 .../configuration/SimulatedConfiguration.java      |     25 +
 .../connection/SimulatedConnectionTest.java        |     12 +-
 plc4j/examples/hello-ads-telemetry/.factorypath    |     75 +
 plc4j/examples/hello-ads-telemetry/pom.xml         |      6 +-
 plc4j/examples/hello-cloud-azure/.factorypath      |     80 +
 plc4j/examples/hello-cloud-azure/pom.xml           |      8 +-
 plc4j/examples/hello-cloud-google/.factorypath     |     79 +
 plc4j/examples/hello-cloud-google/pom.xml          |      8 +-
 .../examples/hello-connectivity-mqtt/.factorypath  |     83 +
 plc4j/examples/hello-connectivity-mqtt/pom.xml     |      6 +-
 .../examples/connectivity/mqtt/MqttConnector.java  |      2 +-
 plc4j/examples/hello-discovery/.factorypath        |     76 +
 plc4j/examples/hello-discovery/pom.xml             |      6 +-
 .../examples/hellodiscovery/HelloDiscovery.java    |      5 +-
 plc4j/examples/hello-docker/Dockerfile             |      4 +-
 .../hello-influx-data-collection/.factorypath      |     94 +
 .../examples/hello-influx-data-collection/pom.xml  |     10 +-
 .../examples/hello-integration-iotdb/.factorypath  |    100 +
 plc4j/examples/hello-integration-iotdb/pom.xml     |      6 +-
 .../java/examples/integration/iotdb/PlcLogger.java |      2 +-
 plc4j/examples/hello-nats/.factorypath             |     78 +
 plc4j/examples/hello-nats/pom.xml                  |     11 +-
 .../plc4x/java/examples/hellonats/HelloNats.java   |     12 +-
 plc4j/examples/hello-opm/.factorypath              |     80 +
 plc4j/examples/hello-opm/pom.xml                   |      8 +-
 plc4j/examples/hello-webservice/.factorypath       |     80 +
 plc4j/examples/hello-webservice/pom.xml            |      6 +-
 .../examples/hellowebservice/HelloWebservice.java  |      2 +-
 plc4j/examples/hello-world-kotlin/.factorypath     |     75 +
 plc4j/examples/hello-world-kotlin/pom.xml          |     10 +-
 .../java/examples/hellokotlin/ReadModbusPal.kt     |      2 +-
 .../.factorypath                                   |     75 +
 .../hello-world-plc4x-discover-and-browse/pom.xml  |      6 +-
 .../HelloPlc4xDiscoverAndBrowse.java               |      6 +-
 plc4j/examples/hello-world-plc4x-read/.factorypath |     76 +
 plc4j/examples/hello-world-plc4x-read/pom.xml      |      6 +-
 .../examples/helloplc4x/read/HelloPlc4xRead.java   |      2 +-
 .../hello-world-plc4x-subscribe/.factorypath       |     77 +
 plc4j/examples/hello-world-plc4x-subscribe/pom.xml |     13 +-
 .../subscribe/HelloPlc4xSubscription.java          |      2 +-
 .../examples/hello-world-plc4x-write/.factorypath  |     76 +
 plc4j/examples/hello-world-plc4x-write/pom.xml     |      6 +-
 .../examples/helloplc4x/write/HelloPlc4xWrite.java |      2 +-
 plc4j/examples/plc4j-s7event/.factorypath          |     75 +
 plc4j/examples/plc4j-s7event/pom.xml               |      8 +-
 plc4j/examples/poll-loop/.factorypath              |     74 +
 plc4j/examples/poll-loop/pom.xml                   |      8 +-
 .../plc4x/java/examples/pollloop/PollLoop.java     |      2 +-
 plc4j/examples/pom.xml                             |      8 +-
 plc4j/integrations/apache-calcite/.factorypath     |    110 +
 plc4j/integrations/apache-calcite/pom.xml          |     14 +-
 plc4j/integrations/apache-kafka/.factorypath       |     72 +
 plc4j/integrations/apache-kafka/pom.xml            |     12 +-
 .../apache-nifi/nifi-plc4x-nar/.factorypath        |     93 +
 .../apache-nifi/nifi-plc4x-nar/pom.xml             |     10 +-
 .../apache-nifi/nifi-plc4x-processors/.factorypath |     73 +
 .../apache-nifi/nifi-plc4x-processors/pom.xml      |     28 +-
 .../org/apache/plc4x/nifi/Plc4xSinkProcessor.java  |      2 +-
 .../apache/plc4x/nifi/Plc4xSourceProcessor.java    |      2 +-
 .../nifi/subscription/Plc4xListenerDispatcher.java |      2 +-
 plc4j/integrations/apache-nifi/pom.xml             |      8 +-
 plc4j/integrations/plc4j-apache-karaf/pom.xml      |      2 +-
 plc4j/integrations/pom.xml                         |     18 +-
 plc4j/osgi/.factorypath                            |     46 +
 plc4j/osgi/pom.xml                                 |      8 +-
 plc4j/pom.xml                                      |      6 +-
 plc4j/spi/.factorypath                             |     45 +
 plc4j/spi/pom.xml                                  |      6 +-
 .../apache/plc4x/java/spi/ConversationContext.java |     58 +-
 .../apache/plc4x/java/spi/Plc4xNettyWrapper.java   |      5 +-
 .../fields/FieldReaderDiscriminatorEnum.java       |     41 +
 .../spi/codegen/fields/FieldReaderFactory.java     |      4 +
 .../java/spi/configuration/Configuration.java      |     23 -
 .../spi/configuration/ConfigurationFactory.java    |     47 +-
 .../java/spi/configuration/HasConfiguration.java   |      2 +-
 .../java/spi/configuration/PlcConfiguration.java   |     23 +
 .../configuration/PlcConnectionConfiguration.java  |     23 +
 .../configuration/PlcTransportConfiguration.java   |     22 +
 .../spi/configuration/annotations/Description.java |     32 +
 .../java/spi/connection/AbstractPlcConnection.java |     18 +-
 .../connection/CustomProtocolStackConfigurer.java  |     48 +-
 .../spi/connection/DefaultNettyPlcConnection.java  |     28 +-
 .../java/spi/connection/GeneratedDriverBase.java   |    261 +-
 .../spi/connection/ProtocolStackConfigurer.java    |      5 +-
 .../connection/SingleProtocolStackConfigurer.java  |      6 +-
 .../plc4x/java/spi/events/DiscoveredEvent.java     |      9 +-
 .../java/spi/generation/ReadBufferByteBased.java   |    113 +-
 .../java/spi/generation/ReadBufferXmlBased.java    |      3 +-
 .../java/spi/generation/WriteBufferByteBased.java  |     99 +-
 .../spi/internal/DefaultConversationContext.java   |      4 +-
 .../plc4x/java/spi/metadata/DefaultOption.java     |     67 +
 .../java/spi/metadata/DefaultOptionMetadata.java   |     46 +
 .../apache/plc4x/java/spi/transport/Transport.java |      3 +-
 .../java/spi/transport/TransportConfiguration.java |     25 -
 .../TransportConfigurationTypeProvider.java        |     26 -
 .../org/apache/plc4x/java/spi/values/PlcBINT.java  |      5 +
 .../org/apache/plc4x/java/spi/values/PlcBOOL.java  |      5 +
 .../org/apache/plc4x/java/spi/values/PlcBREAL.java |      5 +
 .../org/apache/plc4x/java/spi/values/PlcBYTE.java  |      5 +
 .../org/apache/plc4x/java/spi/values/PlcCHAR.java  |      5 +
 .../org/apache/plc4x/java/spi/values/PlcDATE.java  |      5 +
 .../plc4x/java/spi/values/PlcDATE_AND_LTIME.java   |    141 +
 .../org/apache/plc4x/java/spi/values/PlcDINT.java  |      5 +
 .../org/apache/plc4x/java/spi/values/PlcDWORD.java |      5 +
 .../org/apache/plc4x/java/spi/values/PlcINT.java   |      5 +
 .../org/apache/plc4x/java/spi/values/PlcLDATE.java |      5 +
 .../org/apache/plc4x/java/spi/values/PlcLINT.java  |      5 +
 .../org/apache/plc4x/java/spi/values/PlcLREAL.java |      5 +
 .../plc4x/java/spi/values/PlcLTIME_OF_DAY.java     |      2 +-
 .../org/apache/plc4x/java/spi/values/PlcLWORD.java |      5 +
 .../org/apache/plc4x/java/spi/values/PlcREAL.java  |      5 +
 .../plc4x/java/spi/values/PlcRawByteArray.java     |      9 +-
 .../org/apache/plc4x/java/spi/values/PlcSINT.java  |      7 +-
 .../apache/plc4x/java/spi/values/PlcStruct.java    |      2 +-
 .../org/apache/plc4x/java/spi/values/PlcUBINT.java |      5 +
 .../org/apache/plc4x/java/spi/values/PlcUDINT.java |      5 +
 .../org/apache/plc4x/java/spi/values/PlcUINT.java  |      5 +
 .../org/apache/plc4x/java/spi/values/PlcULINT.java |      5 +
 .../org/apache/plc4x/java/spi/values/PlcUSINT.java |      5 +
 .../plc4x/java/spi/values/PlcValueHandler.java     |     24 +
 .../org/apache/plc4x/java/spi/values/PlcWCHAR.java |      5 +
 .../org/apache/plc4x/java/spi/values/PlcWORD.java  |      5 +
 .../config/TestConfigurationComplex.java           |      5 +-
 .../config/TestConfigurationDefaults.java          |      4 +-
 .../TestConfigurationParameterConverter.java       |      4 +-
 .../config/TestConfigurationRequired.java          |      4 +-
 .../config/TestConfigurationSimple.java            |      4 +-
 .../connection/DefaultNettyPlcConnectionTest.java  |     35 +-
 .../plc4x/java/spi/connection/GateKeeper.java      |      2 +-
 .../java/spi/connection/PlcConnectionFactory.java  |      2 +-
 .../SingleProtocolStackConfigurerTest.java         |      2 +-
 .../java/spi/connection/TestChannelFactory.java    |      2 +-
 .../plc4x/java/spi/connection/TestMessage.java     |      2 +-
 .../plc4x/java/spi/connection/TestProtocol.java    |      2 +-
 .../optimizer/RequestTransactionManagerTest.java   |      2 +-
 .../java/spi/parser/ConnectionParserTest.java      |      4 +-
 plc4j/tools/capture-replay/.factorypath            |     35 +
 plc4j/tools/capture-replay/pom.xml                 |      4 +-
 plc4j/tools/connection-cache/.factorypath          |     30 +
 plc4j/tools/connection-cache/pom.xml               |     10 +-
 .../java/utils/cache/ConnectionContainer.java      |     10 +
 .../java/utils/cache/LeasedPlcConnection.java      |     12 +-
 plc4j/tools/opcua-server/.factorypath              |     83 +
 plc4j/tools/opcua-server/pom.xml                   |     12 +-
 .../opcuaserver/backend/Plc4xCommunication.java    |      4 +-
 plc4j/tools/opm/.factorypath                       |     49 +
 plc4j/tools/opm/pom.xml                            |     10 +-
 .../java/opm/PlcEntityManagerComplexTest.java      |      8 +-
 plc4j/tools/plc4x-server/.factorypath              |     65 +
 plc4j/tools/plc4x-server/pom.xml                   |     14 +-
 plc4j/tools/pom.xml                                |     21 +-
 plc4j/tools/scraper-ng/.factorypath                |     30 +
 plc4j/tools/scraper-ng/pom.xml                     |      8 +-
 plc4j/tools/scraper/.factorypath                   |     38 +
 plc4j/tools/scraper/pom.xml                        |     12 +-
 .../triggeredscraper/TriggeredScraperImpl.java     |     26 +-
 .../triggeredscraper/TriggeredScraperTask.java     |      4 +-
 plc4j/tools/ui/application/.factorypath            |    126 +
 plc4j/tools/ui/application/pom.xml                 |    179 +
 .../java/tools/ui/Plc4xUiBackendApplication.java   |     34 +
 .../src/main/resources/application-dev.properties  |     18 +
 .../src/main/resources/application.properties      |     31 +
 .../ui/application/src/main/resources/logback.xml  |     39 +
 .../tools/ui/Plc4xUiBackendApplicationTests.java   |     34 +
 .../src/test/resources/application-test.properties |     19 +
 plc4j/tools/ui/backend/.factorypath                |    126 +
 plc4j/tools/ui/backend/pom.xml                     |    161 +
 .../tools/ui/configuration/Plc4xConfiguration.java |     34 +
 .../tools/ui/configuration/WebSocketConfig.java    |     43 +
 .../java/tools/ui/controller/DeviceController.java |     64 +
 .../java/tools/ui/controller/DriverController.java |     51 +
 .../plc4x/java/tools/ui/event/DeviceEvent.java     |     30 +
 .../plc4x/java/tools/ui/event/EventType.java       |     28 +
 .../java/tools/ui/event/UiApplicationEvent.java    |     42 +
 .../java/tools/ui/handler/WebSocketHandler.java    |    107 +
 .../java/tools/ui/model/ConfigurationOption.java   |     52 +
 .../apache/plc4x/java/tools/ui/model/Device.java   |    109 +
 .../apache/plc4x/java/tools/ui/model/Driver.java   |     49 +
 .../plc4x/java/tools/ui/model/Transport.java       |     49 +
 .../java/tools/ui/repository/DeviceRepository.java |     30 +
 .../plc4x/java/tools/ui/service/DeviceService.java |     82 +
 .../plc4x/java/tools/ui/service/DriverService.java |    119 +
 plc4j/tools/ui/backend/ws.html                     |     36 +
 plc4j/tools/ui/frontend/.factorypath               |    124 +
 plc4j/tools/ui/frontend/pom.xml                    |    222 +
 plc4j/tools/ui/frontend/project/.eslintrc.cjs      |     37 +
 plc4j/tools/ui/frontend/project/.gitignore         |     25 +
 plc4j/tools/ui/frontend/project/README.md          |     49 +
 plc4j/tools/ui/frontend/project/index.html         |     32 +
 plc4j/tools/ui/frontend/project/package.json       |     51 +
 .../ui/frontend/project/public/plc4x-favicon.png   |    Bin 0 -> 6065 bytes
 plc4j/tools/ui/frontend/project/src/App.css        |     19 +
 plc4j/tools/ui/frontend/project/src/App.tsx        |    106 +
 .../ui/frontend/project/src/assets/plc4x-logo.svg  |   1494 +
 .../tools/ui/frontend/project/src/assets/react.svg |     23 +
 .../project/src/components/DeviceDialog.tsx        |    184 +
 .../project/src/components/NavigationTree.tsx      |    221 +
 .../project/src/components/PlcConnection.tsx       |     45 +
 .../src/generated/plc4j-tools-ui-frontend.ts       |    208 +
 plc4j/tools/ui/frontend/project/src/index.css      |    102 +
 .../ui/frontend/project/src/layouts/MainLayout.tsx |     73 +
 plc4j/tools/ui/frontend/project/src/main.tsx       |     37 +
 .../ui/frontend/project/src/model/TreeItemData.ts  |     37 +
 .../tools/ui/frontend/project/src/pages/About.tsx  |     24 +
 .../ui/frontend/project/src/pages/Inspect.tsx      |    140 +
 plc4j/tools/ui/frontend/project/src/pages/Mqtt.tsx |     24 +
 .../tools/ui/frontend/project/src/pages/OpcUa.tsx  |     24 +
 .../ui/frontend/project/src/pages/Settings.tsx     |     24 +
 plc4j/tools/ui/frontend/project/src/store/index.ts |     91 +
 .../tools/ui/frontend/project/src/utils/Counter.ts |     28 +
 plc4j/tools/ui/frontend/project/src/vite-env.d.ts  |     20 +
 plc4j/tools/ui/frontend/project/tsconfig.json      |     25 +
 plc4j/tools/ui/frontend/project/tsconfig.node.json |     10 +
 plc4j/tools/ui/frontend/project/vite.config.ts     |     26 +
 plc4j/tools/ui/pom.xml                             |    113 +
 plc4j/transports/can/.factorypath                  |     45 +
 plc4j/transports/can/pom.xml                       |      6 +-
 .../plc4x/java/transport/can/CANTransport.java     |      5 +-
 .../transport/can/CANTransportConfiguration.java   |      4 +-
 plc4j/transports/pcap-replay/.factorypath          |     48 +
 plc4j/transports/pcap-replay/pom.xml               |     14 +-
 .../DefaultPcapReplayTransportConfiguration.java   |     10 +
 .../transport/pcapreplay/PcapReplayTransport.java  |      4 +-
 plc4j/transports/pcap-shared/.factorypath          |     48 +
 plc4j/transports/pcap-shared/pom.xml               |      8 +-
 .../pcap/DefaultPcapTransportConfiguration.java    |      3 +
 .../transport/pcap/PcapTransportConfiguration.java |      4 +-
 plc4j/transports/pom.xml                           |      4 +-
 plc4j/transports/raw-socket/.factorypath           |     49 +
 plc4j/transports/raw-socket/pom.xml                |     14 +-
 .../DefaultRawSocketTransportConfiguration.java    |      2 +
 .../transport/rawsocket/RawSocketTransport.java    |      4 +-
 plc4j/transports/serial/.factorypath               |     45 +
 plc4j/transports/serial/pom.xml                    |      8 +-
 .../DefaultSerialTransportConfiguration.java       |     47 +-
 .../java/transport/serial/SerialChannelConfig.java |     18 +-
 .../transport/serial/SerialChannelFactory.java     |      2 +-
 .../transport/serial/SerialChannelHandler.java     |      2 +-
 .../transport/serial/SerialChannelOptions.java     |      6 +-
 .../serial/SerialChannelOptionsParity.java         |     35 +
 .../java/transport/serial/SerialTransport.java     |     20 +-
 .../serial/SerialTransportConfiguration.java       |      6 +-
 plc4j/transports/socketcan/.factorypath            |     46 +
 plc4j/transports/socketcan/pom.xml                 |     14 +-
 .../transport/socketcan/SocketCANTransport.java    |     13 +-
 plc4j/transports/tcp/.factorypath                  |     45 +
 plc4j/transports/tcp/pom.xml                       |      8 +-
 .../tcp/DefaultTcpTransportConfiguration.java      |      4 +
 .../plc4x/java/transport/tcp/TcpTransport.java     |      4 +-
 .../transport/tcp/TcpTransportConfiguration.java   |      4 +-
 plc4j/transports/test/.factorypath                 |     52 +
 plc4j/transports/test/pom.xml                      |      6 +-
 .../plc4x/java/transport/test/TestTransport.java   |      6 +
 .../transport/test/TestTransportConfiguration.java |      4 +-
 plc4j/transports/udp/.factorypath                  |     45 +
 plc4j/transports/udp/pom.xml                       |      8 +-
 .../udp/DefaultUdpTransportConfiguration.java      |      4 +
 .../plc4x/java/transport/udp/UdpTransport.java     |      4 +-
 .../transport/udp/UdpTransportConfiguration.java   |      4 +-
 plc4j/transports/virtualcan/.factorypath           |     45 +
 plc4j/transports/virtualcan/pom.xml                |     12 +-
 .../java/transport/virtualcan/VirtualCANFrame.java |     37 +-
 .../transport/virtualcan/VirtualCANTransport.java  |     17 +-
 .../transport/virtualcan/io/VirtualCANFrameIO.java |     43 -
 plc4j/utils/pcap-replay/.factorypath               |     39 +
 plc4j/utils/pcap-replay/pom.xml                    |      6 +-
 plc4j/utils/pcap-shared/.factorypath               |     38 +
 plc4j/utils/pcap-shared/pom.xml                    |      4 +-
 plc4j/utils/plc-simulator/.factorypath             |     56 +
 plc4j/utils/plc-simulator/pom.xml                  |     14 +-
 plc4j/utils/pom.xml                                |      4 +-
 plc4j/utils/raw-sockets/.factorypath               |     40 +
 plc4j/utils/raw-sockets/pom.xml                    |      8 +-
 plc4j/utils/test-generator/.factorypath            |     58 +
 plc4j/utils/test-generator/pom.xml                 |     14 +-
 plc4j/utils/test-utils/.factorypath                |     56 +
 plc4j/utils/test-utils/pom.xml                     |     10 +-
 .../apache/plc4x/test/DisableOnJenkinsFlag.java    |     37 +
 .../plc4x/test/DisableOnJenkinsFlagCondition.java  |     42 +
 .../plc4x/test/driver/internal/TestStep.java       |      5 +-
 .../internal/handlers/ApiRequestHandler.java       |    144 +-
 .../handlers/IncomingPlcMessageHandler.java        |      7 +-
 .../org/apache/plc4x/test/manual/ManualTest.java   |     13 +-
 .../migration/MessageValidatorAndMigrator.java     |      9 +-
 plc4net/api/pom.xml                                |     71 -
 .../knxnetip/readwrite/model/KnxManufacturer.cs    |    111 +-
 .../knxnetip/readwrite/model/KnxProperty.cs        |     88 +-
 plc4net/pom.xml                                    |     10 +-
 {sandbox/plc4py => plc4py}/.gitignore              |      0
 {sandbox/plc4py => plc4py}/.pre-commit-config.yaml |      0
 plc4py/plc4py/PlcDriverManager.py                  |    103 +
 {sandbox/plc4py => plc4py}/plc4py/__init__.py      |      0
 plc4py/plc4py/api/PlcConnection.py                 |    119 +
 {sandbox/plc4py => plc4py}/plc4py/api/PlcDriver.py |      0
 {sandbox/plc4py => plc4py}/plc4py/api/__init__.py  |      0
 .../plc4py/api/authentication/PlcAuthentication.py |      0
 .../plc4py/api/authentication/__init__.py          |      0
 .../plc4py/api/exceptions/__init__.py              |      0
 plc4py/plc4py/api/exceptions/exceptions.py         |     51 +
 .../plc4py/api/listener/__init__.py                |      0
 .../plc4py/api/messages/PlcDiscovery.py            |      0
 .../plc4py/api/messages/PlcField.py                |      0
 plc4py/plc4py/api/messages/PlcMessage.py           |     23 +
 plc4py/plc4py/api/messages/PlcRequest.py           |    104 +
 plc4py/plc4py/api/messages/PlcResponse.py          |     88 +
 .../plc4py/api/messages/__init__.py                |      0
 plc4py/plc4py/api/value/PlcValue.py                |     67 +
 .../plc4py => plc4py}/plc4py/api/value/__init__.py |      0
 plc4py/plc4py/drivers/PlcDriverLoader.py           |     45 +
 .../plc4py => plc4py}/plc4py/drivers/__init__.py   |      0
 plc4py/plc4py/drivers/mock/MockConnection.py       |    232 +
 .../plc4py/drivers/mock/MockReadRequestBuilder.py  |      0
 .../plc4py/drivers/mock/MockTag.py                 |      0
 .../plc4py/drivers/mock/__init__.py                |      0
 .../plc4py/drivers/modbus/ModbusConfiguration.py   |     37 +
 plc4py/plc4py/drivers/modbus/ModbusConnection.py   |    228 +
 plc4py/plc4py/drivers/modbus/ModbusDevice.py       |    161 +
 .../plc4py/drivers/modbus/ModbusProtocol.py        |      0
 .../plc4py/drivers/modbus/ModbusTag.py             |      0
 .../plc4py/drivers/modbus/__init__.py              |      0
 plc4py/plc4py/drivers/umas/UmasConfiguration.py    |     38 +
 plc4py/plc4py/drivers/umas/UmasConnection.py       |    290 +
 plc4py/plc4py/drivers/umas/UmasDevice.py           |    465 +
 plc4py/plc4py/drivers/umas/UmasProtocol.py         |    101 +
 plc4py/plc4py/drivers/umas/UmasTag.py              |     79 +
 plc4py/plc4py/drivers/umas/UmasVariables.py        |    212 +
 .../plc4py/drivers/umas}/__init__.py               |      0
 .../modbus => plc4py/plc4py/protocols}/__init__.py |      0
 .../plc4py/protocols/modbus/StaticHelper.py        |      0
 .../plc4py/protocols/modbus}/__init__.py           |      0
 .../plc4py/protocols/modbus/readwrite/DataItem.py  |    654 +
 .../protocols/modbus/readwrite/DriverType.py       |     28 +
 .../plc4py/protocols/modbus/readwrite/ModbusADU.py |    169 +
 .../protocols/modbus/readwrite/ModbusAsciiADU.py   |    155 +
 .../protocols/modbus/readwrite/ModbusConstants.py  |      0
 .../protocols/modbus/readwrite/ModbusDataType.py   |      0
 .../ModbusDeviceInformationConformityLevel.py      |     28 +
 .../readwrite/ModbusDeviceInformationLevel.py      |     29 +
 .../ModbusDeviceInformationMoreFollows.py          |     27 +
 .../readwrite/ModbusDeviceInformationObject.py     |    121 +
 .../protocols/modbus/readwrite/ModbusErrorCode.py  |     35 +
 .../plc4py/protocols/modbus/readwrite/ModbusPDU.py |    676 +
 .../modbus/readwrite/ModbusPDUDiagnosticRequest.py |    125 +
 .../readwrite/ModbusPDUDiagnosticResponse.py       |    125 +
 .../protocols/modbus/readwrite/ModbusPDUError.py   |    114 +
 .../ModbusPDUGetComEventCounterRequest.py          |     94 +
 .../ModbusPDUGetComEventCounterResponse.py         |    129 +
 .../readwrite/ModbusPDUGetComEventLogRequest.py    |     94 +
 .../readwrite/ModbusPDUGetComEventLogResponse.py   |    176 +
 .../ModbusPDUMaskWriteHoldingRegisterRequest.py    |    148 +
 .../ModbusPDUMaskWriteHoldingRegisterResponse.py   |    148 +
 .../modbus/readwrite/ModbusPDUReadCoilsRequest.py  |    127 +
 .../modbus/readwrite/ModbusPDUReadCoilsResponse.py |    123 +
 .../ModbusPDUReadDeviceIdentificationRequest.py    |    144 +
 .../ModbusPDUReadDeviceIdentificationResponse.py   |    251 +
 .../ModbusPDUReadDiscreteInputsRequest.py          |    127 +
 .../ModbusPDUReadDiscreteInputsResponse.py         |    125 +
 .../ModbusPDUReadExceptionStatusRequest.py         |     96 +
 .../ModbusPDUReadExceptionStatusResponse.py        |    108 +
 .../readwrite/ModbusPDUReadFifoQueueRequest.py     |    112 +
 .../readwrite/ModbusPDUReadFifoQueueResponse.py    |    136 +
 .../readwrite/ModbusPDUReadFileRecordRequest.py    |    128 +
 .../ModbusPDUReadFileRecordRequestItem.py          |    143 +
 .../readwrite/ModbusPDUReadFileRecordResponse.py   |    128 +
 .../ModbusPDUReadFileRecordResponseItem.py         |    127 +
 .../ModbusPDUReadHoldingRegistersRequest.py        |    129 +
 .../ModbusPDUReadHoldingRegistersResponse.py       |    125 +
 .../ModbusPDUReadInputRegistersRequest.py          |    127 +
 .../ModbusPDUReadInputRegistersResponse.py         |    125 +
 ...sPDUReadWriteMultipleHoldingRegistersRequest.py |    205 +
 ...PDUReadWriteMultipleHoldingRegistersResponse.py |    125 +
 .../readwrite/ModbusPDUReportServerIdRequest.py    |     94 +
 .../readwrite/ModbusPDUReportServerIdResponse.py   |    123 +
 .../readwrite/ModbusPDUWriteFileRecordRequest.py   |    128 +
 .../ModbusPDUWriteFileRecordRequestItem.py         |    159 +
 .../readwrite/ModbusPDUWriteFileRecordResponse.py  |    128 +
 .../ModbusPDUWriteFileRecordResponseItem.py        |    159 +
 .../ModbusPDUWriteMultipleCoilsRequest.py          |    161 +
 .../ModbusPDUWriteMultipleCoilsResponse.py         |    129 +
 ...odbusPDUWriteMultipleHoldingRegistersRequest.py |    163 +
 ...dbusPDUWriteMultipleHoldingRegistersResponse.py |    133 +
 .../readwrite/ModbusPDUWriteSingleCoilRequest.py   |    127 +
 .../readwrite/ModbusPDUWriteSingleCoilResponse.py  |    127 +
 .../ModbusPDUWriteSingleRegisterRequest.py         |    129 +
 .../ModbusPDUWriteSingleRegisterResponse.py        |    129 +
 .../protocols/modbus/readwrite/ModbusRtuADU.py     |    153 +
 .../protocols/modbus/readwrite/ModbusTcpADU.py     |    190 +
 .../plc4py/protocols/modbus/readwrite}/__init__.py |      0
 .../protocols/simulated/readwrite/DataItem.py      |    680 +
 .../plc4py/protocols/simulated/readwrite/Dummy.py  |     95 +
 .../simulated/readwrite/SimulatedDataTypeSizes.py  |      0
 plc4py/plc4py/protocols/umas/StaticHelper.py       |    141 +
 .../plc4py/protocols/umas}/__init__.py             |      0
 plc4py/plc4py/protocols/umas/readwrite/DataItem.py |    384 +
 .../protocols/umas/readwrite/ModbusErrorCode.py    |     35 +
 .../plc4py/protocols/umas/readwrite/ModbusPDU.py   |    200 +
 .../protocols/umas/readwrite/ModbusPDUError.py     |    123 +
 .../protocols/umas/readwrite/ModbusTcpADU.py       |    160 +
 .../umas/readwrite/PlcMemoryBlockIdent.py          |    137 +
 .../protocols/umas/readwrite/UmasConstants.py      |     94 +
 .../protocols/umas/readwrite/UmasDataType.py       |     50 +
 .../umas/readwrite/UmasDatatypeReference.py        |    175 +
 .../UmasDeviceInformationConformityLevel.py        |     28 +
 .../umas/readwrite/UmasDeviceInformationLevel.py   |     29 +
 .../readwrite/UmasDeviceInformationMoreFollows.py  |     27 +
 .../umas/readwrite/UmasInitCommsRequest.py         |    118 +
 .../umas/readwrite/UmasInitCommsResponse.py        |    225 +
 .../protocols/umas/readwrite/UmasMemoryBlock.py    |    161 +
 .../umas/readwrite/UmasMemoryBlockBasicInfo.py     |    165 +
 plc4py/plc4py/protocols/umas/readwrite/UmasPDU.py  |    114 +
 .../plc4py/protocols/umas/readwrite/UmasPDUItem.py |    314 +
 .../umas/readwrite/UmasPDUPlcIdentRequest.py       |     96 +
 .../umas/readwrite/UmasPDUPlcIdentResponse.py      |    378 +
 .../umas/readwrite/UmasPDUPlcStatusRequest.py      |     96 +
 .../umas/readwrite/UmasPDUPlcStatusResponse.py     |    188 +
 .../umas/readwrite/UmasPDUProjectInfoRequest.py    |    114 +
 .../readwrite/UmasPDUReadDatatypeNamesResponse.py  |    158 +
 .../readwrite/UmasPDUReadMemoryBlockRequest.py     |    202 +
 .../readwrite/UmasPDUReadMemoryBlockResponse.py    |    160 +
 .../UmasPDUReadUmasUDTDefinitionResponse.py        |    146 +
 .../readwrite/UmasPDUReadUnlocatedVariableNames.py |    153 +
 .../UmasPDUReadUnlocatedVariableNamesRequest.py    |    220 +
 .../UmasPDUReadUnlocatedVariableNamesResponse.py   |    164 +
 .../UmasPDUReadUnlocatedVariableResponse.py        |    122 +
 .../umas/readwrite/UmasPDUReadVariableRequest.py   |    162 +
 .../umas/readwrite/UmasPDUReadVariableResponse.py  |    118 +
 .../protocols/umas/readwrite/UmasUDTDefinition.py  |    159 +
 .../readwrite/UmasUnlocatedVariableReference.py    |    212 +
 .../protocols/umas/readwrite/UmasVariableBlock.py  |    148 +
 .../umas/readwrite/VariableRequestReference.py     |    182 +
 .../plc4py/protocols/umas/readwrite}/__init__.py   |      0
 plc4py/plc4py/spi/Plc4xBaseProtocol.py             |     38 +
 .../plc4py/spi/PlcDriverClassLoader.py             |      0
 .../spi/context => plc4py/plc4py/spi}/__init__.py  |      0
 .../plc4py/spi/configuration/PlcConfiguration.py   |      0
 .../plc4py/spi/configuration}/__init__.py          |      0
 .../plc4py/spi/connection/ProtocolStack.py         |      0
 .../plc4py/spi/connection}/__init__.py             |      0
 .../plc4py/spi/context/DriverContext.py            |      0
 .../plc4py/spi/context}/__init__.py                |      0
 plc4py/plc4py/spi/generation/ReadBuffer.py         |    425 +
 plc4py/plc4py/spi/generation/WriteBuffer.py        |    577 +
 .../plc4py/spi/generation/__init__.py              |      0
 .../plc4py/spi/messages/ChannelMessage.py          |      0
 .../plc4py/spi/messages/PlcReader.py               |      0
 plc4py/plc4py/spi/messages/PlcRequest.py           |     81 +
 plc4py/plc4py/spi/messages/PlcWriter.py            |     37 +
 .../plc4py/spi/messages}/__init__.py               |      0
 plc4py/plc4py/spi/messages/utils/ResponseItem.py   |     32 +
 .../plc4py/spi/messages}/utils/__init__.py         |      0
 .../plc4py/spi/transport/Plc4xBaseTransport.py     |      0
 .../plc4py/spi/transport/TCPTransport.py           |      0
 .../plc4py/spi/transport}/__init__.py              |      0
 plc4py/plc4py/spi/values/Common.py                 |     30 +
 .../plc4py/spi/values/PlcValues.py                 |      0
 .../unit => plc4py/plc4py/spi/values}/__init__.py  |      0
 .../plc4py/utils/ConnectionStringHandling.py       |      0
 .../plc4py => plc4py}/plc4py/utils/GenericTypes.py |      0
 .../plc4py => plc4py/plc4py/utils}/__init__.py     |      0
 plc4py/pom.xml                                     |    318 +
 plc4py/pytest.ini                                  |     21 +
 plc4py/requirements.txt                            |     54 +
 {sandbox/plc4py => plc4py}/setup.cfg               |      0
 plc4py/setup.py                                    |     68 +
 .../unit/plc4py/api => plc4py/tests}/__init__.py   |      0
 plc4py/tests/test_plc4py.py                        |     72 +
 .../drivers => plc4py/tests/unit}/__init__.py      |      0
 .../tests/unit/plc4py}/__init__.py                 |      0
 .../tests/unit/plc4py/api}/__init__.py             |      0
 plc4py/tests/unit/plc4py/api/test_PlcRequest.py    |    167 +
 .../tests/unit/plc4py/drivers}/__init__.py         |      0
 .../tests/unit/plc4py/drivers/modbus}/__init__.py  |      0
 .../plc4py/drivers/modbus/test_modbus_codegen.py   |     59 +
 .../drivers/modbus/test_modbus_connection.py       |     70 +
 .../tests/unit/plc4py/drivers/umas}/__init__.py    |      0
 .../plc4py/drivers/umas/test_umas_connection.py    |     66 +
 .../tests/unit/plc4py/spi}/__init__.py             |      0
 .../unit/plc4py/spi/configuration}/__init__.py     |      0
 .../plc4py/spi/configuration/test_configuration.py |      0
 .../tests/unit/plc4py/spi/tcp}/__init__.py         |      0
 plc4py/tests/unit/plc4py/spi/tcp/server.py         |     47 +
 plc4py/tests/unit/plc4py/spi/test_protocol.py      |     65 +
 plc4py/tests/unit/plc4py/spi/test_read_buffer.py   |    153 +
 plc4py/tests/unit/plc4py/spi/test_transport.py     |     92 +
 plc4py/tests/unit/plc4py/spi/test_write_buffer.py  |    285 +
 pom.xml                                            |    147 +-
 protocols/ab-eth/.factorypath                      |     34 +
 protocols/ab-eth/pom.xml                           |      6 +-
 protocols/ads/.factorypath                         |     34 +
 protocols/ads/pom.xml                              |      6 +-
 .../resources/protocols/ads/DriverTestsuite.xml    |   1404 +-
 protocols/bacnetip/.factorypath                    |     34 +
 protocols/bacnetip/pom.xml                         |      6 +-
 .../protocols/bacnetip/bacnet-vendorids.mspec      |     11 +-
 protocols/c-bus/.factorypath                       |     34 +
 protocols/c-bus/pom.xml                            |      6 +-
 protocols/canopen/.factorypath                     |     34 +
 protocols/canopen/pom.xml                          |      6 +-
 .../src/main/resources/protocols/can/canopen.mspec |      6 +-
 protocols/df1/.factorypath                         |     34 +
 protocols/df1/pom.xml                              |      6 +-
 protocols/eip/.factorypath                         |     34 +
 protocols/eip/pom.xml                              |      6 +-
 protocols/firmata/.factorypath                     |     34 +
 protocols/firmata/pom.xml                          |      6 +-
 protocols/genericcan/.factorypath                  |     34 +
 protocols/genericcan/pom.xml                       |      6 +-
 .../main/resources/protocols/can/genericcan.mspec  |      6 +-
 protocols/iec-60870/.factorypath                   |     34 +
 protocols/iec-60870/pom.xml                        |      6 +-
 protocols/knxnetip/.factorypath                    |     35 +
 protocols/knxnetip/pom.xml                         |      6 +-
 .../protocols/knxnetip/knx-master-data.mspec       |   1029 +-
 .../resources/protocols/knxnetip/knxnetip.mspec    |     14 +-
 protocols/knxnetip/src/main/xslt/knx-types.xsl     |     24 +-
 protocols/modbus/.factorypath                      |     34 +
 protocols/modbus/pom.xml                           |      6 +-
 .../protocols/modbus/tcp/Modbus-all-datatypes.xml  |   3404 +
 protocols/mqtt/.factorypath                        |     34 +
 protocols/mqtt/pom.xml                             |      6 +-
 protocols/opcua/.factorypath                       |     62 +
 protocols/opcua/pom.xml                            |      6 +-
 .../generated/protocols/opcua/opc-manual.mspec     |    167 +-
 protocols/opcua/src/main/xslt/opc-manual.xsl       |    167 +-
 .../resources/protocols/opcua/DriverTestsuite.xml  |     48 +-
 protocols/open-protocol/.factorypath               |     35 +
 protocols/open-protocol/pom.xml                    |      6 +-
 protocols/plc4x-api/.factorypath                   |     34 +
 protocols/plc4x-api/pom.xml                        |      6 +-
 protocols/plc4x/.factorypath                       |     34 +
 protocols/plc4x/pom.xml                            |      6 +-
 .../main/resources/protocols/plc4x/v0/plc4x.mspec  |      2 +-
 .../protocols/plc4x/ParserSerializerTestsuite.xml  |      2 +-
 protocols/pom.xml                                  |      5 +-
 protocols/profinet/.factorypath                    |     34 +
 protocols/profinet/pom.xml                         |      6 +-
 protocols/s7/.factorypath                          |     34 +
 protocols/s7/pom.xml                               |      6 +-
 .../s7/src/main/resources/protocols/s7/s7.mspec    |    210 +-
 protocols/simulated/.factorypath                   |     34 +
 protocols/simulated/pom.xml                        |      6 +-
 protocols/socketcan/.factorypath                   |     34 +
 protocols/socketcan/pom.xml                        |      6 +-
 protocols/umas/.factorypath                        |     34 +
 protocols/umas/pom.xml                             |     53 +
 .../apache/plc4x/protocol/umas/UmasProtocol.java   |     42 +
 ...e.plc4x.plugins.codegenerator.protocol.Protocol |     19 +
 .../src/main/resources/protocols/umas/umas.mspec   |    340 +
 .../plc4x/protocol/umas/UmasProtocolTest.java      |     37 +
 .../umas}/src/test/resources/logback-test.xml      |      0
 reactors/all-drivers/pom.xml                       |      4 +-
 sandbox/.gitignore                                 |      1 -
 sandbox/discovery/pom.xml                          |     52 -
 .../plc4x/java/discovery/DiscoveryConnection.java  |    186 -
 .../plc4x/java/discovery/DiscoveryDriver.java      |     52 -
 .../plc4x/java/discovery/DiscoveryTagHandler.java  |     39 -
 .../services/org.apache.plc4x.java.api.PlcDriver   |     19 -
 sandbox/plc4py/plc4py/PlcDriverManager.py          |    103 -
 sandbox/plc4py/plc4py/api/PlcConnection.py         |     77 -
 sandbox/plc4py/plc4py/api/exceptions/exceptions.py |     47 -
 sandbox/plc4py/plc4py/api/messages/PlcMessage.py   |     22 -
 sandbox/plc4py/plc4py/api/messages/PlcRequest.py   |     57 -
 sandbox/plc4py/plc4py/api/messages/PlcResponse.py  |     72 -
 sandbox/plc4py/plc4py/api/value/PlcValue.py        |     62 -
 sandbox/plc4py/plc4py/drivers/PlcDriverLoader.py   |     45 -
 .../plc4py/plc4py/drivers/mock/MockConnection.py   |    174 -
 .../plc4py/drivers/modbus/ModbusConfiguration.py   |     33 -
 .../plc4py/drivers/modbus/ModbusConnection.py      |    150 -
 .../plc4py/plc4py/drivers/modbus/ModbusDevice.py   |    152 -
 .../plc4py/protocols/modbus/readwrite/DataItem.py  |    632 -
 .../protocols/modbus/readwrite/DriverType.py       |     27 -
 .../plc4py/protocols/modbus/readwrite/ModbusADU.py |    165 -
 .../protocols/modbus/readwrite/ModbusAsciiADU.py   |    153 -
 .../ModbusDeviceInformationConformityLevel.py      |     27 -
 .../readwrite/ModbusDeviceInformationLevel.py      |     28 -
 .../ModbusDeviceInformationMoreFollows.py          |     26 -
 .../readwrite/ModbusDeviceInformationObject.py     |    119 -
 .../protocols/modbus/readwrite/ModbusErrorCode.py  |     34 -
 .../plc4py/protocols/modbus/readwrite/ModbusPDU.py |    643 -
 .../modbus/readwrite/ModbusPDUDiagnosticRequest.py |    123 -
 .../readwrite/ModbusPDUDiagnosticResponse.py       |    123 -
 .../protocols/modbus/readwrite/ModbusPDUError.py   |    114 -
 .../ModbusPDUGetComEventCounterRequest.py          |     93 -
 .../ModbusPDUGetComEventCounterResponse.py         |    125 -
 .../readwrite/ModbusPDUGetComEventLogRequest.py    |     93 -
 .../readwrite/ModbusPDUGetComEventLogResponse.py   |    172 -
 .../ModbusPDUMaskWriteHoldingRegisterRequest.py    |    142 -
 .../ModbusPDUMaskWriteHoldingRegisterResponse.py   |    142 -
 .../modbus/readwrite/ModbusPDUReadCoilsRequest.py  |    125 -
 .../modbus/readwrite/ModbusPDUReadCoilsResponse.py |    123 -
 .../ModbusPDUReadDeviceIdentificationRequest.py    |    142 -
 .../ModbusPDUReadDeviceIdentificationResponse.py   |    247 -
 .../ModbusPDUReadDiscreteInputsRequest.py          |    125 -
 .../ModbusPDUReadDiscreteInputsResponse.py         |    125 -
 .../ModbusPDUReadExceptionStatusRequest.py         |     95 -
 .../ModbusPDUReadExceptionStatusResponse.py        |    108 -
 .../readwrite/ModbusPDUReadFifoQueueRequest.py     |    112 -
 .../readwrite/ModbusPDUReadFifoQueueResponse.py    |    136 -
 .../readwrite/ModbusPDUReadFileRecordRequest.py    |    128 -
 .../ModbusPDUReadFileRecordRequestItem.py          |    139 -
 .../readwrite/ModbusPDUReadFileRecordResponse.py   |    128 -
 .../ModbusPDUReadFileRecordResponseItem.py         |    127 -
 .../ModbusPDUReadHoldingRegistersRequest.py        |    127 -
 .../ModbusPDUReadHoldingRegistersResponse.py       |    125 -
 .../ModbusPDUReadInputRegistersRequest.py          |    125 -
 .../ModbusPDUReadInputRegistersResponse.py         |    125 -
 ...sPDUReadWriteMultipleHoldingRegistersRequest.py |    199 -
 ...PDUReadWriteMultipleHoldingRegistersResponse.py |    125 -
 .../readwrite/ModbusPDUReportServerIdRequest.py    |     93 -
 .../readwrite/ModbusPDUReportServerIdResponse.py   |    123 -
 .../readwrite/ModbusPDUWriteFileRecordRequest.py   |    128 -
 .../ModbusPDUWriteFileRecordRequestItem.py         |    155 -
 .../readwrite/ModbusPDUWriteFileRecordResponse.py  |    128 -
 .../ModbusPDUWriteFileRecordResponseItem.py        |    155 -
 .../ModbusPDUWriteMultipleCoilsRequest.py          |    159 -
 .../ModbusPDUWriteMultipleCoilsResponse.py         |    127 -
 ...odbusPDUWriteMultipleHoldingRegistersRequest.py |    159 -
 ...dbusPDUWriteMultipleHoldingRegistersResponse.py |    129 -
 .../readwrite/ModbusPDUWriteSingleCoilRequest.py   |    123 -
 .../readwrite/ModbusPDUWriteSingleCoilResponse.py  |    123 -
 .../ModbusPDUWriteSingleRegisterRequest.py         |    125 -
 .../ModbusPDUWriteSingleRegisterResponse.py        |    125 -
 .../protocols/modbus/readwrite/ModbusRtuADU.py     |    151 -
 .../protocols/modbus/readwrite/ModbusTcpADU.py     |    188 -
 .../protocols/simulated/readwrite/DataItem.py      |    658 -
 .../plc4py/protocols/simulated/readwrite/Dummy.py  |     93 -
 sandbox/plc4py/plc4py/spi/Plc4xBaseProtocol.py     |     38 -
 sandbox/plc4py/plc4py/spi/generation/ReadBuffer.py |    376 -
 .../plc4py/plc4py/spi/generation/WriteBuffer.py    |    320 -
 sandbox/plc4py/plc4py/spi/messages/PlcRequest.py   |     43 -
 .../plc4py/spi/messages/utils/ResponseItem.py      |     32 -
 sandbox/plc4py/plc4py/spi/values/Common.py         |     25 -
 sandbox/plc4py/pom.xml                             |    297 -
 sandbox/plc4py/setup.py                            |     65 -
 sandbox/plc4py/tests/test_plc4py.py                |     66 -
 .../tests/unit/plc4py/api/test_PlcRequest.py       |    167 -
 .../plc4py/drivers/modbus/test_modbus_codegen.py   |     55 -
 .../drivers/modbus/test_modbus_connection.py       |     41 -
 sandbox/plc4py/tests/unit/plc4py/spi/tcp/server.py |     48 -
 .../plc4py/tests/unit/plc4py/spi/test_protocol.py  |     64 -
 .../tests/unit/plc4py/spi/test_read_buffer.py      |    151 -
 .../plc4py/tests/unit/plc4py/spi/test_transport.py |     90 -
 .../tests/unit/plc4py/spi/test_write_buffer.py     |    285 -
 sandbox/pom.xml                                    |     78 -
 sandbox/test-java-df1-driver/README.adoc           |     35 -
 sandbox/test-java-df1-driver/pom.xml               |    180 -
 .../plc4x/java/df1/readwrite/DF1Command.java       |    181 -
 .../apache/plc4x/java/df1/readwrite/DF1Symbol.java |    182 -
 .../java/df1/readwrite/DF1SymbolMessageFrame.java  |    269 -
 .../df1/readwrite/DF1SymbolMessageFrameACK.java    |    120 -
 .../df1/readwrite/DF1SymbolMessageFrameNAK.java    |    120 -
 .../df1/readwrite/DF1UnprotectedReadRequest.java   |    159 -
 .../df1/readwrite/DF1UnprotectedReadResponse.java  |    156 -
 .../org/apache/plc4x/java/df1/DF1PlcDriver.java    |     70 -
 .../java/df1/configuration/Df1Configuration.java   |     48 -
 .../org/apache/plc4x/java/df1/field/Df1Tag.java    |     82 -
 .../apache/plc4x/java/df1/field/Df1TagHandler.java |     38 -
 .../plc4x/java/df1/protocol/Df1Protocol.java       |    157 -
 .../plc4x/java/df1/protocol/Df1ProtocolLogic.java  |     43 -
 .../plc4x/java/df1/protocol/Plc4XDf1Protocol.java  |    172 -
 .../java/df1/readwrite/utils/StaticHelper.java     |     95 -
 .../org/apache/plc4x/java/df1/types/DataType.java  |     52 -
 .../services/org.apache.plc4x.java.api.PlcDriver   |     19 -
 .../plc4x/protocol/df1/BenchmarkGeneratedDf1.java  |     75 -
 .../plc4x/protocol/df1/BenchmarkManualDf1.java     |    238 -
 .../protocol/df1/Df1ParserSerializerTest.java      |     31 -
 .../apache/plc4x/protocol/df1/EndToEndTest.java    |     50 -
 src/main/script/prerequisiteCheck.groovy           |      7 +-
 src/site/asciidoc/developers/building.adoc         |     54 +-
 src/site/asciidoc/developers/code-gen/index.adoc   |    111 +-
 .../developers/code-gen/protocol/mspec.adoc        |    263 +-
 .../asciidoc/developers/infrastructure/ci.adoc     |     41 +-
 .../asciidoc/developers/infrastructure/issues.adoc |      4 +-
 .../asciidoc/developers/infrastructure/vm.adoc     |      2 +-
 .../asciidoc/developers/infrastructure/vpn.adoc    |    189 -
 src/site/asciidoc/developers/maturity.adoc         |     14 +-
 src/site/asciidoc/developers/release/release.adoc  |     18 +-
 .../asciidoc/developers/release/validation.adoc    |      1 -
 src/site/asciidoc/developers/team.adoc             |     36 +-
 src/site/asciidoc/images/users/protocols/.png      |    Bin 2331 -> 0 bytes
 src/site/asciidoc/index.adoc                       |     31 +-
 src/site/asciidoc/users/download.adoc              |     60 +-
 .../users/getting-started/general-concepts.adoc    |     47 +-
 src/site/asciidoc/users/getting-started/index.adoc |     28 +
 src/site/asciidoc/users/getting-started/plc4c.adoc |     18 +
 .../asciidoc/users/getting-started/plc4cs.adoc     |     18 +
 .../asciidoc/users/getting-started/plc4go.adoc     |      2 +-
 src/site/asciidoc/users/getting-started/plc4j.adoc |     14 +-
 .../asciidoc/users/getting-started/plc4py.adoc     |    208 +
 .../users/getting-started/virtual-modbus.adoc      |     49 +-
 src/site/asciidoc/users/gettingstarted.adoc        |     28 -
 src/site/asciidoc/users/index.adoc                 |    121 +-
 .../users/integrations/apache-streampipes.adoc     |      4 +
 src/site/asciidoc/users/issues.adoc                |     24 +
 src/site/asciidoc/users/protocols/ab-eth.adoc      |      4 +
 src/site/asciidoc/users/protocols/ads.adoc         |     48 +-
 src/site/asciidoc/users/protocols/bacnet.adoc      |     52 +
 src/site/asciidoc/users/protocols/bacnetip.adoc    |     99 -
 src/site/asciidoc/users/protocols/c-bus.adoc       |     24 +
 src/site/asciidoc/users/protocols/can.adoc         |      1 +
 src/site/asciidoc/users/protocols/canopen.adoc     |     41 +-
 src/site/asciidoc/users/protocols/ctrlx.adoc       |     24 +
 src/site/asciidoc/users/protocols/eip.adoc         |     58 +
 src/site/asciidoc/users/protocols/ethernet-ip.adoc |     98 -
 src/site/asciidoc/users/protocols/firmata.adoc     |     29 +-
 src/site/asciidoc/users/protocols/genericcan.adoc  |     31 +-
 src/site/asciidoc/users/protocols/iec-60870.adoc   |     24 +
 src/site/asciidoc/users/protocols/index.adoc       |    286 +-
 src/site/asciidoc/users/protocols/knxnetip.adoc    |     78 +-
 src/site/asciidoc/users/protocols/logix.adoc       |     53 +-
 src/site/asciidoc/users/protocols/modbus.adoc      |     45 +-
 src/site/asciidoc/users/protocols/opc-ua.adoc      |    171 -
 src/site/asciidoc/users/protocols/opcua.adoc       |    175 +
 .../asciidoc/users/protocols/open-protocol.adoc    |     24 +
 src/site/asciidoc/users/protocols/plc4x.adoc       |     32 +-
 src/site/asciidoc/users/protocols/profinet.adoc    |     53 +-
 src/site/asciidoc/users/protocols/s7.adoc          |    128 +-
 src/site/asciidoc/users/protocols/simulated.adoc   |     24 +-
 src/site/asciidoc/users/tools/capture-replay.adoc  |      3 +
 .../asciidoc/users/tools/connection-cache.adoc     |    130 +-
 src/site/asciidoc/users/tools/scraper.adoc         |     18 +-
 src/site/asciidoc/users/tools/testing.adoc         |     34 +-
 src/site/asciidoc/users/transports/can.adoc        |      1 +
 .../asciidoc/users/transports/pcap-replay.adoc     |      1 +
 src/site/asciidoc/users/transports/raw-socket.adoc |      1 +
 src/site/asciidoc/users/transports/serial.adoc     |      1 +
 src/site/asciidoc/users/transports/socketcan.adoc  |      1 +
 src/site/asciidoc/users/transports/tcp.adoc        |      1 +
 src/site/asciidoc/users/transports/udp.adoc        |      1 +
 src/site/resources-filtered/plc4x-doap.rdf         |      9 +-
 .../images/integrations/apache_edgent_logo.png     |    Bin 19377 -> 0 bytes
 .../images/integrations/apache_hop_logo.png        |    Bin 0 -> 75995 bytes
 .../images/integrations/apache_iotdb_logo.png      |    Bin 22055 -> 54876 bytes
 src/site/resources/images/languages/c_logo.png     |    Bin 0 -> 23215 bytes
 src/site/resources/images/languages/cs_logo.png    |    Bin 0 -> 98426 bytes
 src/site/resources/images/languages/go_logo.png    |    Bin 0 -> 30834 bytes
 src/site/resources/images/languages/java_logo.png  |    Bin 0 -> 88149 bytes
 .../resources/images/languages/python_logo.png     |    Bin 0 -> 98345 bytes
 src/site/resources/images/team/glcj.jpg            |    Bin 0 -> 38971 bytes
 src/site/resources/plc4x-pmc.rdf                   |     30 +
 src/site/site.xml                                  |     32 +-
 tools/NOTES.md                                     |     22 +
 tools/docker-compose.yaml                          |     32 +
 tools/release-0-update-generated-code.sh           |     73 +
 tools/release-1-create-branch.sh                   |     92 +
 tools/release-2-prepare-release.sh                 |     44 +
 tools/release-3-perform-release.sh                 |     66 +
 tools/release-abort.sh                             |     62 +
 tools/validate-release.sh                          |    107 +
 1389 files changed, 192998 insertions(+), 60213 deletions(-)
 create mode 100644 .idea/sonarlint/issuestore/index.pb
 create mode 100644 .idea/sonarlint/securityhotspotstore/index.pb
 create mode 100644 code-generation/language-base-freemarker/.factorypath
 create mode 100644 code-generation/language-c/.factorypath
 create mode 100644 code-generation/language-cs/.factorypath
 create mode 100644 code-generation/language-go/.factorypath
 create mode 100644 code-generation/language-java/.factorypath
 create mode 100644 code-generation/language-python/.factorypath
 create mode 100644 code-generation/protocol-base-mspec/.factorypath
 create mode 100644 code-generation/protocol-test/.factorypath
 delete mode 100644 code-generation/tests/pom.xml
 delete mode 100644 code-generation/tests/protocol-test-java/pom.xml
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/AbstractTypeTest.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/AbstractTypeTestSubType.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/ArrayTypeTest.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/CheckSumTypeTest.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/ComplexOfComplexUsageA.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/ComplexOfComplexUsageB.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/ComplexOfComplexUsageC.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/ComplexOfComplexUsageD.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/ConstTypeTest.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/DataIOType.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/EnumDiscriminatedType.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/EnumDiscriminatedTypeA.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/EnumDiscriminatedTypeB.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/EnumDiscriminatedTypeC.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/EnumDiscriminatedTypeMultiple.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/EnumDiscriminatedTypeMultipleA.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/EnumDiscriminatedTypeMultipleB.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/EnumDiscriminatedTypeMultipleC.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/EnumDiscriminatedTypeParameter.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/EnumDiscriminatedTypeParameterA.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/EnumDiscriminatedTypeParameterB.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/EnumDiscriminatedTypeParameterC.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/EnumDiscriminatedTypeParameterMultiple.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/EnumDiscriminatedTypeParameterMultipleA.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/EnumDiscriminatedTypeParameterMultipleB.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/EnumDiscriminatedTypeParameterMultipleC.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/EnumType.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/EnumTypeBit.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/EnumTypeInt.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/EnumTypeParameters.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/EnumTypeTest.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/FieldTypeTest.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/FieldTypeTestWithUnknownField.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/ImplicitPascalStringTypeTest.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/ImplicitTypeTest.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/IntTypeTest.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/LengthLoopTest.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/OptionalTypeTest.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/PaddingTypeTest.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/PascalStringTypeTest.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/ReservedTypeTest.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/ReservedTypeTestChild.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/ReservedTypeTestParent.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/SimpleBitTypeTest.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/SimpleDiscriminatedType.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/SimpleDiscriminatedTypeA.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/SimpleDiscriminatedTypeB.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/SimpleDiscriminatedTypeC.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/SimpleTypeTest.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/TypeSwitchInTypeSwitchParentType.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/TypeSwitchInTypeSwitchParentTypeChild0.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/TypeSwitchInTypeSwitchParentTypeChild0Infant0.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/TypeSwitchInTypeSwitchParentTypeChild0Infant0InfantsChild0.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/TypeSwitchInTypeSwitchParentTypeChild0Infant0InfantsChild1.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/TypeSwitchInTypeSwitchParentTypeChild0Infant1.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/TypeSwitchInTypeSwitchParentTypeChild0Infant2.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/TypeSwitchInTypeSwitchParentTypeChild1.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/TypeSwitchInTypeSwitchParentTypeChild1Infant3.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/TypeSwitchInTypeSwitchParentTypeChild1Infant4.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/TypeSwitchInTypeSwitchParentTypeChild1Infant5.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/TypeSwitchInTypeSwitchParentTypeChild2.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/TypeSwitchInTypeSwitchParentTypeChild2Infant6.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/TypeSwitchInTypeSwitchParentTypeChild2Infant7.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/TypeSwitchInTypeSwitchParentTypeChild2Infant8.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/UIntTypeTest.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/generated/org/apache/plc4x/java/test/readwrite/VirtualFieldTest.java
 delete mode 100644 code-generation/tests/protocol-test-java/src/main/java/org/apache/plc4x/java/test/readwrite/utils/StaticHelper.java
 create mode 100644 plc4c/generated-sources/s7/include/controller_type.h
 create mode 100644 plc4c/generated-sources/s7/src/controller_type.c
 create mode 100644 plc4go/assets/testing/protocols/modbus/tcp/Modbus-all-datatypes.xml
 create mode 100644 plc4go/protocols/opcua/readwrite/model/BinaryPayload.go
 create mode 100644 plc4go/protocols/opcua/readwrite/model/ChunkType.go
 create mode 100644 plc4go/protocols/opcua/readwrite/model/ExtensiblePayload.go
 create mode 100644 plc4go/protocols/opcua/readwrite/model/MessageType.go
 create mode 100644 plc4go/protocols/opcua/readwrite/model/OpcuaConstants.go
 create mode 100644 plc4go/protocols/opcua/readwrite/model/OpcuaProtocolLimits.go
 create mode 100644 plc4go/protocols/opcua/readwrite/model/OpenChannelMessage.go
 create mode 100644 plc4go/protocols/opcua/readwrite/model/OpenChannelMessageRequest.go
 create mode 100644 plc4go/protocols/opcua/readwrite/model/OpenChannelMessageResponse.go
 create mode 100644 plc4go/protocols/opcua/readwrite/model/Payload.go
 create mode 100644 plc4go/protocols/opcua/readwrite/model/SecurityHeader.go
 create mode 100644 plc4go/protocols/opcua/readwrite/model/SequenceHeader.go
 create mode 100644 plc4go/protocols/s7/readwrite/model/ControllerType.go
 delete mode 100644 plc4go/script/validate-go-test-results.groovy
 create mode 100644 plc4go/spi/values/PlcDATE_AND_LTIME.go
 create mode 100644 plc4j/api/.factorypath
 delete mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/PlcConnectionExtension.java
 create mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/metadata/Option.java
 create mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/metadata/OptionMetadata.java
 create mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/types/OptionType.java
 create mode 100644 plc4j/drivers/ab-eth/.factorypath
 create mode 100644 plc4j/drivers/ads/.factorypath
 create mode 100644 plc4j/drivers/all/src/site/generated/ab-eth.adoc
 create mode 100644 plc4j/drivers/all/src/site/generated/ads.adoc
 create mode 100644 plc4j/drivers/all/src/site/generated/bacnet-ip.adoc
 create mode 100644 plc4j/drivers/all/src/site/generated/c-bus.adoc
 create mode 100644 plc4j/drivers/all/src/site/generated/canopen.adoc
 create mode 100644 plc4j/drivers/all/src/site/generated/eip.adoc
 create mode 100644 plc4j/drivers/all/src/site/generated/firmata.adoc
 create mode 100644 plc4j/drivers/all/src/site/generated/genericcan.adoc
 create mode 100644 plc4j/drivers/all/src/site/generated/iec-60870-5-104.adoc
 create mode 100644 plc4j/drivers/all/src/site/generated/knxnet-ip.adoc
 create mode 100644 plc4j/drivers/all/src/site/generated/logix.adoc
 create mode 100644 plc4j/drivers/all/src/site/generated/modbus-ascii.adoc
 create mode 100644 plc4j/drivers/all/src/site/generated/modbus-rtu.adoc
 create mode 100644 plc4j/drivers/all/src/site/generated/modbus-tcp.adoc
 create mode 100644 plc4j/drivers/all/src/site/generated/opcua.adoc
 create mode 100644 plc4j/drivers/all/src/site/generated/open-protocol.adoc
 create mode 100644 plc4j/drivers/all/src/site/generated/plc4x.adoc
 create mode 100644 plc4j/drivers/all/src/site/generated/profinet.adoc
 create mode 100644 plc4j/drivers/all/src/site/generated/s7.adoc
 create mode 100644 plc4j/drivers/all/src/site/generated/simulated.adoc
 create mode 100644 plc4j/drivers/all/src/site/groovy/generate-config-documentation.groovy
 create mode 100644 plc4j/drivers/bacnet/.factorypath
 create mode 100644 plc4j/drivers/c-bus/.factorypath
 create mode 100644 plc4j/drivers/can/.factorypath
 create mode 100644 plc4j/drivers/canopen/.factorypath
 create mode 100644 plc4j/drivers/ctrlx/.factorypath
 delete mode 100644 plc4j/drivers/ctrlx/src/main/generated/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/ApiClient.java
 create mode 100644 plc4j/drivers/ctrlx/src/main/java/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/ApiClient.java
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/ApiException.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/Configuration.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/JavaTimeFormatter.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/Pair.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/RFC3339DateFormat.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/ServerConfiguration.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/ServerVariable.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/StringUtil.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/api/BulkAccessApi.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/api/DataLayerInformationAndSettingsApi.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/api/NodesApi.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/api/RemotesApi.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/api/RetainMemoryApi.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/api/SubscriptionInformationAndSettingsApi.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/api/SubscriptionsApi.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/api/TypesApi.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/auth/ApiKeyAuth.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/auth/Authentication.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/auth/HttpBasicAuth.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/auth/HttpBearerAuth.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/auth/OAuth.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/auth/OAuthFlow.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/ARString.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/AllowedOperations.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/BrowseData.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/BulkRequestInner.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/BulkResponseInner.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/ChangeSubscriptionRequest.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/CommDatalayerChangeEvents.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/CommDatalayerCounting.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/CommDatalayerDataChangeFilter.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/CommDatalayerDataChangeTrigger.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/CommDatalayerProperties.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/CommDatalayerProperty.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/CommDatalayerPropertyRule.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/CommDatalayerQueueBehaviour.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/CommDatalayerQueueing.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/CommDatalayerRemoteConfigItem.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/CommDatalayerSampling.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/CommDatalayerServerSettings.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/CommDatalayerSubscriptionData.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/CommDatalayerSubscriptionProperties.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/CreateRemoteRequest.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/CreateSubscriptionRequest.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/CreateSubscriptionRequestAllOf.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/DLARString.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/DLString.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/DLUInt32.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/Data.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/Extension.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/JsonString.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/Memory.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/MemoryType.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/MemoryValue.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/MetaData.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/NodeClass.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/Problem.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/ReadNode200Response.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/Reference.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/Reflection.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/ReflectionBaseType.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/ReflectionEnum.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/ReflectionEnumVal.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/ReflectionField.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/ReflectionKeyValue.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/ReflectionObject.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/ReflectionRPCCall.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/ReflectionSchema.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/ReflectionService.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/ReflectionType.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/RemoteConfig.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/RetainStats.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/SSEEvent.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/SSEEventData.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/SSEEventData1.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/ServerSettings.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/State.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/SubscriptionData.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/SubscriptionID.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/SubscriptionNodeList.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/SubscriptionProperties.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/SubscriptionPropertiesData.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/SubscriptionSettings.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/Task.java (100%)
 rename plc4j/drivers/ctrlx/src/main/{generated => java}/org/apache/plc4x/java/ctrlx/readwrite/rest/datalayer/model/UInt32.java (100%)
 create mode 100644 plc4j/drivers/eip/.factorypath
 delete mode 100644 plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipExchange.java
 create mode 100644 plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/logix/configuration/LogixTcpTransportConfiguration.java
 create mode 100644 plc4j/drivers/firmata/.factorypath
 create mode 100644 plc4j/drivers/firmata/src/test/java/org/apache/plc4x/java/firmata/readwrite/FirmataManualTest.java
 create mode 100644 plc4j/drivers/iec-60870/.factorypath
 create mode 100644 plc4j/drivers/knxnetip/.factorypath
 create mode 100644 plc4j/drivers/mock/.factorypath
 create mode 100644 plc4j/drivers/modbus/.factorypath
 create mode 100644 plc4j/drivers/modbus/src/test/java/org/apache/plc4x/java/modbus/ManualModbusASCIIDriverTest.java
 delete mode 100644 plc4j/drivers/modbus/src/test/java/org/apache/plc4x/java/modbus/ManualModbusDriverTest.java
 create mode 100644 plc4j/drivers/modbus/src/test/java/org/apache/plc4x/java/modbus/ManualModbusRTUDriverTest.java
 create mode 100644 plc4j/drivers/modbus/src/test/java/org/apache/plc4x/java/modbus/ManualModbusTCPDriverTest.java
 create mode 100644 plc4j/drivers/modbus/src/test/java/org/apache/plc4x/java/modbus/tcp/ModbusTcpAllDatatypesIT.java
 create mode 100644 plc4j/drivers/opcua/.factorypath
 create mode 100644 plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/BinaryPayload.java
 create mode 100644 plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/ChunkType.java
 delete mode 100644 plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/Date.java
 delete mode 100644 plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/DecimalDataType.java
 create mode 100644 plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/ExtensiblePayload.java
 create mode 100644 plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/MessageType.java
 delete mode 100644 plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/Node.java
 create mode 100644 plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/OpcuaConstants.java
 delete mode 100644 plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/OpcuaNodeIdServicesVariableAddress.java
 delete mode 100644 plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/OpcuaNodeIdServicesVariableChoice.java
 delete mode 100644 plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/OpcuaNodeIdServicesVariableDevice.java
 delete mode 100644 plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/OpcuaNodeIdServicesVariableDiscrete.java
 delete mode 100644 plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/OpcuaNodeIdServicesVariableInitial.java
 delete mode 100644 plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/OpcuaNodeIdServicesVariableInstrument.java
 delete mode 100644 plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/OpcuaNodeIdServicesVariableRefresh.java
 delete mode 100644 plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/OpcuaNodeIdServicesVariableTrip.java
 create mode 100644 plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/OpcuaProtocolLimits.java
 create mode 100644 plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/OpenChannelMessage.java
 create mode 100644 plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/OpenChannelMessageRequest.java
 create mode 100644 plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/OpenChannelMessageResponse.java
 create mode 100644 plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/Payload.java
 delete mode 100644 plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/ReferenceNode.java
 create mode 100644 plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/SecurityHeader.java
 create mode 100644 plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/SequenceHeader.java
 delete mode 100644 plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/Time.java
 create mode 100644 plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/config/Limits.java
 create mode 100644 plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/context/AsymmetricEncryptionHandler.java
 create mode 100644 plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/context/BaseEncryptionHandler.java
 create mode 100644 plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/context/CallContext.java
 create mode 100644 plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/context/Conversation.java
 create mode 100644 plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/context/SymmetricEncryptionHandler.java
 create mode 100644 plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/protocol/chunk/Chunk.java
 create mode 100644 plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/protocol/chunk/ChunkFactory.java
 create mode 100644 plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/protocol/chunk/ChunkStorage.java
 create mode 100644 plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/protocol/chunk/MemoryChunkStorage.java
 create mode 100644 plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/protocol/chunk/PayloadConverter.java
 create mode 100644 plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/security/CertificateVerifier.java
 create mode 100644 plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/security/MessageSecurity.java
 create mode 100644 plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/security/PermissiveCertificateVerifier.java
 create mode 100644 plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/security/SecurityPolicy.java
 create mode 100644 plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/security/SymmetricKeys.java
 create mode 100644 plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/security/TrustStoreCertificateVerifier.java
 create mode 100644 plc4j/drivers/opcua/src/test/java/org/apache/plc4x/java/opcua/TestCertificateGenerator.java
 create mode 100644 plc4j/drivers/opcua/src/test/java/org/apache/plc4x/java/opcua/context/EncryptionHandlerTest.java
 create mode 100644 plc4j/drivers/opcua/src/test/java/org/apache/plc4x/java/opcua/protocol/chunk/ChunkFactoryTest.java
 create mode 100644 plc4j/drivers/opcua/src/test/java/org/apache/plc4x/java/opcua/protocol/chunk/PayloadConverterTest.java
 create mode 100644 plc4j/drivers/opcua/src/test/java/org/eclipse/milo/examples/server/TestMiloServer.java
 create mode 100644 plc4j/drivers/opcua/src/test/resources/chunk-calculation-1024.csv
 create mode 100644 plc4j/drivers/opcua/src/test/resources/chunk-calculation-2048.csv
 create mode 100644 plc4j/drivers/opcua/src/test/resources/chunk-calculation-3072.csv
 create mode 100644 plc4j/drivers/opcua/src/test/resources/chunk-calculation-4096.csv
 create mode 100644 plc4j/drivers/opcua/src/test/resources/chunk-calculation-5120.csv
 delete mode 100644 plc4j/drivers/opcua/src/test/resources/log4j.properties
 create mode 100644 plc4j/drivers/open-protocol/.factorypath
 create mode 100644 plc4j/drivers/plc4x/.factorypath
 create mode 100644 plc4j/drivers/profinet-ng/.factorypath
 create mode 100644 plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestAdam6117PN.java
 create mode 100644 plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestAdam6150PN.java
 delete mode 100644 plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestAdamPN.java
 delete mode 100644 plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestSimocode.java
 create mode 100644 plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestSimocodePN.java
 create mode 100644 plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestWagoPN.java
 delete mode 100644 plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestWagoPNCoupler.java
 create mode 100755 plc4j/drivers/profinet-ng/src/test/resources/GSDML-V2.2-Advantech-ADAM6100-20111216.xml
 create mode 100755 plc4j/drivers/profinet-ng/src/test/resources/GSDML-V2.3-SIEMENS-SIMOCODEproVPN-20201104.xml
 create mode 100755 plc4j/drivers/profinet-ng/src/test/resources/GSDML-V2.33-wago-series750_753-20230115.xml
 create mode 100755 plc4j/drivers/profinet-ng/src/test/resources/GSDML-V2.43-SIEMENS-SIMOCODEproVPN-20220817.xml
 create mode 100644 plc4j/drivers/profinet/.factorypath
 create mode 100644 plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoAdamTest.java
 create mode 100644 plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoSimocodeTest.java
 delete mode 100644 plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTest.java
 create mode 100644 plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetPcapTest.java
 create mode 100644 plc4j/drivers/s7/.factorypath
 create mode 100644 plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/ControllerType.java
 delete mode 100644 plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/types/S7ControllerType.java
 create mode 100644 plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/utils/S7PlcSubscriptionRequest.java
 create mode 100644 plc4j/drivers/s7/src/test/java/org/apache/plc4x/java/s7/readwrite/ManualS71200DriverTest.java
 create mode 100644 plc4j/drivers/s7/src/test/java/org/apache/plc4x/java/s7/readwrite/ManualS71500DriverTest.java
 delete mode 100644 plc4j/drivers/s7/src/test/java/org/apache/plc4x/java/s7/readwrite/ManualS7DriverTest.java
 create mode 100644 plc4j/drivers/simulated/.factorypath
 create mode 100644 plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/configuration/SimulatedConfiguration.java
 create mode 100644 plc4j/examples/hello-ads-telemetry/.factorypath
 create mode 100644 plc4j/examples/hello-cloud-azure/.factorypath
 create mode 100644 plc4j/examples/hello-cloud-google/.factorypath
 create mode 100644 plc4j/examples/hello-connectivity-mqtt/.factorypath
 create mode 100644 plc4j/examples/hello-discovery/.factorypath
 create mode 100644 plc4j/examples/hello-influx-data-collection/.factorypath
 create mode 100644 plc4j/examples/hello-integration-iotdb/.factorypath
 create mode 100644 plc4j/examples/hello-nats/.factorypath
 create mode 100644 plc4j/examples/hello-opm/.factorypath
 create mode 100644 plc4j/examples/hello-webservice/.factorypath
 create mode 100644 plc4j/examples/hello-world-kotlin/.factorypath
 create mode 100644 plc4j/examples/hello-world-plc4x-discover-and-browse/.factorypath
 create mode 100644 plc4j/examples/hello-world-plc4x-read/.factorypath
 create mode 100644 plc4j/examples/hello-world-plc4x-subscribe/.factorypath
 create mode 100644 plc4j/examples/hello-world-plc4x-write/.factorypath
 create mode 100644 plc4j/examples/plc4j-s7event/.factorypath
 create mode 100644 plc4j/examples/poll-loop/.factorypath
 create mode 100644 plc4j/integrations/apache-calcite/.factorypath
 create mode 100644 plc4j/integrations/apache-kafka/.factorypath
 create mode 100644 plc4j/integrations/apache-nifi/nifi-plc4x-nar/.factorypath
 create mode 100644 plc4j/integrations/apache-nifi/nifi-plc4x-processors/.factorypath
 create mode 100644 plc4j/osgi/.factorypath
 create mode 100644 plc4j/spi/.factorypath
 create mode 100644 plc4j/spi/src/main/java/org/apache/plc4x/java/spi/codegen/fields/FieldReaderDiscriminatorEnum.java
 delete mode 100644 plc4j/spi/src/main/java/org/apache/plc4x/java/spi/configuration/Configuration.java
 create mode 100644 plc4j/spi/src/main/java/org/apache/plc4x/java/spi/configuration/PlcConfiguration.java
 create mode 100644 plc4j/spi/src/main/java/org/apache/plc4x/java/spi/configuration/PlcConnectionConfiguration.java
 create mode 100644 plc4j/spi/src/main/java/org/apache/plc4x/java/spi/configuration/PlcTransportConfiguration.java
 create mode 100644 plc4j/spi/src/main/java/org/apache/plc4x/java/spi/configuration/annotations/Description.java
 create mode 100644 plc4j/spi/src/main/java/org/apache/plc4x/java/spi/metadata/DefaultOption.java
 create mode 100644 plc4j/spi/src/main/java/org/apache/plc4x/java/spi/metadata/DefaultOptionMetadata.java
 delete mode 100644 plc4j/spi/src/main/java/org/apache/plc4x/java/spi/transport/TransportConfiguration.java
 delete mode 100644 plc4j/spi/src/main/java/org/apache/plc4x/java/spi/transport/TransportConfigurationTypeProvider.java
 create mode 100644 plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE_AND_LTIME.java
 create mode 100644 plc4j/tools/capture-replay/.factorypath
 create mode 100644 plc4j/tools/connection-cache/.factorypath
 create mode 100644 plc4j/tools/opcua-server/.factorypath
 create mode 100644 plc4j/tools/opm/.factorypath
 create mode 100644 plc4j/tools/plc4x-server/.factorypath
 create mode 100644 plc4j/tools/scraper-ng/.factorypath
 create mode 100644 plc4j/tools/scraper/.factorypath
 create mode 100644 plc4j/tools/ui/application/.factorypath
 create mode 100644 plc4j/tools/ui/application/pom.xml
 create mode 100644 plc4j/tools/ui/application/src/main/java/org/apache/plc4x/java/tools/ui/Plc4xUiBackendApplication.java
 create mode 100644 plc4j/tools/ui/application/src/main/resources/application-dev.properties
 create mode 100644 plc4j/tools/ui/application/src/main/resources/application.properties
 create mode 100644 plc4j/tools/ui/application/src/main/resources/logback.xml
 create mode 100644 plc4j/tools/ui/application/src/test/java/org/apache/plc4x/java/tools/ui/Plc4xUiBackendApplicationTests.java
 create mode 100644 plc4j/tools/ui/application/src/test/resources/application-test.properties
 create mode 100644 plc4j/tools/ui/backend/.factorypath
 create mode 100644 plc4j/tools/ui/backend/pom.xml
 create mode 100644 plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/configuration/Plc4xConfiguration.java
 create mode 100644 plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/configuration/WebSocketConfig.java
 create mode 100644 plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/controller/DeviceController.java
 create mode 100644 plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/controller/DriverController.java
 create mode 100644 plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/event/DeviceEvent.java
 create mode 100644 plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/event/EventType.java
 create mode 100644 plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/event/UiApplicationEvent.java
 create mode 100644 plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/handler/WebSocketHandler.java
 create mode 100644 plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/model/ConfigurationOption.java
 create mode 100644 plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/model/Device.java
 create mode 100644 plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/model/Driver.java
 create mode 100644 plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/model/Transport.java
 create mode 100644 plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/repository/DeviceRepository.java
 create mode 100644 plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/service/DeviceService.java
 create mode 100644 plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/service/DriverService.java
 create mode 100644 plc4j/tools/ui/backend/ws.html
 create mode 100644 plc4j/tools/ui/frontend/.factorypath
 create mode 100644 plc4j/tools/ui/frontend/pom.xml
 create mode 100644 plc4j/tools/ui/frontend/project/.eslintrc.cjs
 create mode 100644 plc4j/tools/ui/frontend/project/.gitignore
 create mode 100644 plc4j/tools/ui/frontend/project/README.md
 create mode 100644 plc4j/tools/ui/frontend/project/index.html
 create mode 100644 plc4j/tools/ui/frontend/project/package.json
 create mode 100644 plc4j/tools/ui/frontend/project/public/plc4x-favicon.png
 create mode 100644 plc4j/tools/ui/frontend/project/src/App.css
 create mode 100644 plc4j/tools/ui/frontend/project/src/App.tsx
 create mode 100644 plc4j/tools/ui/frontend/project/src/assets/plc4x-logo.svg
 create mode 100644 plc4j/tools/ui/frontend/project/src/assets/react.svg
 create mode 100644 plc4j/tools/ui/frontend/project/src/components/DeviceDialog.tsx
 create mode 100644 plc4j/tools/ui/frontend/project/src/components/NavigationTree.tsx
 create mode 100644 plc4j/tools/ui/frontend/project/src/components/PlcConnection.tsx
 create mode 100644 plc4j/tools/ui/frontend/project/src/generated/plc4j-tools-ui-frontend.ts
 create mode 100644 plc4j/tools/ui/frontend/project/src/index.css
 create mode 100644 plc4j/tools/ui/frontend/project/src/layouts/MainLayout.tsx
 create mode 100644 plc4j/tools/ui/frontend/project/src/main.tsx
 create mode 100644 plc4j/tools/ui/frontend/project/src/model/TreeItemData.ts
 create mode 100644 plc4j/tools/ui/frontend/project/src/pages/About.tsx
 create mode 100644 plc4j/tools/ui/frontend/project/src/pages/Inspect.tsx
 create mode 100644 plc4j/tools/ui/frontend/project/src/pages/Mqtt.tsx
 create mode 100644 plc4j/tools/ui/frontend/project/src/pages/OpcUa.tsx
 create mode 100644 plc4j/tools/ui/frontend/project/src/pages/Settings.tsx
 create mode 100644 plc4j/tools/ui/frontend/project/src/store/index.ts
 create mode 100644 plc4j/tools/ui/frontend/project/src/utils/Counter.ts
 create mode 100644 plc4j/tools/ui/frontend/project/src/vite-env.d.ts
 create mode 100644 plc4j/tools/ui/frontend/project/tsconfig.json
 create mode 100644 plc4j/tools/ui/frontend/project/tsconfig.node.json
 create mode 100644 plc4j/tools/ui/frontend/project/vite.config.ts
 create mode 100644 plc4j/tools/ui/pom.xml
 create mode 100644 plc4j/transports/can/.factorypath
 create mode 100644 plc4j/transports/pcap-replay/.factorypath
 create mode 100644 plc4j/transports/pcap-shared/.factorypath
 create mode 100644 plc4j/transports/raw-socket/.factorypath
 create mode 100644 plc4j/transports/serial/.factorypath
 create mode 100644 plc4j/transports/serial/src/main/java/org/apache/plc4x/java/transport/serial/SerialChannelOptionsParity.java
 create mode 100644 plc4j/transports/socketcan/.factorypath
 create mode 100644 plc4j/transports/tcp/.factorypath
 create mode 100644 plc4j/transports/test/.factorypath
 create mode 100644 plc4j/transports/udp/.factorypath
 create mode 100644 plc4j/transports/virtualcan/.factorypath
 delete mode 100644 plc4j/transports/virtualcan/src/main/java/org/apache/plc4x/java/transport/virtualcan/io/VirtualCANFrameIO.java
 create mode 100644 plc4j/utils/pcap-replay/.factorypath
 create mode 100644 plc4j/utils/pcap-shared/.factorypath
 create mode 100644 plc4j/utils/plc-simulator/.factorypath
 create mode 100644 plc4j/utils/raw-sockets/.factorypath
 create mode 100644 plc4j/utils/test-generator/.factorypath
 create mode 100644 plc4j/utils/test-utils/.factorypath
 create mode 100644 plc4j/utils/test-utils/src/main/java/org/apache/plc4x/test/DisableOnJenkinsFlag.java
 create mode 100644 plc4j/utils/test-utils/src/main/java/org/apache/plc4x/test/DisableOnJenkinsFlagCondition.java
 delete mode 100644 plc4net/api/pom.xml
 rename {sandbox/plc4py => plc4py}/.gitignore (100%)
 rename {sandbox/plc4py => plc4py}/.pre-commit-config.yaml (100%)
 create mode 100644 plc4py/plc4py/PlcDriverManager.py
 rename {sandbox/plc4py => plc4py}/plc4py/__init__.py (100%)
 create mode 100644 plc4py/plc4py/api/PlcConnection.py
 rename {sandbox/plc4py => plc4py}/plc4py/api/PlcDriver.py (100%)
 copy {sandbox/plc4py => plc4py}/plc4py/api/__init__.py (100%)
 rename {sandbox/plc4py => plc4py}/plc4py/api/authentication/PlcAuthentication.py (100%)
 rename {sandbox/plc4py => plc4py}/plc4py/api/authentication/__init__.py (100%)
 rename {sandbox/plc4py => plc4py}/plc4py/api/exceptions/__init__.py (100%)
 create mode 100644 plc4py/plc4py/api/exceptions/exceptions.py
 rename {sandbox/plc4py => plc4py}/plc4py/api/listener/__init__.py (100%)
 rename {sandbox/plc4py => plc4py}/plc4py/api/messages/PlcDiscovery.py (100%)
 rename {sandbox/plc4py => plc4py}/plc4py/api/messages/PlcField.py (100%)
 create mode 100644 plc4py/plc4py/api/messages/PlcMessage.py
 create mode 100644 plc4py/plc4py/api/messages/PlcRequest.py
 create mode 100644 plc4py/plc4py/api/messages/PlcResponse.py
 rename {sandbox/plc4py => plc4py}/plc4py/api/messages/__init__.py (100%)
 create mode 100644 plc4py/plc4py/api/value/PlcValue.py
 rename {sandbox/plc4py => plc4py}/plc4py/api/value/__init__.py (100%)
 create mode 100644 plc4py/plc4py/drivers/PlcDriverLoader.py
 rename {sandbox/plc4py => plc4py}/plc4py/drivers/__init__.py (100%)
 create mode 100644 plc4py/plc4py/drivers/mock/MockConnection.py
 rename {sandbox/plc4py => plc4py}/plc4py/drivers/mock/MockReadRequestBuilder.py (100%)
 rename {sandbox/plc4py => plc4py}/plc4py/drivers/mock/MockTag.py (100%)
 rename {sandbox/plc4py => plc4py}/plc4py/drivers/mock/__init__.py (100%)
 create mode 100644 plc4py/plc4py/drivers/modbus/ModbusConfiguration.py
 create mode 100644 plc4py/plc4py/drivers/modbus/ModbusConnection.py
 create mode 100644 plc4py/plc4py/drivers/modbus/ModbusDevice.py
 rename {sandbox/plc4py => plc4py}/plc4py/drivers/modbus/ModbusProtocol.py (100%)
 rename {sandbox/plc4py => plc4py}/plc4py/drivers/modbus/ModbusTag.py (100%)
 rename {sandbox/plc4py => plc4py}/plc4py/drivers/modbus/__init__.py (100%)
 create mode 100644 plc4py/plc4py/drivers/umas/UmasConfiguration.py
 create mode 100644 plc4py/plc4py/drivers/umas/UmasConnection.py
 create mode 100644 plc4py/plc4py/drivers/umas/UmasDevice.py
 create mode 100644 plc4py/plc4py/drivers/umas/UmasProtocol.py
 create mode 100644 plc4py/plc4py/drivers/umas/UmasTag.py
 create mode 100644 plc4py/plc4py/drivers/umas/UmasVariables.py
 rename {sandbox/plc4py/plc4py/protocols => plc4py/plc4py/drivers/umas}/__init__.py (100%)
 rename {sandbox/plc4py/plc4py/protocols/modbus => plc4py/plc4py/protocols}/__init__.py (100%)
 rename {sandbox/plc4py => plc4py}/plc4py/protocols/modbus/StaticHelper.py (100%)
 rename {sandbox/plc4py/plc4py/protocols/modbus/readwrite => plc4py/plc4py/protocols/modbus}/__init__.py (100%)
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/DataItem.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/DriverType.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusADU.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusAsciiADU.py
 rename {sandbox/plc4py => plc4py}/plc4py/protocols/modbus/readwrite/ModbusConstants.py (100%)
 rename {sandbox/plc4py => plc4py}/plc4py/protocols/modbus/readwrite/ModbusDataType.py (100%)
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusDeviceInformationConformityLevel.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusDeviceInformationLevel.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusDeviceInformationMoreFollows.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusDeviceInformationObject.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusErrorCode.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDU.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUDiagnosticRequest.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUDiagnosticResponse.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUError.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUGetComEventCounterRequest.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUGetComEventCounterResponse.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUGetComEventLogRequest.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUGetComEventLogResponse.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUMaskWriteHoldingRegisterRequest.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUMaskWriteHoldingRegisterResponse.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadCoilsRequest.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadCoilsResponse.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadDeviceIdentificationRequest.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadDeviceIdentificationResponse.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadDiscreteInputsRequest.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadDiscreteInputsResponse.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadExceptionStatusRequest.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadExceptionStatusResponse.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadFifoQueueRequest.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadFifoQueueResponse.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadFileRecordRequest.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadFileRecordRequestItem.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadFileRecordResponse.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadFileRecordResponseItem.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadHoldingRegistersRequest.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadHoldingRegistersResponse.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadInputRegistersRequest.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadInputRegistersResponse.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadWriteMultipleHoldingRegistersRequest.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadWriteMultipleHoldingRegistersResponse.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReportServerIdRequest.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReportServerIdResponse.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUWriteFileRecordRequest.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUWriteFileRecordRequestItem.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUWriteFileRecordResponse.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUWriteFileRecordResponseItem.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUWriteMultipleCoilsRequest.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUWriteMultipleCoilsResponse.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUWriteMultipleHoldingRegistersRequest.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUWriteMultipleHoldingRegistersResponse.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUWriteSingleCoilRequest.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUWriteSingleCoilResponse.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUWriteSingleRegisterRequest.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUWriteSingleRegisterResponse.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusRtuADU.py
 create mode 100644 plc4py/plc4py/protocols/modbus/readwrite/ModbusTcpADU.py
 rename {sandbox/plc4py/plc4py/spi => plc4py/plc4py/protocols/modbus/readwrite}/__init__.py (100%)
 create mode 100644 plc4py/plc4py/protocols/simulated/readwrite/DataItem.py
 create mode 100644 plc4py/plc4py/protocols/simulated/readwrite/Dummy.py
 rename {sandbox/plc4py => plc4py}/plc4py/protocols/simulated/readwrite/SimulatedDataTypeSizes.py (100%)
 create mode 100644 plc4py/plc4py/protocols/umas/StaticHelper.py
 rename {sandbox/plc4py/plc4py/spi/configuration => plc4py/plc4py/protocols/umas}/__init__.py (100%)
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/DataItem.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/ModbusErrorCode.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/ModbusPDU.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/ModbusPDUError.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/ModbusTcpADU.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/PlcMemoryBlockIdent.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasConstants.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasDataType.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasDatatypeReference.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasDeviceInformationConformityLevel.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasDeviceInformationLevel.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasDeviceInformationMoreFollows.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasInitCommsRequest.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasInitCommsResponse.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasMemoryBlock.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasMemoryBlockBasicInfo.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasPDU.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasPDUItem.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasPDUPlcIdentRequest.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasPDUPlcIdentResponse.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasPDUPlcStatusRequest.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasPDUPlcStatusResponse.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasPDUProjectInfoRequest.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasPDUReadDatatypeNamesResponse.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasPDUReadMemoryBlockRequest.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasPDUReadMemoryBlockResponse.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasPDUReadUmasUDTDefinitionResponse.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasPDUReadUnlocatedVariableNames.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasPDUReadUnlocatedVariableNamesRequest.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasPDUReadUnlocatedVariableNamesResponse.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasPDUReadUnlocatedVariableResponse.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasPDUReadVariableRequest.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasPDUReadVariableResponse.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasUDTDefinition.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasUnlocatedVariableReference.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/UmasVariableBlock.py
 create mode 100644 plc4py/plc4py/protocols/umas/readwrite/VariableRequestReference.py
 rename {sandbox/plc4py/plc4py/spi/connection => plc4py/plc4py/protocols/umas/readwrite}/__init__.py (100%)
 create mode 100644 plc4py/plc4py/spi/Plc4xBaseProtocol.py
 rename {sandbox/plc4py => plc4py}/plc4py/spi/PlcDriverClassLoader.py (100%)
 rename {sandbox/plc4py/plc4py/spi/context => plc4py/plc4py/spi}/__init__.py (100%)
 rename {sandbox/plc4py => plc4py}/plc4py/spi/configuration/PlcConfiguration.py (100%)
 rename {sandbox/plc4py/plc4py/spi/messages => plc4py/plc4py/spi/configuration}/__init__.py (100%)
 rename {sandbox/plc4py => plc4py}/plc4py/spi/connection/ProtocolStack.py (100%)
 rename {sandbox/plc4py/plc4py/spi/messages/utils => plc4py/plc4py/spi/connection}/__init__.py (100%)
 rename {sandbox/plc4py => plc4py}/plc4py/spi/context/DriverContext.py (100%)
 rename {sandbox/plc4py/plc4py/spi/transport => plc4py/plc4py/spi/context}/__init__.py (100%)
 create mode 100644 plc4py/plc4py/spi/generation/ReadBuffer.py
 create mode 100644 plc4py/plc4py/spi/generation/WriteBuffer.py
 rename {sandbox/plc4py => plc4py}/plc4py/spi/generation/__init__.py (100%)
 rename {sandbox/plc4py => plc4py}/plc4py/spi/messages/ChannelMessage.py (100%)
 rename {sandbox/plc4py => plc4py}/plc4py/spi/messages/PlcReader.py (100%)
 create mode 100644 plc4py/plc4py/spi/messages/PlcRequest.py
 create mode 100644 plc4py/plc4py/spi/messages/PlcWriter.py
 rename {sandbox/plc4py/plc4py/spi/values => plc4py/plc4py/spi/messages}/__init__.py (100%)
 create mode 100644 plc4py/plc4py/spi/messages/utils/ResponseItem.py
 rename {sandbox/plc4py/plc4py => plc4py/plc4py/spi/messages}/utils/__init__.py (100%)
 rename {sandbox/plc4py => plc4py}/plc4py/spi/transport/Plc4xBaseTransport.py (100%)
 rename {sandbox/plc4py => plc4py}/plc4py/spi/transport/TCPTransport.py (100%)
 rename {sandbox/plc4py/tests => plc4py/plc4py/spi/transport}/__init__.py (100%)
 create mode 100644 plc4py/plc4py/spi/values/Common.py
 rename {sandbox/plc4py => plc4py}/plc4py/spi/values/PlcValues.py (100%)
 rename {sandbox/plc4py/tests/unit => plc4py/plc4py/spi/values}/__init__.py (100%)
 rename {sandbox/plc4py => plc4py}/plc4py/utils/ConnectionStringHandling.py (100%)
 rename {sandbox/plc4py => plc4py}/plc4py/utils/GenericTypes.py (100%)
 rename {sandbox/plc4py/tests/unit/plc4py => plc4py/plc4py/utils}/__init__.py (100%)
 create mode 100644 plc4py/pom.xml
 create mode 100644 plc4py/pytest.ini
 create mode 100644 plc4py/requirements.txt
 rename {sandbox/plc4py => plc4py}/setup.cfg (100%)
 create mode 100644 plc4py/setup.py
 rename {sandbox/plc4py/tests/unit/plc4py/api => plc4py/tests}/__init__.py (100%)
 create mode 100644 plc4py/tests/test_plc4py.py
 rename {sandbox/plc4py/tests/unit/plc4py/drivers => plc4py/tests/unit}/__init__.py (100%)
 rename {sandbox/plc4py/tests/unit/plc4py/drivers/modbus => plc4py/tests/unit/plc4py}/__init__.py (100%)
 rename {sandbox/plc4py/tests/unit/plc4py/spi => plc4py/tests/unit/plc4py/api}/__init__.py (100%)
 create mode 100644 plc4py/tests/unit/plc4py/api/test_PlcRequest.py
 rename {sandbox/plc4py/tests/unit/plc4py/spi/configuration => plc4py/tests/unit/plc4py/drivers}/__init__.py (100%)
 rename {sandbox/plc4py/tests/unit/plc4py/spi/tcp => plc4py/tests/unit/plc4py/drivers/modbus}/__init__.py (100%)
 create mode 100644 plc4py/tests/unit/plc4py/drivers/modbus/test_modbus_codegen.py
 create mode 100644 plc4py/tests/unit/plc4py/drivers/modbus/test_modbus_connection.py
 copy {sandbox/plc4py/plc4py/api => plc4py/tests/unit/plc4py/drivers/umas}/__init__.py (100%)
 create mode 100644 plc4py/tests/unit/plc4py/drivers/umas/test_umas_connection.py
 copy {sandbox/plc4py/plc4py/api => plc4py/tests/unit/plc4py/spi}/__init__.py (100%)
 copy {sandbox/plc4py/plc4py/api => plc4py/tests/unit/plc4py/spi/configuration}/__init__.py (100%)
 rename {sandbox/plc4py => plc4py}/tests/unit/plc4py/spi/configuration/test_configuration.py (100%)
 rename {sandbox/plc4py/plc4py/api => plc4py/tests/unit/plc4py/spi/tcp}/__init__.py (100%)
 create mode 100644 plc4py/tests/unit/plc4py/spi/tcp/server.py
 create mode 100644 plc4py/tests/unit/plc4py/spi/test_protocol.py
 create mode 100644 plc4py/tests/unit/plc4py/spi/test_read_buffer.py
 create mode 100644 plc4py/tests/unit/plc4py/spi/test_transport.py
 create mode 100644 plc4py/tests/unit/plc4py/spi/test_write_buffer.py
 create mode 100644 protocols/ab-eth/.factorypath
 create mode 100644 protocols/ads/.factorypath
 create mode 100644 protocols/bacnetip/.factorypath
 create mode 100644 protocols/c-bus/.factorypath
 create mode 100644 protocols/canopen/.factorypath
 create mode 100644 protocols/df1/.factorypath
 create mode 100644 protocols/eip/.factorypath
 create mode 100644 protocols/firmata/.factorypath
 create mode 100644 protocols/genericcan/.factorypath
 create mode 100644 protocols/iec-60870/.factorypath
 create mode 100644 protocols/knxnetip/.factorypath
 create mode 100644 protocols/modbus/.factorypath
 create mode 100644 protocols/modbus/src/test/resources/protocols/modbus/tcp/Modbus-all-datatypes.xml
 create mode 100644 protocols/mqtt/.factorypath
 create mode 100644 protocols/opcua/.factorypath
 create mode 100644 protocols/open-protocol/.factorypath
 create mode 100644 protocols/plc4x-api/.factorypath
 create mode 100644 protocols/plc4x/.factorypath
 create mode 100644 protocols/profinet/.factorypath
 create mode 100644 protocols/s7/.factorypath
 create mode 100644 protocols/simulated/.factorypath
 create mode 100644 protocols/socketcan/.factorypath
 create mode 100644 protocols/umas/.factorypath
 create mode 100644 protocols/umas/pom.xml
 create mode 100644 protocols/umas/src/main/java/org/apache/plc4x/protocol/umas/UmasProtocol.java
 create mode 100644 protocols/umas/src/main/resources/META-INF/services/org.apache.plc4x.plugins.codegenerator.protocol.Protocol
 create mode 100644 protocols/umas/src/main/resources/protocols/umas/umas.mspec
 create mode 100644 protocols/umas/src/test/java/org/apache/plc4x/protocol/umas/UmasProtocolTest.java
 rename {sandbox/test-java-df1-driver => protocols/umas}/src/test/resources/logback-test.xml (100%)
 delete mode 100644 sandbox/.gitignore
 delete mode 100644 sandbox/discovery/pom.xml
 delete mode 100644 sandbox/discovery/src/main/java/org/apache/plc4x/java/discovery/DiscoveryConnection.java
 delete mode 100644 sandbox/discovery/src/main/java/org/apache/plc4x/java/discovery/DiscoveryDriver.java
 delete mode 100644 sandbox/discovery/src/main/java/org/apache/plc4x/java/discovery/DiscoveryTagHandler.java
 delete mode 100644 sandbox/discovery/src/main/resources/META-INF/services/org.apache.plc4x.java.api.PlcDriver
 delete mode 100644 sandbox/plc4py/plc4py/PlcDriverManager.py
 delete mode 100644 sandbox/plc4py/plc4py/api/PlcConnection.py
 delete mode 100644 sandbox/plc4py/plc4py/api/exceptions/exceptions.py
 delete mode 100644 sandbox/plc4py/plc4py/api/messages/PlcMessage.py
 delete mode 100644 sandbox/plc4py/plc4py/api/messages/PlcRequest.py
 delete mode 100644 sandbox/plc4py/plc4py/api/messages/PlcResponse.py
 delete mode 100644 sandbox/plc4py/plc4py/api/value/PlcValue.py
 delete mode 100644 sandbox/plc4py/plc4py/drivers/PlcDriverLoader.py
 delete mode 100644 sandbox/plc4py/plc4py/drivers/mock/MockConnection.py
 delete mode 100644 sandbox/plc4py/plc4py/drivers/modbus/ModbusConfiguration.py
 delete mode 100644 sandbox/plc4py/plc4py/drivers/modbus/ModbusConnection.py
 delete mode 100644 sandbox/plc4py/plc4py/drivers/modbus/ModbusDevice.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/DataItem.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/DriverType.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusADU.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusAsciiADU.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusDeviceInformationConformityLevel.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusDeviceInformationLevel.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusDeviceInformationMoreFollows.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusDeviceInformationObject.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusErrorCode.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDU.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUDiagnosticRequest.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUDiagnosticResponse.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUError.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUGetComEventCounterRequest.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUGetComEventCounterResponse.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUGetComEventLogRequest.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUGetComEventLogResponse.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUMaskWriteHoldingRegisterRequest.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUMaskWriteHoldingRegisterResponse.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadCoilsRequest.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadCoilsResponse.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadDeviceIdentificationRequest.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadDeviceIdentificationResponse.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadDiscreteInputsRequest.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadDiscreteInputsResponse.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadExceptionStatusRequest.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadExceptionStatusResponse.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadFifoQueueRequest.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadFifoQueueResponse.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadFileRecordRequest.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadFileRecordRequestItem.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadFileRecordResponse.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadFileRecordResponseItem.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadHoldingRegistersRequest.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadHoldingRegistersResponse.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadInputRegistersRequest.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadInputRegistersResponse.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadWriteMultipleHoldingRegistersRequest.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReadWriteMultipleHoldingRegistersResponse.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReportServerIdRequest.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUReportServerIdResponse.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUWriteFileRecordRequest.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUWriteFileRecordRequestItem.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUWriteFileRecordResponse.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUWriteFileRecordResponseItem.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUWriteMultipleCoilsRequest.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUWriteMultipleCoilsResponse.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUWriteMultipleHoldingRegistersRequest.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUWriteMultipleHoldingRegistersResponse.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUWriteSingleCoilRequest.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUWriteSingleCoilResponse.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUWriteSingleRegisterRequest.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusPDUWriteSingleRegisterResponse.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusRtuADU.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/modbus/readwrite/ModbusTcpADU.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/simulated/readwrite/DataItem.py
 delete mode 100644 sandbox/plc4py/plc4py/protocols/simulated/readwrite/Dummy.py
 delete mode 100644 sandbox/plc4py/plc4py/spi/Plc4xBaseProtocol.py
 delete mode 100644 sandbox/plc4py/plc4py/spi/generation/ReadBuffer.py
 delete mode 100644 sandbox/plc4py/plc4py/spi/generation/WriteBuffer.py
 delete mode 100644 sandbox/plc4py/plc4py/spi/messages/PlcRequest.py
 delete mode 100644 sandbox/plc4py/plc4py/spi/messages/utils/ResponseItem.py
 delete mode 100644 sandbox/plc4py/plc4py/spi/values/Common.py
 delete mode 100644 sandbox/plc4py/pom.xml
 delete mode 100644 sandbox/plc4py/setup.py
 delete mode 100644 sandbox/plc4py/tests/test_plc4py.py
 delete mode 100644 sandbox/plc4py/tests/unit/plc4py/api/test_PlcRequest.py
 delete mode 100644 sandbox/plc4py/tests/unit/plc4py/drivers/modbus/test_modbus_codegen.py
 delete mode 100644 sandbox/plc4py/tests/unit/plc4py/drivers/modbus/test_modbus_connection.py
 delete mode 100644 sandbox/plc4py/tests/unit/plc4py/spi/tcp/server.py
 delete mode 100644 sandbox/plc4py/tests/unit/plc4py/spi/test_protocol.py
 delete mode 100644 sandbox/plc4py/tests/unit/plc4py/spi/test_read_buffer.py
 delete mode 100644 sandbox/plc4py/tests/unit/plc4py/spi/test_transport.py
 delete mode 100644 sandbox/plc4py/tests/unit/plc4py/spi/test_write_buffer.py
 delete mode 100644 sandbox/pom.xml
 delete mode 100644 sandbox/test-java-df1-driver/README.adoc
 delete mode 100644 sandbox/test-java-df1-driver/pom.xml
 delete mode 100644 sandbox/test-java-df1-driver/src/main/generated/org/apache/plc4x/java/df1/readwrite/DF1Command.java
 delete mode 100644 sandbox/test-java-df1-driver/src/main/generated/org/apache/plc4x/java/df1/readwrite/DF1Symbol.java
 delete mode 100644 sandbox/test-java-df1-driver/src/main/generated/org/apache/plc4x/java/df1/readwrite/DF1SymbolMessageFrame.java
 delete mode 100644 sandbox/test-java-df1-driver/src/main/generated/org/apache/plc4x/java/df1/readwrite/DF1SymbolMessageFrameACK.java
 delete mode 100644 sandbox/test-java-df1-driver/src/main/generated/org/apache/plc4x/java/df1/readwrite/DF1SymbolMessageFrameNAK.java
 delete mode 100644 sandbox/test-java-df1-driver/src/main/generated/org/apache/plc4x/java/df1/readwrite/DF1UnprotectedReadRequest.java
 delete mode 100644 sandbox/test-java-df1-driver/src/main/generated/org/apache/plc4x/java/df1/readwrite/DF1UnprotectedReadResponse.java
 delete mode 100644 sandbox/test-java-df1-driver/src/main/java/org/apache/plc4x/java/df1/DF1PlcDriver.java
 delete mode 100644 sandbox/test-java-df1-driver/src/main/java/org/apache/plc4x/java/df1/configuration/Df1Configuration.java
 delete mode 100644 sandbox/test-java-df1-driver/src/main/java/org/apache/plc4x/java/df1/field/Df1Tag.java
 delete mode 100644 sandbox/test-java-df1-driver/src/main/java/org/apache/plc4x/java/df1/field/Df1TagHandler.java
 delete mode 100644 sandbox/test-java-df1-driver/src/main/java/org/apache/plc4x/java/df1/protocol/Df1Protocol.java
 delete mode 100644 sandbox/test-java-df1-driver/src/main/java/org/apache/plc4x/java/df1/protocol/Df1ProtocolLogic.java
 delete mode 100644 sandbox/test-java-df1-driver/src/main/java/org/apache/plc4x/java/df1/protocol/Plc4XDf1Protocol.java
 delete mode 100644 sandbox/test-java-df1-driver/src/main/java/org/apache/plc4x/java/df1/readwrite/utils/StaticHelper.java
 delete mode 100644 sandbox/test-java-df1-driver/src/main/java/org/apache/plc4x/java/df1/types/DataType.java
 delete mode 100644 sandbox/test-java-df1-driver/src/main/resources/META-INF/services/org.apache.plc4x.java.api.PlcDriver
 delete mode 100644 sandbox/test-java-df1-driver/src/test/java/org/apache/plc4x/protocol/df1/BenchmarkGeneratedDf1.java
 delete mode 100644 sandbox/test-java-df1-driver/src/test/java/org/apache/plc4x/protocol/df1/BenchmarkManualDf1.java
 delete mode 100644 sandbox/test-java-df1-driver/src/test/java/org/apache/plc4x/protocol/df1/Df1ParserSerializerTest.java
 delete mode 100644 sandbox/test-java-df1-driver/src/test/java/org/apache/plc4x/protocol/df1/EndToEndTest.java
 delete mode 100644 src/site/asciidoc/developers/infrastructure/vpn.adoc
 delete mode 100644 src/site/asciidoc/images/users/protocols/.png
 create mode 100644 src/site/asciidoc/users/getting-started/index.adoc
 create mode 100644 src/site/asciidoc/users/getting-started/plc4c.adoc
 create mode 100644 src/site/asciidoc/users/getting-started/plc4cs.adoc
 create mode 100644 src/site/asciidoc/users/getting-started/plc4py.adoc
 delete mode 100644 src/site/asciidoc/users/gettingstarted.adoc
 create mode 100644 src/site/asciidoc/users/issues.adoc
 create mode 100644 src/site/asciidoc/users/protocols/bacnet.adoc
 delete mode 100644 src/site/asciidoc/users/protocols/bacnetip.adoc
 create mode 100644 src/site/asciidoc/users/protocols/c-bus.adoc
 create mode 100644 src/site/asciidoc/users/protocols/ctrlx.adoc
 create mode 100644 src/site/asciidoc/users/protocols/eip.adoc
 delete mode 100644 src/site/asciidoc/users/protocols/ethernet-ip.adoc
 create mode 100644 src/site/asciidoc/users/protocols/iec-60870.adoc
 delete mode 100644 src/site/asciidoc/users/protocols/opc-ua.adoc
 create mode 100644 src/site/asciidoc/users/protocols/opcua.adoc
 create mode 100644 src/site/asciidoc/users/protocols/open-protocol.adoc
 delete mode 100644 src/site/resources/images/integrations/apache_edgent_logo.png
 create mode 100644 src/site/resources/images/integrations/apache_hop_logo.png
 create mode 100644 src/site/resources/images/languages/c_logo.png
 create mode 100644 src/site/resources/images/languages/cs_logo.png
 create mode 100644 src/site/resources/images/languages/go_logo.png
 create mode 100644 src/site/resources/images/languages/java_logo.png
 create mode 100644 src/site/resources/images/languages/python_logo.png
 create mode 100644 src/site/resources/images/team/glcj.jpg
 create mode 100644 tools/NOTES.md
 create mode 100644 tools/docker-compose.yaml
 create mode 100755 tools/release-0-update-generated-code.sh
 create mode 100755 tools/release-1-create-branch.sh
 create mode 100755 tools/release-2-prepare-release.sh
 create mode 100755 tools/release-3-perform-release.sh
 create mode 100755 tools/release-abort.sh
 create mode 100755 tools/validate-release.sh


(plc4x) 01/01: Merge develop repo.

Posted by cg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

cgarcia pushed a commit to branch feature/merlot
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 9e3c73509a16b9f13b3ef8270d47dd1725270a87
Merge: 529ea92ff4 57a0f62353
Author: cgarcia <ce...@ceos.com.ve>
AuthorDate: Sun Mar 24 20:21:33 2024 -0400

    Merge develop repo.

 .asf.yaml                                          |      2 +-
 .dockerignore                                      |     12 +-
 .github/workflows/c-platform.yml                   |      2 +-
 .github/workflows/dependency-review.yml            |      2 +-
 .github/workflows/go-platform.yml                  |      2 +-
 .github/workflows/java-platform-test-report.yml    |      2 +-
 .github/workflows/java-platform.yml                |      8 +-
 .github/workflows/python-platform.yml              |     12 +-
 .github/workflows/release-drafter.yml              |      2 +-
 .gitignore                                         |     26 +-
 .idea/sonarlint/issuestore/index.pb                |     31 +
 .idea/sonarlint/securityhotspotstore/index.pb      |     31 +
 .mvn/extensions.xml                                |      4 +-
 CHANGELOG.md                                       |    393 +
 Dockerfile                                         |      2 +-
 Jenkinsfile                                        |     14 +-
 NOTICE                                             |      2 +-
 README.md                                          |     16 +-
 RELEASE_NOTES                                      |     48 +-
 build-reproducible.sh                              |      4 +-
 .../language-base-freemarker/.factorypath          |     40 +
 code-generation/language-base-freemarker/pom.xml   |      6 +-
 code-generation/language-c/.factorypath            |     38 +
 code-generation/language-c/pom.xml                 |     14 +-
 code-generation/language-cs/.factorypath           |     38 +
 code-generation/language-cs/pom.xml                |      6 +-
 code-generation/language-go/.factorypath           |     38 +
 code-generation/language-go/pom.xml                |     14 +-
 .../templates/go/data-io-template.go.ftlh          |     53 +-
 code-generation/language-java/.factorypath         |     45 +
 code-generation/language-java/pom.xml              |     22 +-
 .../language/java/JavaLanguageTemplateHelper.java  |     76 +
 .../templates/java/complex-type-template.java.ftlh |      6 +-
 .../templates/java/data-io-template.java.ftlh      |    931 +-
 code-generation/language-python/.factorypath       |     38 +
 code-generation/language-python/pom.xml            |     16 +-
 .../python/PythonLanguageTemplateHelper.java       |     19 +-
 .../python/complex-type-template.python.ftlh       |    105 +-
 .../templates/python/data-io-template.python.ftlh  |     34 +-
 .../src/test/resources/integration-test/pom.xml    |     96 +-
 code-generation/pom.xml                            |     13 +-
 code-generation/protocol-base-mspec/.factorypath   |     35 +
 code-generation/protocol-base-mspec/pom.xml        |      4 +-
 .../plugins/codegenerator/language/mspec/MSpec.g4  |     10 +-
 .../mspec/parser/MessageFormatListener.java        |      4 +-
 code-generation/protocol-test/.factorypath         |     33 +
 code-generation/protocol-test/pom.xml              |      6 +-
 code-generation/tests/pom.xml                      |     89 -
 code-generation/tests/protocol-test-java/pom.xml   |    157 -
 .../java/test/readwrite/AbstractTypeTest.java      |    166 -
 .../test/readwrite/AbstractTypeTestSubType.java    |    260 -
 .../plc4x/java/test/readwrite/ArrayTypeTest.java   |    248 -
 .../java/test/readwrite/CheckSumTypeTest.java      |    141 -
 .../test/readwrite/ComplexOfComplexUsageA.java     |    131 -
 .../test/readwrite/ComplexOfComplexUsageB.java     |    158 -
 .../test/readwrite/ComplexOfComplexUsageC.java     |    127 -
 .../test/readwrite/ComplexOfComplexUsageD.java     |    127 -
 .../plc4x/java/test/readwrite/ConstTypeTest.java   |    196 -
 .../plc4x/java/test/readwrite/DataIOType.java      |    110 -
 .../java/test/readwrite/EnumDiscriminatedType.java |    155 -
 .../test/readwrite/EnumDiscriminatedTypeA.java     |    141 -
 .../test/readwrite/EnumDiscriminatedTypeB.java     |    141 -
 .../test/readwrite/EnumDiscriminatedTypeC.java     |    141 -
 .../readwrite/EnumDiscriminatedTypeMultiple.java   |    190 -
 .../readwrite/EnumDiscriminatedTypeMultipleA.java  |    147 -
 .../readwrite/EnumDiscriminatedTypeMultipleB.java  |    147 -
 .../readwrite/EnumDiscriminatedTypeMultipleC.java  |    147 -
 .../readwrite/EnumDiscriminatedTypeParameter.java  |    160 -
 .../readwrite/EnumDiscriminatedTypeParameterA.java |    144 -
 .../readwrite/EnumDiscriminatedTypeParameterB.java |    144 -
 .../readwrite/EnumDiscriminatedTypeParameterC.java |    144 -
 .../EnumDiscriminatedTypeParameterMultiple.java    |    183 -
 .../EnumDiscriminatedTypeParameterMultipleA.java   |    149 -
 .../EnumDiscriminatedTypeParameterMultipleB.java   |    149 -
 .../EnumDiscriminatedTypeParameterMultipleC.java   |    149 -
 .../apache/plc4x/java/test/readwrite/EnumType.java |     57 -
 .../plc4x/java/test/readwrite/EnumTypeBit.java     |     55 -
 .../plc4x/java/test/readwrite/EnumTypeInt.java     |     56 -
 .../java/test/readwrite/EnumTypeParameters.java    |    188 -
 .../plc4x/java/test/readwrite/EnumTypeTest.java    |    138 -
 .../plc4x/java/test/readwrite/FieldTypeTest.java   |    322 -
 .../readwrite/FieldTypeTestWithUnknownField.java   |    222 -
 .../readwrite/ImplicitPascalStringTypeTest.java    |    138 -
 .../java/test/readwrite/ImplicitTypeTest.java      |    187 -
 .../plc4x/java/test/readwrite/IntTypeTest.java     |    217 -
 .../plc4x/java/test/readwrite/LengthLoopTest.java  |    137 -
 .../java/test/readwrite/OptionalTypeTest.java      |    146 -
 .../plc4x/java/test/readwrite/PaddingTypeTest.java |    139 -
 .../java/test/readwrite/PascalStringTypeTest.java  |    143 -
 .../java/test/readwrite/ReservedTypeTest.java      |    120 -
 .../java/test/readwrite/ReservedTypeTestChild.java |    128 -
 .../test/readwrite/ReservedTypeTestParent.java     |    163 -
 .../java/test/readwrite/SimpleBitTypeTest.java     |    127 -
 .../test/readwrite/SimpleDiscriminatedType.java    |    147 -
 .../test/readwrite/SimpleDiscriminatedTypeA.java   |    141 -
 .../test/readwrite/SimpleDiscriminatedTypeB.java   |    141 -
 .../test/readwrite/SimpleDiscriminatedTypeC.java   |    141 -
 .../plc4x/java/test/readwrite/SimpleTypeTest.java  |    234 -
 .../TypeSwitchInTypeSwitchParentType.java          |    175 -
 .../TypeSwitchInTypeSwitchParentTypeChild0.java    |    192 -
 ...eSwitchInTypeSwitchParentTypeChild0Infant0.java |    194 -
 ...SwitchParentTypeChild0Infant0InfantsChild0.java |    160 -
 ...SwitchParentTypeChild0Infant0InfantsChild1.java |    160 -
 ...eSwitchInTypeSwitchParentTypeChild0Infant1.java |    151 -
 ...eSwitchInTypeSwitchParentTypeChild0Infant2.java |    151 -
 .../TypeSwitchInTypeSwitchParentTypeChild1.java    |    192 -
 ...eSwitchInTypeSwitchParentTypeChild1Infant3.java |    150 -
 ...eSwitchInTypeSwitchParentTypeChild1Infant4.java |    151 -
 ...eSwitchInTypeSwitchParentTypeChild1Infant5.java |    151 -
 .../TypeSwitchInTypeSwitchParentTypeChild2.java    |    198 -
 ...eSwitchInTypeSwitchParentTypeChild2Infant6.java |    151 -
 ...eSwitchInTypeSwitchParentTypeChild2Infant7.java |    151 -
 ...eSwitchInTypeSwitchParentTypeChild2Infant8.java |    151 -
 .../plc4x/java/test/readwrite/UIntTypeTest.java    |    219 -
 .../java/test/readwrite/VirtualFieldTest.java      |    194 -
 .../java/test/readwrite/utils/StaticHelper.java    |     90 -
 docker-compose.yaml                                |      2 +-
 jenkins.pom                                        |     26 +-
 media/release-image-template.svg                   |      4 +-
 plc4c/api/include/plc4c/data.h                     |      4 +
 plc4c/drivers/s7/include/plc4c/driver_s7_static.h  |      2 +
 plc4c/drivers/s7/src/driver_s7_sm_read.c           |      6 +-
 plc4c/drivers/s7/src/driver_s7_static.c            |      4 +
 plc4c/generated-sources/plc4x/src/plc4x_value.c    |      3 -
 .../generated-sources/s7/include/controller_type.h |     63 +
 plc4c/generated-sources/s7/include/data_item.h     |      9 +-
 .../s7/include/s7_payload_user_data_item.h         |      4 +-
 .../generated-sources/s7/include/transport_size.h  |     13 +-
 .../s7/src/alarm_message_ack_push_type.c           |     12 +-
 .../s7/src/alarm_message_push_type.c               |     12 +-
 .../s7/src/alarm_message_query_type.c              |     14 +-
 plc4c/generated-sources/s7/src/controller_type.c   |    127 +
 plc4c/generated-sources/s7/src/data_item.c         |    223 +-
 plc4c/generated-sources/s7/src/date_and_time.c     |     98 +-
 .../s7/src/s7_payload_user_data_item.c             |    218 +-
 plc4c/generated-sources/s7/src/transport_size.c    |    373 +-
 plc4c/pom.xml                                      |     12 +-
 plc4c/spi/include/plc4c/spi/types_private.h        |      1 +
 plc4c/spi/src/data.c                               |     10 +
 .../testing/protocols/ads/DriverTestsuite.xml      |   1404 +-
 .../protocols/modbus/tcp/Modbus-all-datatypes.xml  |   3404 +
 .../testing/protocols/opcua/DriverTestsuite.xml    |     48 +-
 plc4go/go.mod                                      |     28 +-
 plc4go/go.sum                                      |     54 +-
 plc4go/internal/ads/Discoverer.go                  |     30 +
 plc4go/internal/bacnetip/Discoverer.go             |     25 +-
 plc4go/internal/cbus/Browser_test.go               |      2 +
 plc4go/internal/cbus/Configuration.go              |     10 +
 plc4go/internal/cbus/Configuration_test.go         |      2 +-
 plc4go/internal/cbus/Discoverer.go                 |     17 +-
 plc4go/internal/knxnetip/Discoverer.go             |     21 +-
 plc4go/internal/opcua/Configuration.go             |     54 +-
 plc4go/internal/opcua/Configuration_plc4xgen.go    |     38 +-
 plc4go/internal/opcua/Driver.go                    |     12 +-
 plc4go/internal/opcua/DriverContext.go             |      2 +-
 plc4go/internal/opcua/EncryptionHandler.go         |      4 +-
 plc4go/internal/opcua/SecureChannel.go             |    265 +-
 plc4go/internal/opcua/SecureChannel_plc4xgen.go    |      4 +-
 plc4go/internal/s7/Reader.go                       |      7 +-
 plc4go/internal/s7/Writer.go                       |      2 +-
 plc4go/pkg/api/cache/PlcConnectionCache.go         |     21 +-
 plc4go/pkg/api/cache/connectionContainer.go        |     18 +-
 plc4go/pkg/api/cache/connectionContainer_test.go   |      4 +-
 .../pkg/api/cache/mock_PlcConnectionCache_test.go  |     47 +
 plc4go/pkg/api/cache/plcConnectionLease.go         |      2 +-
 plc4go/pkg/api/values/plc_value.go                 |      3 +-
 plc4go/pom.xml                                     |    170 +-
 plc4go/protocols/ads/readwrite/model/DataItem.go   |     27 +
 .../bacnetip/readwrite/model/BACnetVendorId.go     |    160 +-
 .../knxnetip/readwrite/model/KnxDatapoint.go       |    705 +-
 .../knxnetip/readwrite/model/KnxManufacturer.go    |    240 +-
 .../knxnetip/readwrite/model/KnxProperty.go        |    181 +-
 .../protocols/modbus/readwrite/model/DataItem.go   |     31 +
 plc4go/protocols/opcua/readwrite/ParserHelper.go   |     24 +
 .../protocols/opcua/readwrite/XmlParserHelper.go   |     19 +
 .../opcua/readwrite/model/BinaryPayload.go         |    212 +
 .../protocols/opcua/readwrite/model/ChunkType.go   |    159 +
 .../opcua/readwrite/model/ExtensiblePayload.go     |    223 +
 .../protocols/opcua/readwrite/model/MessagePDU.go  |     80 +-
 .../protocols/opcua/readwrite/model/MessageType.go |    183 +
 .../readwrite/model/OpcuaAcknowledgeResponse.go    |    188 +-
 .../opcua/readwrite/model/OpcuaCloseRequest.go     |    186 +-
 .../opcua/readwrite/model/OpcuaConstants.go        |    174 +
 .../opcua/readwrite/model/OpcuaHelloRequest.go     |    194 +-
 .../opcua/readwrite/model/OpcuaMessageError.go     |     51 +-
 .../opcua/readwrite/model/OpcuaMessageRequest.go   |    228 +-
 .../opcua/readwrite/model/OpcuaMessageResponse.go  |    228 +-
 .../opcua/readwrite/model/OpcuaOpenRequest.go      |    313 +-
 .../opcua/readwrite/model/OpcuaOpenResponse.go     |    313 +-
 .../opcua/readwrite/model/OpcuaProtocolLimits.go   |    250 +
 .../opcua/readwrite/model/OpenChannelMessage.go    |    185 +
 .../readwrite/model/OpenChannelMessageRequest.go   |    319 +
 .../readwrite/model/OpenChannelMessageResponse.go  |    319 +
 plc4go/protocols/opcua/readwrite/model/Payload.go  |    243 +
 .../opcua/readwrite/model/SecurityHeader.go        |    200 +
 .../opcua/readwrite/model/SequenceHeader.go        |    200 +
 plc4go/protocols/s7/readwrite/ParserHelper.go      |      5 +-
 plc4go/protocols/s7/readwrite/XmlParserHelper.go   |      7 +-
 .../s7/readwrite/model/AlarmMessageAckPushType.go  |     42 +-
 .../s7/readwrite/model/AlarmMessagePushType.go     |     42 +-
 .../s7/readwrite/model/AlarmMessageQueryType.go    |     22 +-
 .../protocols/s7/readwrite/model/ControllerType.go |    191 +
 plc4go/protocols/s7/readwrite/model/DataItem.go    |    190 +-
 plc4go/protocols/s7/readwrite/model/DateAndTime.go |    126 +-
 .../readwrite/model/S7PayloadDiagnosticMessage.go  |    198 +-
 .../model/S7PayloadUserDataItemClkFResponse.go     |    104 +-
 .../model/S7PayloadUserDataItemClkResponse.go      |    104 +-
 .../model/S7PayloadUserDataItemClkSetRequest.go    |     42 +-
 ...serDataItemCpuFunctionMsgSubscriptionRequest.go |    102 +-
 .../protocols/s7/readwrite/model/StaticHelper.go   |     22 +
 .../protocols/s7/readwrite/model/TransportSize.go  |    384 +-
 .../simulated/readwrite/model/DataItem.go          |     36 +
 plc4go/script/validate-go-test-results.groovy      |     36 -
 plc4go/spi/pool/executor_test.go                   |      3 +-
 plc4go/spi/pool/future_test.go                     |     23 +-
 plc4go/spi/pool/worker.go                          |      3 +-
 plc4go/spi/pool/worker_test.go                     |      3 +-
 .../transactions/RequestTransactionManager_test.go |      4 +-
 plc4go/spi/transactions/RequestTransaction_test.go |     11 +-
 plc4go/spi/utils/Buffer.go                         |     10 +
 plc4go/spi/utils/bufferCommons.go                  |     22 +
 plc4go/spi/utils/dumpUtils_test.go                 |      1 +
 plc4go/spi/values/PlcDATE_AND_LTIME.go             |    132 +
 plc4go/spi/values/PlcDATE_AND_TIME.go              |      4 +
 plc4j/api/.factorypath                             |     30 +
 plc4j/api/pom.xml                                  |      9 +-
 .../apache/plc4x/java/DefaultPlcDriverManager.java |      4 +-
 .../plc4x/java/api/PlcConnectionExtension.java     |     81 -
 .../java/org/apache/plc4x/java/api/PlcDriver.java  |     37 +-
 .../apache/plc4x/java/api/PlcDriverManager.java    |      2 +-
 .../plc4x/java/api/messages/PlcBrowseItem.java     |      2 -
 .../plc4x/java/api/messages/PlcRequestBuilder.java |      1 +
 .../plc4x/java/api/messages/PlcResponse.java       |      2 +
 .../org/apache/plc4x/java/api/metadata/Option.java |     36 +
 .../plc4x/java/api/metadata/OptionMetadata.java    |     30 +
 .../java/api/metadata/PlcConnectionMetadata.java   |      8 +-
 .../plc4x/java/api/metadata/PlcDriverMetadata.java |     28 +-
 .../apache/plc4x/java/api/types/OptionType.java    |     30 +
 .../apache/plc4x/java/api/types/PlcValueType.java  |      3 +-
 plc4j/drivers/ab-eth/.factorypath                  |     47 +
 plc4j/drivers/ab-eth/pom.xml                       |     18 +-
 .../org/apache/plc4x/java/abeth/AbEthDriver.java   |     39 +-
 .../abeth/configuration/AbEthConfiguration.java    |      6 +-
 .../java/abeth/protocol/AbEthProtocolLogic.java    |     57 +-
 plc4j/drivers/ads/.factorypath                     |     47 +
 plc4j/drivers/ads/pom.xml                          |     18 +-
 .../ads/discovery/readwrite/AdsDiscoveryBlock.java |      3 +-
 .../apache/plc4x/java/ads/readwrite/AmsPacket.java |      3 +-
 .../apache/plc4x/java/ads/readwrite/DataItem.java  |    571 +-
 .../org/apache/plc4x/java/ads/AdsPlcDriver.java    |     45 +-
 .../java/ads/configuration/AdsConfiguration.java   |     30 +-
 .../plc4x/java/ads/protocol/AdsProtocolLogic.java  |    188 +-
 .../org/apache/plc4x/protocol/ads/AdsDriverIT.java |      1 -
 .../plc4x/protocol/ads/ManualAdsDriverTest.java    |      2 +-
 .../org/apache/plc4x/protocol/ads/Scanner.java     |      4 +-
 .../ads/src/test/resources/logback-test.xml        |      2 +-
 plc4j/drivers/all/pom.xml                          |     87 +-
 plc4j/drivers/all/src/site/generated/ab-eth.adoc   |     48 +
 plc4j/drivers/all/src/site/generated/ads.adoc      |     53 +
 .../drivers/all/src/site/generated/bacnet-ip.adoc  |     73 +
 plc4j/drivers/all/src/site/generated/c-bus.adoc    |     48 +
 plc4j/drivers/all/src/site/generated/canopen.adoc  |     47 +
 plc4j/drivers/all/src/site/generated/eip.adoc      |     50 +
 plc4j/drivers/all/src/site/generated/firmata.adoc  |     72 +
 .../drivers/all/src/site/generated/genericcan.adoc |     46 +
 .../all/src/site/generated/iec-60870-5-104.adoc    |     48 +
 .../drivers/all/src/site/generated/knxnet-ip.adoc  |     84 +
 plc4j/drivers/all/src/site/generated/logix.adoc    |     53 +
 .../all/src/site/generated/modbus-ascii.adoc       |     82 +
 .../drivers/all/src/site/generated/modbus-rtu.adoc |     82 +
 .../drivers/all/src/site/generated/modbus-tcp.adoc |     50 +
 plc4j/drivers/all/src/site/generated/opcua.adoc    |     80 +
 .../all/src/site/generated/open-protocol.adoc      |     47 +
 plc4j/drivers/all/src/site/generated/plc4x.adoc    |     49 +
 plc4j/drivers/all/src/site/generated/profinet.adoc |     50 +
 plc4j/drivers/all/src/site/generated/s7.adoc       |     67 +
 .../drivers/all/src/site/generated/simulated.adoc  |     37 +
 .../groovy/generate-config-documentation.groovy    |    132 +
 plc4j/drivers/bacnet/.factorypath                  |     58 +
 plc4j/drivers/bacnet/pom.xml                       |     77 +-
 .../apache/plc4x/java/bacnetip/readwrite/APDU.java |      3 +-
 .../readwrite/BACnetConfirmedServiceRequest.java   |      3 +-
 .../java/bacnetip/readwrite/BACnetServiceAck.java  |      3 +-
 .../readwrite/BACnetUnconfirmedServiceRequest.java |      3 +-
 .../java/bacnetip/readwrite/BACnetVendorId.java    |     11 +-
 .../apache/plc4x/java/bacnetip/BacNetIpDriver.java |     46 +-
 .../configuration/BacNetIpConfiguration.java       |      7 +-
 .../BacNetPcapReplayTransportConfiguration.java    |      2 +
 .../BacNetRawSocketTransportConfiguration.java     |      2 +
 plc4j/drivers/c-bus/.factorypath                   |     48 +
 plc4j/drivers/c-bus/pom.xml                        |     18 +-
 .../org/apache/plc4x/java/cbus/CBusDriver.java     |     44 +-
 .../java/cbus/configuration/CBusConfiguration.java |      6 +-
 .../java/cbus/protocol/CBusProtocolLogic.java      |      9 +-
 plc4j/drivers/can/.factorypath                     |     47 +
 plc4j/drivers/can/pom.xml                          |     26 +-
 .../plc4x/java/genericcan/readwrite/DataItem.java  |    321 +-
 .../genericcan/readwrite/GenericCANDataType.java   |      3 +-
 .../conversation/ConversationContextWrapper.java   |      4 +-
 .../plc4x/java/can/generic/GenericCANDriver.java   |     16 +-
 .../configuration/GenericCANConfiguration.java     |      9 +-
 .../generic/protocol/GenericCANProtocolLogic.java  |     30 +-
 .../transport/GenericCANFrameDataHandler.java      |      6 +
 .../java/can/generic/transport/GenericFrame.java   |     32 +-
 .../java/can/generic/GenericCANDriverTest.java     |    168 +-
 plc4j/drivers/canopen/.factorypath                 |     47 +
 plc4j/drivers/canopen/pom.xml                      |     22 +-
 .../java/canopen/readwrite/CANOpenDataType.java    |      4 +-
 .../plc4x/java/canopen/readwrite/DataItem.java     |    369 +-
 .../plc4x/java/canopen/CANOpenPlcDriver.java       |     18 +-
 .../canopen/SDODownloadConversation.java           |      2 +-
 .../configuration/CANOpenConfiguration.java        |     10 +-
 .../canopen/protocol/CANOpenProtocolLogic.java     |     21 +-
 .../canopen/transport/CANOpenFrameDataHandler.java |      2 +-
 .../plc4x/java/canopen/CANTestTransport.java       |      4 +-
 plc4j/drivers/ctrlx/.factorypath                   |     54 +
 plc4j/drivers/ctrlx/pom.xml                        |      8 +-
 .../ctrlx/readwrite/rest/datalayer/ApiClient.java  |   1028 -
 .../plc4x/java/ctrlx/readwrite/CtrlXDriver.java    |     14 +-
 .../configuration/CtrlXConfiguration.java          |      6 +-
 .../readwrite/connection/CtrlXConnection.java      |     10 +-
 .../ctrlx/readwrite/rest/datalayer/ApiClient.java  |   1028 +
 .../readwrite/rest/datalayer/ApiException.java     |      0
 .../readwrite/rest/datalayer/Configuration.java    |      0
 .../rest/datalayer/JavaTimeFormatter.java          |      0
 .../java/ctrlx/readwrite/rest/datalayer/Pair.java  |      0
 .../rest/datalayer/RFC3339DateFormat.java          |      0
 .../rest/datalayer/ServerConfiguration.java        |      0
 .../readwrite/rest/datalayer/ServerVariable.java   |      0
 .../ctrlx/readwrite/rest/datalayer/StringUtil.java |      0
 .../rest/datalayer/api/BulkAccessApi.java          |      0
 .../api/DataLayerInformationAndSettingsApi.java    |      0
 .../readwrite/rest/datalayer/api/NodesApi.java     |      0
 .../readwrite/rest/datalayer/api/RemotesApi.java   |      0
 .../rest/datalayer/api/RetainMemoryApi.java        |      0
 .../api/SubscriptionInformationAndSettingsApi.java |      0
 .../rest/datalayer/api/SubscriptionsApi.java       |      0
 .../readwrite/rest/datalayer/api/TypesApi.java     |      0
 .../readwrite/rest/datalayer/auth/ApiKeyAuth.java  |      0
 .../rest/datalayer/auth/Authentication.java        |      0
 .../rest/datalayer/auth/HttpBasicAuth.java         |      0
 .../rest/datalayer/auth/HttpBearerAuth.java        |      0
 .../ctrlx/readwrite/rest/datalayer/auth/OAuth.java |      0
 .../readwrite/rest/datalayer/auth/OAuthFlow.java   |      0
 .../readwrite/rest/datalayer/model/ARString.java   |      0
 .../rest/datalayer/model/AllowedOperations.java    |      0
 .../readwrite/rest/datalayer/model/BrowseData.java |      0
 .../rest/datalayer/model/BulkRequestInner.java     |      0
 .../rest/datalayer/model/BulkResponseInner.java    |      0
 .../datalayer/model/ChangeSubscriptionRequest.java |      0
 .../datalayer/model/CommDatalayerChangeEvents.java |      0
 .../datalayer/model/CommDatalayerCounting.java     |      0
 .../model/CommDatalayerDataChangeFilter.java       |      0
 .../model/CommDatalayerDataChangeTrigger.java      |      0
 .../datalayer/model/CommDatalayerProperties.java   |      0
 .../datalayer/model/CommDatalayerProperty.java     |      0
 .../datalayer/model/CommDatalayerPropertyRule.java |      0
 .../model/CommDatalayerQueueBehaviour.java         |      0
 .../datalayer/model/CommDatalayerQueueing.java     |      0
 .../model/CommDatalayerRemoteConfigItem.java       |      0
 .../datalayer/model/CommDatalayerSampling.java     |      0
 .../model/CommDatalayerServerSettings.java         |      0
 .../model/CommDatalayerSubscriptionData.java       |      0
 .../model/CommDatalayerSubscriptionProperties.java |      0
 .../rest/datalayer/model/CreateRemoteRequest.java  |      0
 .../datalayer/model/CreateSubscriptionRequest.java |      0
 .../model/CreateSubscriptionRequestAllOf.java      |      0
 .../readwrite/rest/datalayer/model/DLARString.java |      0
 .../readwrite/rest/datalayer/model/DLString.java   |      0
 .../readwrite/rest/datalayer/model/DLUInt32.java   |      0
 .../ctrlx/readwrite/rest/datalayer/model/Data.java |      0
 .../readwrite/rest/datalayer/model/Extension.java  |      0
 .../readwrite/rest/datalayer/model/JsonString.java |      0
 .../readwrite/rest/datalayer/model/Memory.java     |      0
 .../readwrite/rest/datalayer/model/MemoryType.java |      0
 .../rest/datalayer/model/MemoryValue.java          |      0
 .../readwrite/rest/datalayer/model/MetaData.java   |      0
 .../readwrite/rest/datalayer/model/NodeClass.java  |      0
 .../readwrite/rest/datalayer/model/Problem.java    |      0
 .../rest/datalayer/model/ReadNode200Response.java  |      0
 .../readwrite/rest/datalayer/model/Reference.java  |      0
 .../readwrite/rest/datalayer/model/Reflection.java |      0
 .../rest/datalayer/model/ReflectionBaseType.java   |      0
 .../rest/datalayer/model/ReflectionEnum.java       |      0
 .../rest/datalayer/model/ReflectionEnumVal.java    |      0
 .../rest/datalayer/model/ReflectionField.java      |      0
 .../rest/datalayer/model/ReflectionKeyValue.java   |      0
 .../rest/datalayer/model/ReflectionObject.java     |      0
 .../rest/datalayer/model/ReflectionRPCCall.java    |      0
 .../rest/datalayer/model/ReflectionSchema.java     |      0
 .../rest/datalayer/model/ReflectionService.java    |      0
 .../rest/datalayer/model/ReflectionType.java       |      0
 .../rest/datalayer/model/RemoteConfig.java         |      0
 .../rest/datalayer/model/RetainStats.java          |      0
 .../readwrite/rest/datalayer/model/SSEEvent.java   |      0
 .../rest/datalayer/model/SSEEventData.java         |      0
 .../rest/datalayer/model/SSEEventData1.java        |      0
 .../rest/datalayer/model/ServerSettings.java       |      0
 .../readwrite/rest/datalayer/model/State.java      |      0
 .../rest/datalayer/model/SubscriptionData.java     |      0
 .../rest/datalayer/model/SubscriptionID.java       |      0
 .../rest/datalayer/model/SubscriptionNodeList.java |      0
 .../datalayer/model/SubscriptionProperties.java    |      0
 .../model/SubscriptionPropertiesData.java          |      0
 .../rest/datalayer/model/SubscriptionSettings.java |      0
 .../ctrlx/readwrite/rest/datalayer/model/Task.java |      0
 .../readwrite/rest/datalayer/model/UInt32.java     |      0
 .../plc4x/java/ctrlx/readwrite/tag/CtrlXQuery.java |      2 +-
 .../plc4x/java/ctrlx/readwrite/tag/CtrlXTag.java   |      2 +-
 .../java/ctrlx/readwrite/tag/CtrlXTagHandler.java  |      2 +-
 .../ctrlx/readwrite/utils/ApiClientFactory.java    |      2 +-
 .../java/ctrlx/readwrite/utils/OauthHelper.java    |      2 +-
 .../plc4x/java/ctrlx/readwrite/BrowseTest.java     |      2 +-
 .../java/ctrlx/readwrite/ManualDriverTest.java     |      2 +-
 plc4j/drivers/eip/.factorypath                     |     48 +
 plc4j/drivers/eip/pom.xml                          |     18 +-
 .../plc4x/java/eip/readwrite/CipExchange.java      |    204 -
 .../org/apache/plc4x/java/eip/base/EIPDriver.java  |     53 +-
 .../eip/base/configuration/EIPConfiguration.java   |     12 +-
 .../java/eip/base/protocol/EipProtocolLogic.java   |    201 +-
 .../apache/plc4x/java/eip/logix/LogixDriver.java   |     36 +-
 .../logix/configuration/LogixConfiguration.java    |      6 +-
 .../LogixTcpTransportConfiguration.java            |     32 +
 plc4j/drivers/firmata/.factorypath                 |     50 +
 plc4j/drivers/firmata/pom.xml                      |     23 +-
 .../java/firmata/readwrite/FirmataDriver.java      |     16 +-
 .../configuration/FirmataConfiguration.java        |      4 +-
 .../readwrite/protocol/FirmataProtocolLogic.java   |     20 +-
 .../java/firmata/readwrite/FirmataManualTest.java  |     41 +
 .../firmata/src/test/resources/logback-test.xml    |      2 +-
 plc4j/drivers/iec-60870/.factorypath               |     47 +
 plc4j/drivers/iec-60870/pom.xml                    |     18 +-
 .../readwrite/Iec60870514PlcDriver.java            |     45 +-
 .../configuration/Iec608705014Configuration.java   |     18 +-
 .../readwrite/protocol/Iec608705104Protocol.java   |     37 +-
 .../apache/plc4x/java/iec608705104/ManualTest.java |      3 +-
 plc4j/drivers/knxnetip/.factorypath                |     59 +
 plc4j/drivers/knxnetip/pom.xml                     |     24 +-
 .../java/knxnetip/readwrite/KnxDatapoint.java      |  19263 +--
 .../java/knxnetip/readwrite/KnxManufacturer.java   |     23 +-
 .../plc4x/java/knxnetip/readwrite/KnxProperty.java |   2024 +-
 .../apache/plc4x/java/knxnetip/KnxNetIpDriver.java |     55 +-
 .../configuration/KnxNetIpConfiguration.java       |     19 +-
 .../knxnetip/protocol/KnxNetIpProtocolLogic.java   |     47 +-
 plc4j/drivers/mock/.factorypath                    |     53 +
 plc4j/drivers/mock/pom.xml                         |      8 +-
 .../plc4x/java/mock/connection/MockConnection.java |      8 +-
 plc4j/drivers/modbus/.factorypath                  |     53 +
 plc4j/drivers/modbus/pom.xml                       |     27 +-
 .../plc4x/java/modbus/readwrite/DataItem.java      |   1061 +-
 .../plc4x/java/modbus/ascii/ModbusAsciiDriver.java |     39 +-
 .../ascii/config/ModbusAsciiConfiguration.java     |     11 +-
 .../ascii/protocol/ModbusAsciiProtocolLogic.java   |     17 +-
 .../modbus/base/protocol/ModbusProtocolLogic.java  |      6 +-
 .../plc4x/java/modbus/rtu/ModbusRtuDriver.java     |     39 +-
 .../modbus/rtu/config/ModbusRtuConfiguration.java  |      7 +-
 .../rtu/protocol/ModbusRtuProtocolLogic.java       |     22 +-
 .../plc4x/java/modbus/tcp/ModbusTcpDriver.java     |     39 +-
 .../modbus/tcp/config/ModbusTcpConfiguration.java  |     18 +-
 .../tcp/protocol/ModbusTcpProtocolLogic.java       |     19 +-
 .../java/modbus/ManualModbusASCIIDriverTest.java   |    105 +
 .../plc4x/java/modbus/ManualModbusDriverTest.java  |    106 -
 .../java/modbus/ManualModbusRTUDriverTest.java     |    105 +
 .../java/modbus/ManualModbusTCPDriverTest.java     |    104 +
 .../java/modbus/tcp/ModbusTcpAllDatatypesIT.java   |     29 +
 plc4j/drivers/opcua/.factorypath                   |     49 +
 plc4j/drivers/opcua/pom.xml                        |     22 +-
 .../plc4x/java/opcua/readwrite/BinaryPayload.java  |    141 +
 .../plc4x/java/opcua/readwrite/ChunkType.java      |     56 +
 .../apache/plc4x/java/opcua/readwrite/Date.java    |    110 -
 .../java/opcua/readwrite/DecimalDataType.java      |    164 -
 .../java/opcua/readwrite/ExtensiblePayload.java    |    143 +
 .../plc4x/java/opcua/readwrite/MessagePDU.java     |     54 +-
 .../plc4x/java/opcua/readwrite/MessageType.java    |     59 +
 .../apache/plc4x/java/opcua/readwrite/Node.java    |    362 -
 .../java/opcua/readwrite/NodeIdTypeDefinition.java |      3 +-
 .../opcua/readwrite/OpcuaAcknowledgeResponse.java  |    153 +-
 .../java/opcua/readwrite/OpcuaCloseRequest.java    |    152 +-
 .../plc4x/java/opcua/readwrite/OpcuaConstants.java |    128 +
 .../java/opcua/readwrite/OpcuaHelloRequest.java    |    161 +-
 .../java/opcua/readwrite/OpcuaMessageError.java    |     41 +-
 .../java/opcua/readwrite/OpcuaMessageRequest.java  |    172 +-
 .../java/opcua/readwrite/OpcuaMessageResponse.java |    172 +-
 .../OpcuaNodeIdServicesVariableAddress.java        |     69 -
 .../OpcuaNodeIdServicesVariableChoice.java         |     54 -
 .../OpcuaNodeIdServicesVariableDevice.java         |     66 -
 .../OpcuaNodeIdServicesVariableDiscrete.java       |    193 -
 .../OpcuaNodeIdServicesVariableInitial.java        |     54 -
 .../OpcuaNodeIdServicesVariableInstrument.java     |    193 -
 .../OpcuaNodeIdServicesVariableRefresh.java        |     92 -
 .../readwrite/OpcuaNodeIdServicesVariableTrip.java |    192 -
 .../java/opcua/readwrite/OpcuaOpenRequest.java     |    247 +-
 .../java/opcua/readwrite/OpcuaOpenResponse.java    |    248 +-
 .../java/opcua/readwrite/OpcuaProtocolLimits.java  |    176 +
 .../java/opcua/readwrite/OpenChannelMessage.java   |    158 +
 .../opcua/readwrite/OpenChannelMessageRequest.java |    225 +
 .../readwrite/OpenChannelMessageResponse.java      |    226 +
 .../apache/plc4x/java/opcua/readwrite/Payload.java |    185 +
 .../plc4x/java/opcua/readwrite/ReferenceNode.java  |    195 -
 .../plc4x/java/opcua/readwrite/SecurityHeader.java |    143 +
 .../plc4x/java/opcua/readwrite/SequenceHeader.java |    143 +
 .../apache/plc4x/java/opcua/readwrite/Time.java    |    110 -
 .../apache/plc4x/java/opcua/OpcuaPlcDriver.java    |     22 +-
 .../org/apache/plc4x/java/opcua/config/Limits.java |     74 +
 .../java/opcua/config/OpcuaConfiguration.java      |    171 +-
 .../opcua/context/AsymmetricEncryptionHandler.java |    108 +
 .../java/opcua/context/BaseEncryptionHandler.java  |    239 +
 .../plc4x/java/opcua/context/CallContext.java      |     49 +
 .../java/opcua/context/CertificateKeyPair.java     |     24 +-
 .../plc4x/java/opcua/context/Conversation.java     |    497 +
 .../java/opcua/context/EncryptionHandler.java      |    263 +-
 .../java/opcua/context/OpcuaDriverContext.java     |    112 +-
 .../plc4x/java/opcua/context/SecureChannel.java    |   1236 +-
 .../context/SecureChannelTransactionManager.java   |     88 +-
 .../opcua/context/SymmetricEncryptionHandler.java  |    126 +
 .../java/opcua/protocol/OpcuaProtocolLogic.java    |    430 +-
 .../opcua/protocol/OpcuaSubscriptionHandle.java    |    359 +-
 .../plc4x/java/opcua/protocol/chunk/Chunk.java     |    149 +
 .../java/opcua/protocol/chunk/ChunkFactory.java    |    156 +
 .../java/opcua/protocol/chunk/ChunkStorage.java    |     46 +
 .../opcua/protocol/chunk/MemoryChunkStorage.java   |     59 +
 .../opcua/protocol/chunk/PayloadConverter.java     |     93 +
 .../java/opcua/security/CertificateVerifier.java   |     29 +
 .../plc4x/java/opcua/security/MessageSecurity.java |     40 +
 .../security/PermissiveCertificateVerifier.java    |     35 +
 .../plc4x/java/opcua/security/SecurityPolicy.java  |    210 +
 .../plc4x/java/opcua/security/SymmetricKeys.java   |    155 +
 .../security/TrustStoreCertificateVerifier.java    |     55 +
 .../org/apache/plc4x/java/opcua/OpcuaDriverIT.java |      1 +
 .../plc4x/java/opcua/OpcuaPlcDriverTest.java       |    313 +-
 .../plc4x/java/opcua/TestCertificateGenerator.java |     69 +
 .../java/opcua/context/EncryptionHandlerTest.java  |    276 +
 .../protocol/OpcuaSubscriptionHandleTest.java      |    439 +-
 .../opcua/protocol/chunk/ChunkFactoryTest.java     |    140 +
 .../opcua/protocol/chunk/PayloadConverterTest.java |     71 +
 .../milo/examples/server/TestMiloServer.java       |    281 +
 .../src/test/resources/chunk-calculation-1024.csv  |     49 +
 .../src/test/resources/chunk-calculation-2048.csv  |     49 +
 .../src/test/resources/chunk-calculation-3072.csv  |     49 +
 .../src/test/resources/chunk-calculation-4096.csv  |     49 +
 .../src/test/resources/chunk-calculation-5120.csv  |     49 +
 .../opcua/src/test/resources/log4j.properties      |     24 -
 .../opcua/src/test/resources/logback-test.xml      |      6 +-
 plc4j/drivers/open-protocol/.factorypath           |     49 +
 plc4j/drivers/open-protocol/pom.xml                |     20 +-
 .../readwrite/OpenProtocolMessage.java             |      3 +-
 .../java/openprotocol/OpenProtocolDriver.java      |     39 +-
 .../config/OpenProtocolConfiguration.java          |      4 +-
 plc4j/drivers/plc4x/.factorypath                   |     48 +
 plc4j/drivers/plc4x/pom.xml                        |     18 +-
 .../plc4x/java/plc4x/readwrite/Plc4xMessage.java   |      3 +-
 .../plc4x/java/plc4x/readwrite/Plc4xValue.java     |    461 +-
 .../org/apache/plc4x/java/plc4x/Plc4xDriver.java   |     47 +-
 .../java/plc4x/config/Plc4xConfiguration.java      |      7 +-
 .../java/plc4x/protocol/Plc4xProtocolLogic.java    |     18 +-
 plc4j/drivers/pom.xml                              |      4 +-
 plc4j/drivers/profinet-ng/.factorypath             |     56 +
 plc4j/drivers/profinet-ng/pom.xml                  |     24 +-
 .../plc4x/java/profinet/readwrite/DataItem.java    |   1332 +-
 .../plc4x/java/profinet/readwrite/LldpUnit.java    |      3 +-
 .../plc4x/java/profinet/readwrite/PnDcp_Block.java |      3 +-
 .../readwrite/PnDcp_Pdu_IdentifyRes_Payload.java   |      3 +-
 .../java/profinet/readwrite/PnIoCm_Block.java      |      3 +-
 .../java/profinet/readwrite/PnIoCm_Submodule.java  |      3 +-
 .../readwrite/TlvOrgSpecificIeee8023Unit.java      |      3 +-
 .../readwrite/TlvOrgSpecificProfibusUnit.java      |      3 +-
 .../apache/plc4x/java/profinet/ProfinetDriver.java |     49 +-
 .../profinet/config/ProfinetConfiguration.java     |      4 +-
 .../java/profinet/packets/PnDcpPacketFactory.java  |     70 +-
 .../profinet/protocol/ProfinetProtocolLogic.java   |     89 +-
 .../profinet/ManualProfinetIoTestAdam6117PN.java   |     48 +
 .../profinet/ManualProfinetIoTestAdam6150PN.java   |     48 +
 .../java/profinet/ManualProfinetIoTestAdamPN.java  |     45 -
 .../profinet/ManualProfinetIoTestSimocode.java     |     44 -
 .../profinet/ManualProfinetIoTestSimocodePN.java   |     55 +
 .../java/profinet/ManualProfinetIoTestWagoPN.java  |     44 +
 .../ManualProfinetIoTestWagoPNCoupler.java         |     45 -
 .../profinet/ManualProfinetIoTestZylkSimocode.java |      2 +-
 .../GSDML-V2.2-Advantech-ADAM6100-20111216.xml     |    346 +
 .../GSDML-V2.3-SIEMENS-SIMOCODEproVPN-20201104.xml |    873 +
 .../GSDML-V2.33-wago-series750_753-20230115.xml    | 113157 ++++++++++++++++++
 ...GSDML-V2.43-SIEMENS-SIMOCODEproVPN-20220817.xml |   1217 +
 .../src/test/resources/logback-test.xml            |      2 +-
 plc4j/drivers/profinet/.factorypath                |     55 +
 plc4j/drivers/profinet/pom.xml                     |     42 +-
 .../plc4x/java/profinet/readwrite/DataItem.java    |   1332 +-
 .../plc4x/java/profinet/readwrite/LldpUnit.java    |      3 +-
 .../plc4x/java/profinet/readwrite/PnDcp_Block.java |      3 +-
 .../readwrite/PnDcp_Pdu_IdentifyRes_Payload.java   |      3 +-
 .../java/profinet/readwrite/PnIoCm_Block.java      |      3 +-
 .../java/profinet/readwrite/PnIoCm_Submodule.java  |      3 +-
 .../readwrite/TlvOrgSpecificIeee8023Unit.java      |      3 +-
 .../readwrite/TlvOrgSpecificProfibusUnit.java      |      3 +-
 .../apache/plc4x/java/profinet/ProfinetDriver.java |     45 +-
 .../profinet/config/ProfinetConfiguration.java     |     25 +-
 .../profinet/context/ProfinetDeviceContext.java    |      2 +-
 .../plc4x/java/profinet/device/ProfinetDevice.java |     62 +-
 .../java/profinet/ManualProfinetIoAdamTest.java    |     73 +
 .../profinet/ManualProfinetIoSimocodeTest.java     |     76 +
 .../plc4x/java/profinet/ManualProfinetIoTest.java  |     73 -
 .../java/profinet/ManualProfinetPcapTest.java      |    120 +
 plc4j/drivers/s7/.factorypath                      |     49 +
 plc4j/drivers/s7/pom.xml                           |     18 +-
 .../java/s7/readwrite/AlarmMessageAckPushType.java |     22 +-
 .../java/s7/readwrite/AlarmMessagePushType.java    |     22 +-
 .../java/s7/readwrite/AlarmMessageQueryType.java   |     10 +-
 .../java/s7/readwrite/AssociatedValueType.java     |      6 +-
 .../plc4x/java/s7/readwrite/ControllerType.java    |     60 +
 .../apache/plc4x/java/s7/readwrite/DataItem.java   |    943 +-
 .../plc4x/java/s7/readwrite/DateAndTime.java       |    141 +-
 .../s7/readwrite/S7PayloadDiagnosticMessage.java   |    174 +-
 .../S7PayloadUserDataItemClkFResponse.java         |     76 +-
 .../S7PayloadUserDataItemClkResponse.java          |     76 +-
 .../S7PayloadUserDataItemClkSetRequest.java        |     30 +-
 ...rDataItemCpuFunctionMsgSubscriptionRequest.java |     82 +-
 .../plc4x/java/s7/readwrite/TransportSize.java     |    121 +-
 .../apache/plc4x/java/s7/events/S7CyclicEvent.java |    288 +-
 .../apache/plc4x/java/s7/readwrite/S7Driver.java   |     17 +-
 .../readwrite/configuration/S7Configuration.java   |     23 +-
 .../java/s7/readwrite/context/S7DriverContext.java |     12 +-
 .../readwrite/protocol/S7HGeneratedDriverBase.java |     74 +-
 .../plc4x/java/s7/readwrite/protocol/S7HMux.java   |      4 +-
 .../java/s7/readwrite/protocol/S7HMuxImpl.java     |      7 +-
 .../s7/readwrite/protocol/S7HPlcConnection.java    |     33 +-
 .../protocol/S7HSingleProtocolStackConfigurer.java |      6 +-
 .../readwrite/protocol/S7ProtocolEventLogic.java   |     36 +-
 .../s7/readwrite/protocol/S7ProtocolLogic.java     |    277 +-
 .../java/s7/readwrite/tag/S7SubscriptionTag.java   |     37 +-
 .../apache/plc4x/java/s7/readwrite/tag/S7Tag.java  |     14 +-
 .../java/s7/readwrite/types/S7ControllerType.java  |     31 -
 .../readwrite/utils/S7PlcSubscriptionRequest.java  |    363 +
 .../java/s7/readwrite/utils/StaticHelper.java      |    261 +-
 .../s7/src/test/java/BenchmarkGeneratedS7.java     |      2 +-
 .../java/s7/readwrite/ManualS71200DriverTest.java  |    104 +
 .../java/s7/readwrite/ManualS71500DriverTest.java  |     70 +
 .../java/s7/readwrite/ManualS7DriverTest.java      |    119 -
 .../readwrite/tag/S7StringFixedLengthTagTest.java  |      2 +-
 plc4j/drivers/simulated/.factorypath               |     46 +
 plc4j/drivers/simulated/pom.xml                    |     15 +-
 .../plc4x/java/simulated/readwrite/DataItem.java   |   1423 +-
 .../configuration/SimulatedConfiguration.java      |     25 +
 .../connection/SimulatedConnectionTest.java        |     12 +-
 plc4j/examples/hello-ads-telemetry/.factorypath    |     75 +
 plc4j/examples/hello-ads-telemetry/pom.xml         |      6 +-
 plc4j/examples/hello-cloud-azure/.factorypath      |     80 +
 plc4j/examples/hello-cloud-azure/pom.xml           |      8 +-
 plc4j/examples/hello-cloud-google/.factorypath     |     79 +
 plc4j/examples/hello-cloud-google/pom.xml          |      8 +-
 .../examples/hello-connectivity-mqtt/.factorypath  |     83 +
 plc4j/examples/hello-connectivity-mqtt/pom.xml     |      6 +-
 .../examples/connectivity/mqtt/MqttConnector.java  |      2 +-
 plc4j/examples/hello-discovery/.factorypath        |     76 +
 plc4j/examples/hello-discovery/pom.xml             |      6 +-
 .../examples/hellodiscovery/HelloDiscovery.java    |      5 +-
 plc4j/examples/hello-docker/Dockerfile             |      4 +-
 .../hello-influx-data-collection/.factorypath      |     94 +
 .../examples/hello-influx-data-collection/pom.xml  |     10 +-
 .../examples/hello-integration-iotdb/.factorypath  |    100 +
 plc4j/examples/hello-integration-iotdb/pom.xml     |      6 +-
 .../java/examples/integration/iotdb/PlcLogger.java |      2 +-
 plc4j/examples/hello-nats/.factorypath             |     78 +
 plc4j/examples/hello-nats/pom.xml                  |     11 +-
 .../plc4x/java/examples/hellonats/HelloNats.java   |     12 +-
 plc4j/examples/hello-opm/.factorypath              |     80 +
 plc4j/examples/hello-opm/pom.xml                   |      8 +-
 plc4j/examples/hello-webservice/.factorypath       |     80 +
 plc4j/examples/hello-webservice/pom.xml            |      6 +-
 .../examples/hellowebservice/HelloWebservice.java  |      2 +-
 plc4j/examples/hello-world-kotlin/.factorypath     |     75 +
 plc4j/examples/hello-world-kotlin/pom.xml          |     10 +-
 .../java/examples/hellokotlin/ReadModbusPal.kt     |      2 +-
 .../.factorypath                                   |     75 +
 .../hello-world-plc4x-discover-and-browse/pom.xml  |      6 +-
 .../HelloPlc4xDiscoverAndBrowse.java               |      6 +-
 plc4j/examples/hello-world-plc4x-read/.factorypath |     76 +
 plc4j/examples/hello-world-plc4x-read/pom.xml      |      6 +-
 .../examples/helloplc4x/read/HelloPlc4xRead.java   |      2 +-
 .../hello-world-plc4x-subscribe/.factorypath       |     77 +
 plc4j/examples/hello-world-plc4x-subscribe/pom.xml |     13 +-
 .../subscribe/HelloPlc4xSubscription.java          |      2 +-
 .../examples/hello-world-plc4x-write/.factorypath  |     76 +
 plc4j/examples/hello-world-plc4x-write/pom.xml     |      6 +-
 .../examples/helloplc4x/write/HelloPlc4xWrite.java |      2 +-
 plc4j/examples/plc4j-s7event/.factorypath          |     75 +
 plc4j/examples/plc4j-s7event/pom.xml               |      8 +-
 plc4j/examples/poll-loop/.factorypath              |     74 +
 plc4j/examples/poll-loop/pom.xml                   |      8 +-
 .../plc4x/java/examples/pollloop/PollLoop.java     |      2 +-
 plc4j/examples/pom.xml                             |      8 +-
 plc4j/integrations/apache-calcite/.factorypath     |    110 +
 plc4j/integrations/apache-calcite/pom.xml          |     14 +-
 plc4j/integrations/apache-kafka/.factorypath       |     72 +
 plc4j/integrations/apache-kafka/pom.xml            |     12 +-
 .../apache-nifi/nifi-plc4x-nar/.factorypath        |     93 +
 .../apache-nifi/nifi-plc4x-nar/pom.xml             |     10 +-
 .../apache-nifi/nifi-plc4x-processors/.factorypath |     73 +
 .../apache-nifi/nifi-plc4x-processors/pom.xml      |     28 +-
 .../org/apache/plc4x/nifi/Plc4xSinkProcessor.java  |      2 +-
 .../apache/plc4x/nifi/Plc4xSourceProcessor.java    |      2 +-
 .../nifi/subscription/Plc4xListenerDispatcher.java |      2 +-
 plc4j/integrations/apache-nifi/pom.xml             |      8 +-
 plc4j/integrations/plc4j-apache-karaf/pom.xml      |      2 +-
 plc4j/integrations/pom.xml                         |     18 +-
 plc4j/osgi/.factorypath                            |     46 +
 plc4j/osgi/pom.xml                                 |      8 +-
 plc4j/pom.xml                                      |      6 +-
 plc4j/spi/.factorypath                             |     45 +
 plc4j/spi/pom.xml                                  |      6 +-
 .../apache/plc4x/java/spi/ConversationContext.java |     58 +-
 .../apache/plc4x/java/spi/Plc4xNettyWrapper.java   |      5 +-
 .../fields/FieldReaderDiscriminatorEnum.java       |     41 +
 .../spi/codegen/fields/FieldReaderFactory.java     |      4 +
 .../java/spi/configuration/Configuration.java      |     23 -
 .../spi/configuration/ConfigurationFactory.java    |     47 +-
 .../java/spi/configuration/HasConfiguration.java   |      2 +-
 .../java/spi/configuration/PlcConfiguration.java   |     23 +
 .../configuration/PlcConnectionConfiguration.java  |     23 +
 .../configuration/PlcTransportConfiguration.java   |     22 +
 .../spi/configuration/annotations/Description.java |     32 +
 .../java/spi/connection/AbstractPlcConnection.java |     18 +-
 .../connection/CustomProtocolStackConfigurer.java  |     48 +-
 .../spi/connection/DefaultNettyPlcConnection.java  |     28 +-
 .../java/spi/connection/GeneratedDriverBase.java   |    261 +-
 .../spi/connection/ProtocolStackConfigurer.java    |      5 +-
 .../connection/SingleProtocolStackConfigurer.java  |      6 +-
 .../plc4x/java/spi/events/DiscoveredEvent.java     |      9 +-
 .../java/spi/generation/ReadBufferByteBased.java   |    113 +-
 .../java/spi/generation/ReadBufferXmlBased.java    |      3 +-
 .../java/spi/generation/WriteBufferByteBased.java  |     99 +-
 .../spi/internal/DefaultConversationContext.java   |      4 +-
 .../plc4x/java/spi/metadata/DefaultOption.java     |     67 +
 .../java/spi/metadata/DefaultOptionMetadata.java   |     46 +
 .../apache/plc4x/java/spi/transport/Transport.java |      3 +-
 .../java/spi/transport/TransportConfiguration.java |     25 -
 .../TransportConfigurationTypeProvider.java        |     26 -
 .../org/apache/plc4x/java/spi/values/PlcBINT.java  |      5 +
 .../org/apache/plc4x/java/spi/values/PlcBOOL.java  |      5 +
 .../org/apache/plc4x/java/spi/values/PlcBREAL.java |      5 +
 .../org/apache/plc4x/java/spi/values/PlcBYTE.java  |      5 +
 .../org/apache/plc4x/java/spi/values/PlcCHAR.java  |      5 +
 .../org/apache/plc4x/java/spi/values/PlcDATE.java  |      5 +
 .../plc4x/java/spi/values/PlcDATE_AND_LTIME.java   |    141 +
 .../org/apache/plc4x/java/spi/values/PlcDINT.java  |      5 +
 .../org/apache/plc4x/java/spi/values/PlcDWORD.java |      5 +
 .../org/apache/plc4x/java/spi/values/PlcINT.java   |      5 +
 .../org/apache/plc4x/java/spi/values/PlcLDATE.java |      5 +
 .../org/apache/plc4x/java/spi/values/PlcLINT.java  |      5 +
 .../org/apache/plc4x/java/spi/values/PlcLREAL.java |      5 +
 .../plc4x/java/spi/values/PlcLTIME_OF_DAY.java     |      2 +-
 .../org/apache/plc4x/java/spi/values/PlcLWORD.java |      5 +
 .../org/apache/plc4x/java/spi/values/PlcREAL.java  |      5 +
 .../plc4x/java/spi/values/PlcRawByteArray.java     |      9 +-
 .../org/apache/plc4x/java/spi/values/PlcSINT.java  |      7 +-
 .../apache/plc4x/java/spi/values/PlcStruct.java    |      2 +-
 .../org/apache/plc4x/java/spi/values/PlcUBINT.java |      5 +
 .../org/apache/plc4x/java/spi/values/PlcUDINT.java |      5 +
 .../org/apache/plc4x/java/spi/values/PlcUINT.java  |      5 +
 .../org/apache/plc4x/java/spi/values/PlcULINT.java |      5 +
 .../org/apache/plc4x/java/spi/values/PlcUSINT.java |      5 +
 .../plc4x/java/spi/values/PlcValueHandler.java     |     24 +
 .../org/apache/plc4x/java/spi/values/PlcWCHAR.java |      5 +
 .../org/apache/plc4x/java/spi/values/PlcWORD.java  |      5 +
 .../config/TestConfigurationComplex.java           |      5 +-
 .../config/TestConfigurationDefaults.java          |      4 +-
 .../TestConfigurationParameterConverter.java       |      4 +-
 .../config/TestConfigurationRequired.java          |      4 +-
 .../config/TestConfigurationSimple.java            |      4 +-
 .../connection/DefaultNettyPlcConnectionTest.java  |     35 +-
 .../plc4x/java/spi/connection/GateKeeper.java      |      2 +-
 .../java/spi/connection/PlcConnectionFactory.java  |      2 +-
 .../SingleProtocolStackConfigurerTest.java         |      2 +-
 .../java/spi/connection/TestChannelFactory.java    |      2 +-
 .../plc4x/java/spi/connection/TestMessage.java     |      2 +-
 .../plc4x/java/spi/connection/TestProtocol.java    |      2 +-
 .../optimizer/RequestTransactionManagerTest.java   |      2 +-
 .../java/spi/parser/ConnectionParserTest.java      |      4 +-
 plc4j/tools/capture-replay/.factorypath            |     35 +
 plc4j/tools/capture-replay/pom.xml                 |      4 +-
 plc4j/tools/connection-cache/.factorypath          |     30 +
 plc4j/tools/connection-cache/pom.xml               |     10 +-
 .../java/utils/cache/ConnectionContainer.java      |     10 +
 .../java/utils/cache/LeasedPlcConnection.java      |     12 +-
 plc4j/tools/opcua-server/.factorypath              |     83 +
 plc4j/tools/opcua-server/pom.xml                   |     12 +-
 .../opcuaserver/backend/Plc4xCommunication.java    |      4 +-
 plc4j/tools/opm/.factorypath                       |     49 +
 plc4j/tools/opm/pom.xml                            |     10 +-
 .../java/opm/PlcEntityManagerComplexTest.java      |      8 +-
 plc4j/tools/plc4x-server/.factorypath              |     65 +
 plc4j/tools/plc4x-server/pom.xml                   |     14 +-
 plc4j/tools/pom.xml                                |     21 +-
 plc4j/tools/scraper-ng/.factorypath                |     30 +
 plc4j/tools/scraper-ng/pom.xml                     |      8 +-
 plc4j/tools/scraper/.factorypath                   |     38 +
 plc4j/tools/scraper/pom.xml                        |     12 +-
 .../triggeredscraper/TriggeredScraperImpl.java     |     26 +-
 .../triggeredscraper/TriggeredScraperTask.java     |      4 +-
 plc4j/tools/ui/application/.factorypath            |    126 +
 plc4j/tools/ui/application/pom.xml                 |    179 +
 .../java/tools/ui/Plc4xUiBackendApplication.java   |     34 +
 .../src/main/resources/application-dev.properties  |     18 +
 .../src/main/resources/application.properties      |     31 +
 .../ui/application/src/main/resources/logback.xml  |     39 +
 .../tools/ui/Plc4xUiBackendApplicationTests.java   |     34 +
 .../src/test/resources/application-test.properties |     19 +
 plc4j/tools/ui/backend/.factorypath                |    126 +
 plc4j/tools/ui/backend/pom.xml                     |    161 +
 .../tools/ui/configuration/Plc4xConfiguration.java |     34 +
 .../tools/ui/configuration/WebSocketConfig.java    |     43 +
 .../java/tools/ui/controller/DeviceController.java |     64 +
 .../java/tools/ui/controller/DriverController.java |     51 +
 .../plc4x/java/tools/ui/event/DeviceEvent.java     |     30 +
 .../plc4x/java/tools/ui/event/EventType.java       |     28 +
 .../java/tools/ui/event/UiApplicationEvent.java    |     42 +
 .../java/tools/ui/handler/WebSocketHandler.java    |    107 +
 .../java/tools/ui/model/ConfigurationOption.java   |     52 +
 .../apache/plc4x/java/tools/ui/model/Device.java   |    109 +
 .../apache/plc4x/java/tools/ui/model/Driver.java   |     49 +
 .../plc4x/java/tools/ui/model/Transport.java       |     49 +
 .../java/tools/ui/repository/DeviceRepository.java |     30 +
 .../plc4x/java/tools/ui/service/DeviceService.java |     82 +
 .../plc4x/java/tools/ui/service/DriverService.java |    119 +
 plc4j/tools/ui/backend/ws.html                     |     36 +
 plc4j/tools/ui/frontend/.factorypath               |    124 +
 plc4j/tools/ui/frontend/pom.xml                    |    222 +
 plc4j/tools/ui/frontend/project/.eslintrc.cjs      |     37 +
 plc4j/tools/ui/frontend/project/.gitignore         |     25 +
 plc4j/tools/ui/frontend/project/README.md          |     49 +
 plc4j/tools/ui/frontend/project/index.html         |     32 +
 plc4j/tools/ui/frontend/project/package.json       |     51 +
 .../ui/frontend/project/public/plc4x-favicon.png   |    Bin 0 -> 6065 bytes
 plc4j/tools/ui/frontend/project/src/App.css        |     19 +
 plc4j/tools/ui/frontend/project/src/App.tsx        |    106 +
 .../ui/frontend/project/src/assets/plc4x-logo.svg  |   1494 +
 .../tools/ui/frontend/project/src/assets/react.svg |     23 +
 .../project/src/components/DeviceDialog.tsx        |    184 +
 .../project/src/components/NavigationTree.tsx      |    221 +
 .../project/src/components/PlcConnection.tsx       |     45 +
 .../src/generated/plc4j-tools-ui-frontend.ts       |    208 +
 plc4j/tools/ui/frontend/project/src/index.css      |    102 +
 .../ui/frontend/project/src/layouts/MainLayout.tsx |     73 +
 plc4j/tools/ui/frontend/project/src/main.tsx       |     37 +
 .../ui/frontend/project/src/model/TreeItemData.ts  |     37 +
 .../tools/ui/frontend/project/src/pages/About.tsx  |     24 +
 .../ui/frontend/project/src/pages/Inspect.tsx      |    140 +
 plc4j/tools/ui/frontend/project/src/pages/Mqtt.tsx |     24 +
 .../tools/ui/frontend/project/src/pages/OpcUa.tsx  |     24 +
 .../ui/frontend/project/src/pages/Settings.tsx     |     24 +
 plc4j/tools/ui/frontend/project/src/store/index.ts |     91 +
 .../tools/ui/frontend/project/src/utils/Counter.ts |     28 +
 plc4j/tools/ui/frontend/project/src/vite-env.d.ts  |     20 +
 plc4j/tools/ui/frontend/project/tsconfig.json      |     25 +
 plc4j/tools/ui/frontend/project/tsconfig.node.json |     10 +
 plc4j/tools/ui/frontend/project/vite.config.ts     |     26 +
 plc4j/tools/ui/pom.xml                             |    113 +
 plc4j/transports/can/.factorypath                  |     45 +
 plc4j/transports/can/pom.xml                       |      6 +-
 .../plc4x/java/transport/can/CANTransport.java     |      5 +-
 .../transport/can/CANTransportConfiguration.java   |      4 +-
 plc4j/transports/pcap-replay/.factorypath          |     48 +
 plc4j/transports/pcap-replay/pom.xml               |     14 +-
 .../DefaultPcapReplayTransportConfiguration.java   |     10 +
 .../transport/pcapreplay/PcapReplayTransport.java  |      4 +-
 plc4j/transports/pcap-shared/.factorypath          |     48 +
 plc4j/transports/pcap-shared/pom.xml               |      8 +-
 .../pcap/DefaultPcapTransportConfiguration.java    |      3 +
 .../transport/pcap/PcapTransportConfiguration.java |      4 +-
 plc4j/transports/pom.xml                           |      4 +-
 plc4j/transports/raw-socket/.factorypath           |     49 +
 plc4j/transports/raw-socket/pom.xml                |     14 +-
 .../DefaultRawSocketTransportConfiguration.java    |      2 +
 .../transport/rawsocket/RawSocketTransport.java    |      4 +-
 plc4j/transports/serial/.factorypath               |     45 +
 plc4j/transports/serial/pom.xml                    |      8 +-
 .../DefaultSerialTransportConfiguration.java       |     47 +-
 .../java/transport/serial/SerialChannelConfig.java |     18 +-
 .../transport/serial/SerialChannelFactory.java     |      2 +-
 .../transport/serial/SerialChannelHandler.java     |      2 +-
 .../transport/serial/SerialChannelOptions.java     |      6 +-
 .../serial/SerialChannelOptionsParity.java         |     35 +
 .../java/transport/serial/SerialTransport.java     |     20 +-
 .../serial/SerialTransportConfiguration.java       |      6 +-
 plc4j/transports/socketcan/.factorypath            |     46 +
 plc4j/transports/socketcan/pom.xml                 |     14 +-
 .../transport/socketcan/SocketCANTransport.java    |     13 +-
 plc4j/transports/tcp/.factorypath                  |     45 +
 plc4j/transports/tcp/pom.xml                       |      8 +-
 .../tcp/DefaultTcpTransportConfiguration.java      |      4 +
 .../plc4x/java/transport/tcp/TcpTransport.java     |      4 +-
 .../transport/tcp/TcpTransportConfiguration.java   |      4 +-
 plc4j/transports/test/.factorypath                 |     52 +
 plc4j/transports/test/pom.xml                      |      6 +-
 .../plc4x/java/transport/test/TestTransport.java   |      6 +
 .../transport/test/TestTransportConfiguration.java |      4 +-
 plc4j/transports/udp/.factorypath                  |     45 +
 plc4j/transports/udp/pom.xml                       |      8 +-
 .../udp/DefaultUdpTransportConfiguration.java      |      4 +
 .../plc4x/java/transport/udp/UdpTransport.java     |      4 +-
 .../transport/udp/UdpTransportConfiguration.java   |      4 +-
 plc4j/transports/virtualcan/.factorypath           |     45 +
 plc4j/transports/virtualcan/pom.xml                |     12 +-
 .../java/transport/virtualcan/VirtualCANFrame.java |     37 +-
 .../transport/virtualcan/VirtualCANTransport.java  |     17 +-
 .../transport/virtualcan/io/VirtualCANFrameIO.java |     43 -
 plc4j/utils/pcap-replay/.factorypath               |     39 +
 plc4j/utils/pcap-replay/pom.xml                    |      6 +-
 plc4j/utils/pcap-shared/.factorypath               |     38 +
 plc4j/utils/pcap-shared/pom.xml                    |      4 +-
 plc4j/utils/plc-simulator/.factorypath             |     56 +
 plc4j/utils/plc-simulator/pom.xml                  |     14 +-
 plc4j/utils/pom.xml                                |      4 +-
 plc4j/utils/raw-sockets/.factorypath               |     40 +
 plc4j/utils/raw-sockets/pom.xml                    |      8 +-
 plc4j/utils/test-generator/.factorypath            |     58 +
 plc4j/utils/test-generator/pom.xml                 |     14 +-
 plc4j/utils/test-utils/.factorypath                |     56 +
 plc4j/utils/test-utils/pom.xml                     |     10 +-
 .../apache/plc4x/test/DisableOnJenkinsFlag.java    |     37 +
 .../plc4x/test/DisableOnJenkinsFlagCondition.java  |     42 +
 .../plc4x/test/driver/internal/TestStep.java       |      5 +-
 .../internal/handlers/ApiRequestHandler.java       |    144 +-
 .../handlers/IncomingPlcMessageHandler.java        |      7 +-
 .../org/apache/plc4x/test/manual/ManualTest.java   |     13 +-
 .../migration/MessageValidatorAndMigrator.java     |      9 +-
 plc4net/api/pom.xml                                |     71 -
 .../knxnetip/readwrite/model/KnxManufacturer.cs    |    111 +-
 .../knxnetip/readwrite/model/KnxProperty.cs        |     88 +-
 plc4net/pom.xml                                    |     10 +-
 {sandbox/plc4py => plc4py}/.gitignore              |      0
 {sandbox/plc4py => plc4py}/.pre-commit-config.yaml |      0
 plc4py/plc4py/PlcDriverManager.py                  |    103 +
 {sandbox/plc4py => plc4py}/plc4py/__init__.py      |      0
 plc4py/plc4py/api/PlcConnection.py                 |    119 +
 {sandbox/plc4py => plc4py}/plc4py/api/PlcDriver.py |      0
 {sandbox/plc4py => plc4py}/plc4py/api/__init__.py  |      0
 .../plc4py/api/authentication/PlcAuthentication.py |      0
 .../plc4py/api/authentication/__init__.py          |      0
 .../plc4py/api/exceptions/__init__.py              |      0
 plc4py/plc4py/api/exceptions/exceptions.py         |     51 +
 .../plc4py/api/listener/__init__.py                |      0
 .../plc4py/api/messages/PlcDiscovery.py            |      0
 .../plc4py/api/messages/PlcField.py                |      0
 plc4py/plc4py/api/messages/PlcMessage.py           |     23 +
 plc4py/plc4py/api/messages/PlcRequest.py           |    104 +
 plc4py/plc4py/api/messages/PlcResponse.py          |     88 +
 .../plc4py/api/messages/__init__.py                |      0
 plc4py/plc4py/api/value/PlcValue.py                |     67 +
 .../plc4py => plc4py}/plc4py/api/value/__init__.py |      0
 plc4py/plc4py/drivers/PlcDriverLoader.py           |     45 +
 .../plc4py => plc4py}/plc4py/drivers/__init__.py   |      0
 plc4py/plc4py/drivers/mock/MockConnection.py       |    232 +
 .../plc4py/drivers/mock/MockReadRequestBuilder.py  |      0
 .../plc4py/drivers/mock/MockTag.py                 |      0
 .../plc4py/drivers/mock/__init__.py                |      0
 .../plc4py/drivers/modbus/ModbusConfiguration.py   |     37 +
 plc4py/plc4py/drivers/modbus/ModbusConnection.py   |    228 +
 plc4py/plc4py/drivers/modbus/ModbusDevice.py       |    161 +
 .../plc4py/drivers/modbus/ModbusProtocol.py        |      0
 .../plc4py/drivers/modbus/ModbusTag.py             |      0
 .../plc4py/drivers/modbus/__init__.py              |      0
 plc4py/plc4py/drivers/umas/UmasConfiguration.py    |     38 +
 plc4py/plc4py/drivers/umas/UmasConnection.py       |    290 +
 plc4py/plc4py/drivers/umas/UmasDevice.py           |    465 +
 plc4py/plc4py/drivers/umas/UmasProtocol.py         |    101 +
 plc4py/plc4py/drivers/umas/UmasTag.py              |     79 +
 plc4py/plc4py/drivers/umas/UmasVariables.py        |    212 +
 .../plc4py/drivers/umas}/__init__.py               |      0
 .../modbus => plc4py/plc4py/protocols}/__init__.py |      0
 .../plc4py/protocols/modbus/StaticHelper.py        |      0
 .../plc4py/protocols/modbus}/__init__.py           |      0
 .../plc4py/protocols/modbus/readwrite/DataItem.py  |    654 +
 .../protocols/modbus/readwrite/DriverType.py       |     28 +
 .../plc4py/protocols/modbus/readwrite/ModbusADU.py |    169 +
 .../protocols/modbus/readwrite/ModbusAsciiADU.py   |    155 +
 .../protocols/modbus/readwrite/ModbusConstants.py  |      0
 .../protocols/modbus/readwrite/ModbusDataType.py   |      0
 .../ModbusDeviceInformationConformityLevel.py      |     28 +
 .../readwrite/ModbusDeviceInformationLevel.py      |     29 +
 .../ModbusDeviceInformationMoreFollows.py          |     27 +
 .../readwrite/ModbusDeviceInformationObject.py     |    121 +
 .../protocols/modbus/readwrite/ModbusErrorCode.py  |     35 +
 .../plc4py/protocols/modbus/readwrite/ModbusPDU.py |    676 +
 .../modbus/readwrite/ModbusPDUDiagnosticRequest.py |    125 +
 .../readwrite/ModbusPDUDiagnosticResponse.py       |    125 +
 .../protocols/modbus/readwrite/ModbusPDUError.py   |    114 +
 .../ModbusPDUGetComEventCounterRequest.py          |     94 +
 .../ModbusPDUGetComEventCounterResponse.py         |    129 +
 .../readwrite/ModbusPDUGetComEventLogRequest.py    |     94 +
 .../readwrite/ModbusPDUGetComEventLogResponse.py   |    176 +
 .../ModbusPDUMaskWriteHoldingRegisterRequest.py    |    148 +
 .../ModbusPDUMaskWriteHoldingRegisterResponse.py   |    148 +
 .../modbus/readwrite/ModbusPDUReadCoilsRequest.py  |    127 +
 .../modbus/readwrite/ModbusPDUReadCoilsResponse.py |    123 +
 .../ModbusPDUReadDeviceIdentificationRequest.py    |    144 +
 .../ModbusPDUReadDeviceIdentificationResponse.py   |    251 +
 .../ModbusPDUReadDiscreteInputsRequest.py          |    127 +
 .../ModbusPDUReadDiscreteInputsResponse.py         |    125 +
 .../ModbusPDUReadExceptionStatusRequest.py         |     96 +
 .../ModbusPDUReadExceptionStatusResponse.py        |    108 +
 .../readwrite/ModbusPDUReadFifoQueueRequest.py     |    112 +
 .../readwrite/ModbusPDUReadFifoQueueResponse.py    |    136 +
 .../readwrite/ModbusPDUReadFileRecordRequest.py    |    128 +
 .../ModbusPDUReadFileRecordRequestItem.py          |    143 +
 .../readwrite/ModbusPDUReadFileRecordResponse.py   |    128 +
 .../ModbusPDUReadFileRecordResponseItem.py         |    127 +
 .../ModbusPDUReadHoldingRegistersRequest.py        |    129 +
 .../ModbusPDUReadHoldingRegistersResponse.py       |    125 +
 .../ModbusPDUReadInputRegistersRequest.py          |    127 +
 .../ModbusPDUReadInputRegistersResponse.py         |    125 +
 ...sPDUReadWriteMultipleHoldingRegistersRequest.py |    205 +
 ...PDUReadWriteMultipleHoldingRegistersResponse.py |    125 +
 .../readwrite/ModbusPDUReportServerIdRequest.py    |     94 +
 .../readwrite/ModbusPDUReportServerIdResponse.py   |    123 +
 .../readwrite/ModbusPDUWriteFileRecordRequest.py   |    128 +
 .../ModbusPDUWriteFileRecordRequestItem.py         |    159 +
 .../readwrite/ModbusPDUWriteFileRecordResponse.py  |    128 +
 .../ModbusPDUWriteFileRecordResponseItem.py        |    159 +
 .../ModbusPDUWriteMultipleCoilsRequest.py          |    161 +
 .../ModbusPDUWriteMultipleCoilsResponse.py         |    129 +
 ...odbusPDUWriteMultipleHoldingRegistersRequest.py |    163 +
 ...dbusPDUWriteMultipleHoldingRegistersResponse.py |    133 +
 .../readwrite/ModbusPDUWriteSingleCoilRequest.py   |    127 +
 .../readwrite/ModbusPDUWriteSingleCoilResponse.py  |    127 +
 .../ModbusPDUWriteSingleRegisterRequest.py         |    129 +
 .../ModbusPDUWriteSingleRegisterResponse.py        |    129 +
 .../protocols/modbus/readwrite/ModbusRtuADU.py     |    153 +
 .../protocols/modbus/readwrite/ModbusTcpADU.py     |    190 +
 .../plc4py/protocols/modbus/readwrite}/__init__.py |      0
 .../protocols/simulated/readwrite/DataItem.py      |    680 +
 .../plc4py/protocols/simulated/readwrite/Dummy.py  |     95 +
 .../simulated/readwrite/SimulatedDataTypeSizes.py  |      0
 plc4py/plc4py/protocols/umas/StaticHelper.py       |    141 +
 .../plc4py/protocols/umas}/__init__.py             |      0
 plc4py/plc4py/protocols/umas/readwrite/DataItem.py |    384 +
 .../protocols/umas/readwrite/ModbusErrorCode.py    |     35 +
 .../plc4py/protocols/umas/readwrite/ModbusPDU.py   |    200 +
 .../protocols/umas/readwrite/ModbusPDUError.py     |    123 +
 .../protocols/umas/readwrite/ModbusTcpADU.py       |    160 +
 .../umas/readwrite/PlcMemoryBlockIdent.py          |    137 +
 .../protocols/umas/readwrite/UmasConstants.py      |     94 +
 .../protocols/umas/readwrite/UmasDataType.py       |     50 +
 .../umas/readwrite/UmasDatatypeReference.py        |    175 +
 .../UmasDeviceInformationConformityLevel.py        |     28 +
 .../umas/readwrite/UmasDeviceInformationLevel.py   |     29 +
 .../readwrite/UmasDeviceInformationMoreFollows.py  |     27 +
 .../umas/readwrite/UmasInitCommsRequest.py         |    118 +
 .../umas/readwrite/UmasInitCommsResponse.py        |    225 +
 .../protocols/umas/readwrite/UmasMemoryBlock.py    |    161 +
 .../umas/readwrite/UmasMemoryBlockBasicInfo.py     |    165 +
 plc4py/plc4py/protocols/umas/readwrite/UmasPDU.py  |    114 +
 .../plc4py/protocols/umas/readwrite/UmasPDUItem.py |    314 +
 .../umas/readwrite/UmasPDUPlcIdentRequest.py       |     96 +
 .../umas/readwrite/UmasPDUPlcIdentResponse.py      |    378 +
 .../umas/readwrite/UmasPDUPlcStatusRequest.py      |     96 +
 .../umas/readwrite/UmasPDUPlcStatusResponse.py     |    188 +
 .../umas/readwrite/UmasPDUProjectInfoRequest.py    |    114 +
 .../readwrite/UmasPDUReadDatatypeNamesResponse.py  |    158 +
 .../readwrite/UmasPDUReadMemoryBlockRequest.py     |    202 +
 .../readwrite/UmasPDUReadMemoryBlockResponse.py    |    160 +
 .../UmasPDUReadUmasUDTDefinitionResponse.py        |    146 +
 .../readwrite/UmasPDUReadUnlocatedVariableNames.py |    153 +
 .../UmasPDUReadUnlocatedVariableNamesRequest.py    |    220 +
 .../UmasPDUReadUnlocatedVariableNamesResponse.py   |    164 +
 .../UmasPDUReadUnlocatedVariableResponse.py        |    122 +
 .../umas/readwrite/UmasPDUReadVariableRequest.py   |    162 +
 .../umas/readwrite/UmasPDUReadVariableResponse.py  |    118 +
 .../protocols/umas/readwrite/UmasUDTDefinition.py  |    159 +
 .../readwrite/UmasUnlocatedVariableReference.py    |    212 +
 .../protocols/umas/readwrite/UmasVariableBlock.py  |    148 +
 .../umas/readwrite/VariableRequestReference.py     |    182 +
 .../plc4py/protocols/umas/readwrite}/__init__.py   |      0
 plc4py/plc4py/spi/Plc4xBaseProtocol.py             |     38 +
 .../plc4py/spi/PlcDriverClassLoader.py             |      0
 .../spi/context => plc4py/plc4py/spi}/__init__.py  |      0
 .../plc4py/spi/configuration/PlcConfiguration.py   |      0
 .../plc4py/spi/configuration}/__init__.py          |      0
 .../plc4py/spi/connection/ProtocolStack.py         |      0
 .../plc4py/spi/connection}/__init__.py             |      0
 .../plc4py/spi/context/DriverContext.py            |      0
 .../plc4py/spi/context}/__init__.py                |      0
 plc4py/plc4py/spi/generation/ReadBuffer.py         |    425 +
 plc4py/plc4py/spi/generation/WriteBuffer.py        |    577 +
 .../plc4py/spi/generation/__init__.py              |      0
 .../plc4py/spi/messages/ChannelMessage.py          |      0
 .../plc4py/spi/messages/PlcReader.py               |      0
 plc4py/plc4py/spi/messages/PlcRequest.py           |     81 +
 plc4py/plc4py/spi/messages/PlcWriter.py            |     37 +
 .../plc4py/spi/messages}/__init__.py               |      0
 plc4py/plc4py/spi/messages/utils/ResponseItem.py   |     32 +
 .../plc4py/spi/messages}/utils/__init__.py         |      0
 .../plc4py/spi/transport/Plc4xBaseTransport.py     |      0
 .../plc4py/spi/transport/TCPTransport.py           |      0
 .../plc4py/spi/transport}/__init__.py              |      0
 plc4py/plc4py/spi/values/Common.py                 |     30 +
 .../plc4py/spi/values/PlcValues.py                 |      0
 .../unit => plc4py/plc4py/spi/values}/__init__.py  |      0
 .../plc4py/utils/ConnectionStringHandling.py       |      0
 .../plc4py => plc4py}/plc4py/utils/GenericTypes.py |      0
 .../plc4py => plc4py/plc4py/utils}/__init__.py     |      0
 plc4py/pom.xml                                     |    318 +
 plc4py/pytest.ini                                  |     21 +
 plc4py/requirements.txt                            |     54 +
 {sandbox/plc4py => plc4py}/setup.cfg               |      0
 plc4py/setup.py                                    |     68 +
 .../unit/plc4py/api => plc4py/tests}/__init__.py   |      0
 plc4py/tests/test_plc4py.py                        |     72 +
 .../drivers => plc4py/tests/unit}/__init__.py      |      0
 .../tests/unit/plc4py}/__init__.py                 |      0
 .../tests/unit/plc4py/api}/__init__.py             |      0
 plc4py/tests/unit/plc4py/api/test_PlcRequest.py    |    167 +
 .../tests/unit/plc4py/drivers}/__init__.py         |      0
 .../tests/unit/plc4py/drivers/modbus}/__init__.py  |      0
 .../plc4py/drivers/modbus/test_modbus_codegen.py   |     59 +
 .../drivers/modbus/test_modbus_connection.py       |     70 +
 .../tests/unit/plc4py/drivers/umas}/__init__.py    |      0
 .../plc4py/drivers/umas/test_umas_connection.py    |     66 +
 .../tests/unit/plc4py/spi}/__init__.py             |      0
 .../unit/plc4py/spi/configuration}/__init__.py     |      0
 .../plc4py/spi/configuration/test_configuration.py |      0
 .../tests/unit/plc4py/spi/tcp}/__init__.py         |      0
 plc4py/tests/unit/plc4py/spi/tcp/server.py         |     47 +
 plc4py/tests/unit/plc4py/spi/test_protocol.py      |     65 +
 plc4py/tests/unit/plc4py/spi/test_read_buffer.py   |    153 +
 plc4py/tests/unit/plc4py/spi/test_transport.py     |     92 +
 plc4py/tests/unit/plc4py/spi/test_write_buffer.py  |    285 +
 pom.xml                                            |    147 +-
 protocols/ab-eth/.factorypath                      |     34 +
 protocols/ab-eth/pom.xml                           |      6 +-
 protocols/ads/.factorypath                         |     34 +
 protocols/ads/pom.xml                              |      6 +-
 .../resources/protocols/ads/DriverTestsuite.xml    |   1404 +-
 protocols/bacnetip/.factorypath                    |     34 +
 protocols/bacnetip/pom.xml                         |      6 +-
 .../protocols/bacnetip/bacnet-vendorids.mspec      |     11 +-
 protocols/c-bus/.factorypath                       |     34 +
 protocols/c-bus/pom.xml                            |      6 +-
 protocols/canopen/.factorypath                     |     34 +
 protocols/canopen/pom.xml                          |      6 +-
 .../src/main/resources/protocols/can/canopen.mspec |      6 +-
 protocols/df1/.factorypath                         |     34 +
 protocols/df1/pom.xml                              |      6 +-
 protocols/eip/.factorypath                         |     34 +
 protocols/eip/pom.xml                              |      6 +-
 protocols/firmata/.factorypath                     |     34 +
 protocols/firmata/pom.xml                          |      6 +-
 protocols/genericcan/.factorypath                  |     34 +
 protocols/genericcan/pom.xml                       |      6 +-
 .../main/resources/protocols/can/genericcan.mspec  |      6 +-
 protocols/iec-60870/.factorypath                   |     34 +
 protocols/iec-60870/pom.xml                        |      6 +-
 protocols/knxnetip/.factorypath                    |     35 +
 protocols/knxnetip/pom.xml                         |      6 +-
 .../protocols/knxnetip/knx-master-data.mspec       |   1029 +-
 .../resources/protocols/knxnetip/knxnetip.mspec    |     14 +-
 protocols/knxnetip/src/main/xslt/knx-types.xsl     |     24 +-
 protocols/modbus/.factorypath                      |     34 +
 protocols/modbus/pom.xml                           |      6 +-
 .../protocols/modbus/tcp/Modbus-all-datatypes.xml  |   3404 +
 protocols/mqtt/.factorypath                        |     34 +
 protocols/mqtt/pom.xml                             |      6 +-
 protocols/opcua/.factorypath                       |     62 +
 protocols/opcua/pom.xml                            |      6 +-
 .../generated/protocols/opcua/opc-manual.mspec     |    167 +-
 protocols/opcua/src/main/xslt/opc-manual.xsl       |    167 +-
 .../resources/protocols/opcua/DriverTestsuite.xml  |     48 +-
 protocols/open-protocol/.factorypath               |     35 +
 protocols/open-protocol/pom.xml                    |      6 +-
 protocols/plc4x-api/.factorypath                   |     34 +
 protocols/plc4x-api/pom.xml                        |      6 +-
 protocols/plc4x/.factorypath                       |     34 +
 protocols/plc4x/pom.xml                            |      6 +-
 .../main/resources/protocols/plc4x/v0/plc4x.mspec  |      2 +-
 .../protocols/plc4x/ParserSerializerTestsuite.xml  |      2 +-
 protocols/pom.xml                                  |      5 +-
 protocols/profinet/.factorypath                    |     34 +
 protocols/profinet/pom.xml                         |      6 +-
 protocols/s7/.factorypath                          |     34 +
 protocols/s7/pom.xml                               |      6 +-
 .../s7/src/main/resources/protocols/s7/s7.mspec    |    210 +-
 protocols/simulated/.factorypath                   |     34 +
 protocols/simulated/pom.xml                        |      6 +-
 protocols/socketcan/.factorypath                   |     34 +
 protocols/socketcan/pom.xml                        |      6 +-
 protocols/umas/.factorypath                        |     34 +
 protocols/umas/pom.xml                             |     53 +
 .../apache/plc4x/protocol/umas/UmasProtocol.java   |     42 +
 ...e.plc4x.plugins.codegenerator.protocol.Protocol |     19 +
 .../src/main/resources/protocols/umas/umas.mspec   |    340 +
 .../plc4x/protocol/umas/UmasProtocolTest.java      |     37 +
 .../umas}/src/test/resources/logback-test.xml      |      0
 reactors/all-drivers/pom.xml                       |      4 +-
 sandbox/.gitignore                                 |      1 -
 sandbox/discovery/pom.xml                          |     52 -
 .../plc4x/java/discovery/DiscoveryConnection.java  |    186 -
 .../plc4x/java/discovery/DiscoveryDriver.java      |     52 -
 .../plc4x/java/discovery/DiscoveryTagHandler.java  |     39 -
 .../services/org.apache.plc4x.java.api.PlcDriver   |     19 -
 sandbox/plc4py/plc4py/PlcDriverManager.py          |    103 -
 sandbox/plc4py/plc4py/api/PlcConnection.py         |     77 -
 sandbox/plc4py/plc4py/api/exceptions/exceptions.py |     47 -
 sandbox/plc4py/plc4py/api/messages/PlcMessage.py   |     22 -
 sandbox/plc4py/plc4py/api/messages/PlcRequest.py   |     57 -
 sandbox/plc4py/plc4py/api/messages/PlcResponse.py  |     72 -
 sandbox/plc4py/plc4py/api/value/PlcValue.py        |     62 -
 sandbox/plc4py/plc4py/drivers/PlcDriverLoader.py   |     45 -
 .../plc4py/plc4py/drivers/mock/MockConnection.py   |    174 -
 .../plc4py/drivers/modbus/ModbusConfiguration.py   |     33 -
 .../plc4py/drivers/modbus/ModbusConnection.py      |    150 -
 .../plc4py/plc4py/drivers/modbus/ModbusDevice.py   |    152 -
 .../plc4py/protocols/modbus/readwrite/DataItem.py  |    632 -
 .../protocols/modbus/readwrite/DriverType.py       |     27 -
 .../plc4py/protocols/modbus/readwrite/ModbusADU.py |    165 -
 .../protocols/modbus/readwrite/ModbusAsciiADU.py   |    153 -
 .../ModbusDeviceInformationConformityLevel.py      |     27 -
 .../readwrite/ModbusDeviceInformationLevel.py      |     28 -
 .../ModbusDeviceInformationMoreFollows.py          |     26 -
 .../readwrite/ModbusDeviceInformationObject.py     |    119 -
 .../protocols/modbus/readwrite/ModbusErrorCode.py  |     34 -
 .../plc4py/protocols/modbus/readwrite/ModbusPDU.py |    643 -
 .../modbus/readwrite/ModbusPDUDiagnosticRequest.py |    123 -
 .../readwrite/ModbusPDUDiagnosticResponse.py       |    123 -
 .../protocols/modbus/readwrite/ModbusPDUError.py   |    114 -
 .../ModbusPDUGetComEventCounterRequest.py          |     93 -
 .../ModbusPDUGetComEventCounterResponse.py         |    125 -
 .../readwrite/ModbusPDUGetComEventLogRequest.py    |     93 -
 .../readwrite/ModbusPDUGetComEventLogResponse.py   |    172 -
 .../ModbusPDUMaskWriteHoldingRegisterRequest.py    |    142 -
 .../ModbusPDUMaskWriteHoldingRegisterResponse.py   |    142 -
 .../modbus/readwrite/ModbusPDUReadCoilsRequest.py  |    125 -
 .../modbus/readwrite/ModbusPDUReadCoilsResponse.py |    123 -
 .../ModbusPDUReadDeviceIdentificationRequest.py    |    142 -
 .../ModbusPDUReadDeviceIdentificationResponse.py   |    247 -
 .../ModbusPDUReadDiscreteInputsRequest.py          |    125 -
 .../ModbusPDUReadDiscreteInputsResponse.py         |    125 -
 .../ModbusPDUReadExceptionStatusRequest.py         |     95 -
 .../ModbusPDUReadExceptionStatusResponse.py        |    108 -
 .../readwrite/ModbusPDUReadFifoQueueRequest.py     |    112 -
 .../readwrite/ModbusPDUReadFifoQueueResponse.py    |    136 -
 .../readwrite/ModbusPDUReadFileRecordRequest.py    |    128 -
 .../ModbusPDUReadFileRecordRequestItem.py          |    139 -
 .../readwrite/ModbusPDUReadFileRecordResponse.py   |    128 -
 .../ModbusPDUReadFileRecordResponseItem.py         |    127 -
 .../ModbusPDUReadHoldingRegistersRequest.py        |    127 -
 .../ModbusPDUReadHoldingRegistersResponse.py       |    125 -
 .../ModbusPDUReadInputRegistersRequest.py          |    125 -
 .../ModbusPDUReadInputRegistersResponse.py         |    125 -
 ...sPDUReadWriteMultipleHoldingRegistersRequest.py |    199 -
 ...PDUReadWriteMultipleHoldingRegistersResponse.py |    125 -
 .../readwrite/ModbusPDUReportServerIdRequest.py    |     93 -
 .../readwrite/ModbusPDUReportServerIdResponse.py   |    123 -
 .../readwrite/ModbusPDUWriteFileRecordRequest.py   |    128 -
 .../ModbusPDUWriteFileRecordRequestItem.py         |    155 -
 .../readwrite/ModbusPDUWriteFileRecordResponse.py  |    128 -
 .../ModbusPDUWriteFileRecordResponseItem.py        |    155 -
 .../ModbusPDUWriteMultipleCoilsRequest.py          |    159 -
 .../ModbusPDUWriteMultipleCoilsResponse.py         |    127 -
 ...odbusPDUWriteMultipleHoldingRegistersRequest.py |    159 -
 ...dbusPDUWriteMultipleHoldingRegistersResponse.py |    129 -
 .../readwrite/ModbusPDUWriteSingleCoilRequest.py   |    123 -
 .../readwrite/ModbusPDUWriteSingleCoilResponse.py  |    123 -
 .../ModbusPDUWriteSingleRegisterRequest.py         |    125 -
 .../ModbusPDUWriteSingleRegisterResponse.py        |    125 -
 .../protocols/modbus/readwrite/ModbusRtuADU.py     |    151 -
 .../protocols/modbus/readwrite/ModbusTcpADU.py     |    188 -
 .../protocols/simulated/readwrite/DataItem.py      |    658 -
 .../plc4py/protocols/simulated/readwrite/Dummy.py  |     93 -
 sandbox/plc4py/plc4py/spi/Plc4xBaseProtocol.py     |     38 -
 sandbox/plc4py/plc4py/spi/generation/ReadBuffer.py |    376 -
 .../plc4py/plc4py/spi/generation/WriteBuffer.py    |    320 -
 sandbox/plc4py/plc4py/spi/messages/PlcRequest.py   |     43 -
 .../plc4py/spi/messages/utils/ResponseItem.py      |     32 -
 sandbox/plc4py/plc4py/spi/values/Common.py         |     25 -
 sandbox/plc4py/pom.xml                             |    297 -
 sandbox/plc4py/setup.py                            |     65 -
 sandbox/plc4py/tests/test_plc4py.py                |     66 -
 .../tests/unit/plc4py/api/test_PlcRequest.py       |    167 -
 .../plc4py/drivers/modbus/test_modbus_codegen.py   |     55 -
 .../drivers/modbus/test_modbus_connection.py       |     41 -
 sandbox/plc4py/tests/unit/plc4py/spi/tcp/server.py |     48 -
 .../plc4py/tests/unit/plc4py/spi/test_protocol.py  |     64 -
 .../tests/unit/plc4py/spi/test_read_buffer.py      |    151 -
 .../plc4py/tests/unit/plc4py/spi/test_transport.py |     90 -
 .../tests/unit/plc4py/spi/test_write_buffer.py     |    285 -
 sandbox/pom.xml                                    |     78 -
 sandbox/test-java-df1-driver/README.adoc           |     35 -
 sandbox/test-java-df1-driver/pom.xml               |    180 -
 .../plc4x/java/df1/readwrite/DF1Command.java       |    181 -
 .../apache/plc4x/java/df1/readwrite/DF1Symbol.java |    182 -
 .../java/df1/readwrite/DF1SymbolMessageFrame.java  |    269 -
 .../df1/readwrite/DF1SymbolMessageFrameACK.java    |    120 -
 .../df1/readwrite/DF1SymbolMessageFrameNAK.java    |    120 -
 .../df1/readwrite/DF1UnprotectedReadRequest.java   |    159 -
 .../df1/readwrite/DF1UnprotectedReadResponse.java  |    156 -
 .../org/apache/plc4x/java/df1/DF1PlcDriver.java    |     70 -
 .../java/df1/configuration/Df1Configuration.java   |     48 -
 .../org/apache/plc4x/java/df1/field/Df1Tag.java    |     82 -
 .../apache/plc4x/java/df1/field/Df1TagHandler.java |     38 -
 .../plc4x/java/df1/protocol/Df1Protocol.java       |    157 -
 .../plc4x/java/df1/protocol/Df1ProtocolLogic.java  |     43 -
 .../plc4x/java/df1/protocol/Plc4XDf1Protocol.java  |    172 -
 .../java/df1/readwrite/utils/StaticHelper.java     |     95 -
 .../org/apache/plc4x/java/df1/types/DataType.java  |     52 -
 .../services/org.apache.plc4x.java.api.PlcDriver   |     19 -
 .../plc4x/protocol/df1/BenchmarkGeneratedDf1.java  |     75 -
 .../plc4x/protocol/df1/BenchmarkManualDf1.java     |    238 -
 .../protocol/df1/Df1ParserSerializerTest.java      |     31 -
 .../apache/plc4x/protocol/df1/EndToEndTest.java    |     50 -
 src/main/script/prerequisiteCheck.groovy           |      7 +-
 src/site/asciidoc/developers/building.adoc         |     54 +-
 src/site/asciidoc/developers/code-gen/index.adoc   |    111 +-
 .../developers/code-gen/protocol/mspec.adoc        |    263 +-
 .../asciidoc/developers/infrastructure/ci.adoc     |     41 +-
 .../asciidoc/developers/infrastructure/issues.adoc |      4 +-
 .../asciidoc/developers/infrastructure/vm.adoc     |      2 +-
 .../asciidoc/developers/infrastructure/vpn.adoc    |    189 -
 src/site/asciidoc/developers/maturity.adoc         |     14 +-
 src/site/asciidoc/developers/release/release.adoc  |     18 +-
 .../asciidoc/developers/release/validation.adoc    |      1 -
 src/site/asciidoc/developers/team.adoc             |     36 +-
 src/site/asciidoc/images/users/protocols/.png      |    Bin 2331 -> 0 bytes
 src/site/asciidoc/index.adoc                       |     31 +-
 src/site/asciidoc/users/download.adoc              |     60 +-
 .../users/getting-started/general-concepts.adoc    |     47 +-
 src/site/asciidoc/users/getting-started/index.adoc |     28 +
 src/site/asciidoc/users/getting-started/plc4c.adoc |     18 +
 .../asciidoc/users/getting-started/plc4cs.adoc     |     18 +
 .../asciidoc/users/getting-started/plc4go.adoc     |      2 +-
 src/site/asciidoc/users/getting-started/plc4j.adoc |     14 +-
 .../asciidoc/users/getting-started/plc4py.adoc     |    208 +
 .../users/getting-started/virtual-modbus.adoc      |     49 +-
 src/site/asciidoc/users/gettingstarted.adoc        |     28 -
 src/site/asciidoc/users/index.adoc                 |    121 +-
 .../users/integrations/apache-streampipes.adoc     |      4 +
 src/site/asciidoc/users/issues.adoc                |     24 +
 src/site/asciidoc/users/protocols/ab-eth.adoc      |      4 +
 src/site/asciidoc/users/protocols/ads.adoc         |     48 +-
 src/site/asciidoc/users/protocols/bacnet.adoc      |     52 +
 src/site/asciidoc/users/protocols/bacnetip.adoc    |     99 -
 src/site/asciidoc/users/protocols/c-bus.adoc       |     24 +
 src/site/asciidoc/users/protocols/can.adoc         |      1 +
 src/site/asciidoc/users/protocols/canopen.adoc     |     41 +-
 src/site/asciidoc/users/protocols/ctrlx.adoc       |     24 +
 src/site/asciidoc/users/protocols/eip.adoc         |     58 +
 src/site/asciidoc/users/protocols/ethernet-ip.adoc |     98 -
 src/site/asciidoc/users/protocols/firmata.adoc     |     29 +-
 src/site/asciidoc/users/protocols/genericcan.adoc  |     31 +-
 src/site/asciidoc/users/protocols/iec-60870.adoc   |     24 +
 src/site/asciidoc/users/protocols/index.adoc       |    286 +-
 src/site/asciidoc/users/protocols/knxnetip.adoc    |     78 +-
 src/site/asciidoc/users/protocols/logix.adoc       |     53 +-
 src/site/asciidoc/users/protocols/modbus.adoc      |     45 +-
 src/site/asciidoc/users/protocols/opc-ua.adoc      |    171 -
 src/site/asciidoc/users/protocols/opcua.adoc       |    175 +
 .../asciidoc/users/protocols/open-protocol.adoc    |     24 +
 src/site/asciidoc/users/protocols/plc4x.adoc       |     32 +-
 src/site/asciidoc/users/protocols/profinet.adoc    |     53 +-
 src/site/asciidoc/users/protocols/s7.adoc          |    128 +-
 src/site/asciidoc/users/protocols/simulated.adoc   |     24 +-
 src/site/asciidoc/users/tools/capture-replay.adoc  |      3 +
 .../asciidoc/users/tools/connection-cache.adoc     |    130 +-
 src/site/asciidoc/users/tools/scraper.adoc         |     18 +-
 src/site/asciidoc/users/tools/testing.adoc         |     34 +-
 src/site/asciidoc/users/transports/can.adoc        |      1 +
 .../asciidoc/users/transports/pcap-replay.adoc     |      1 +
 src/site/asciidoc/users/transports/raw-socket.adoc |      1 +
 src/site/asciidoc/users/transports/serial.adoc     |      1 +
 src/site/asciidoc/users/transports/socketcan.adoc  |      1 +
 src/site/asciidoc/users/transports/tcp.adoc        |      1 +
 src/site/asciidoc/users/transports/udp.adoc        |      1 +
 src/site/resources-filtered/plc4x-doap.rdf         |      9 +-
 .../images/integrations/apache_edgent_logo.png     |    Bin 19377 -> 0 bytes
 .../images/integrations/apache_hop_logo.png        |    Bin 0 -> 75995 bytes
 .../images/integrations/apache_iotdb_logo.png      |    Bin 22055 -> 54876 bytes
 src/site/resources/images/languages/c_logo.png     |    Bin 0 -> 23215 bytes
 src/site/resources/images/languages/cs_logo.png    |    Bin 0 -> 98426 bytes
 src/site/resources/images/languages/go_logo.png    |    Bin 0 -> 30834 bytes
 src/site/resources/images/languages/java_logo.png  |    Bin 0 -> 88149 bytes
 .../resources/images/languages/python_logo.png     |    Bin 0 -> 98345 bytes
 src/site/resources/images/team/glcj.jpg            |    Bin 0 -> 38971 bytes
 src/site/resources/plc4x-pmc.rdf                   |     30 +
 src/site/site.xml                                  |     32 +-
 tools/NOTES.md                                     |     22 +
 tools/docker-compose.yaml                          |     32 +
 tools/release-0-update-generated-code.sh           |     73 +
 tools/release-1-create-branch.sh                   |     92 +
 tools/release-2-prepare-release.sh                 |     44 +
 tools/release-3-perform-release.sh                 |     66 +
 tools/release-abort.sh                             |     62 +
 tools/validate-release.sh                          |    107 +
 1389 files changed, 192998 insertions(+), 60213 deletions(-)

diff --cc code-generation/language-base-freemarker/.factorypath
index 0000000000,0000000000..cd052ff378
new file mode 100644
--- /dev/null
+++ b/code-generation/language-base-freemarker/.factorypath
@@@ -1,0 -1,0 +1,40 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-language-base/1.7.0/plc4x-code-generation-language-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/freemarker/freemarker/2.3.32/freemarker-2.3.32.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/objecthunter/exp4j/0.4.8/exp4j-0.4.8.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc code-generation/language-c/.factorypath
index 0000000000,0000000000..f36dbfc1b5
new file mode 100644
--- /dev/null
+++ b/code-generation/language-c/.factorypath
@@@ -1,0 -1,0 +1,38 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-language-base/1.7.0/plc4x-code-generation-language-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/objecthunter/exp4j/0.4.8/exp4j-0.4.8.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/freemarker/freemarker/2.3.32/freemarker-2.3.32.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc code-generation/language-cs/.factorypath
index 0000000000,0000000000..e0ccb616c5
new file mode 100644
--- /dev/null
+++ b/code-generation/language-cs/.factorypath
@@@ -1,0 -1,0 +1,38 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-language-base/1.7.0/plc4x-code-generation-language-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/objecthunter/exp4j/0.4.8/exp4j-0.4.8.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/freemarker/freemarker/2.3.32/freemarker-2.3.32.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc code-generation/language-go/.factorypath
index 0000000000,0000000000..f36dbfc1b5
new file mode 100644
--- /dev/null
+++ b/code-generation/language-go/.factorypath
@@@ -1,0 -1,0 +1,38 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-language-base/1.7.0/plc4x-code-generation-language-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/objecthunter/exp4j/0.4.8/exp4j-0.4.8.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/freemarker/freemarker/2.3.32/freemarker-2.3.32.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc code-generation/language-java/.factorypath
index 0000000000,0000000000..2b99c023e6
new file mode 100644
--- /dev/null
+++ b/code-generation/language-java/.factorypath
@@@ -1,0 -1,0 +1,45 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-language-base/1.7.0/plc4x-code-generation-language-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/objecthunter/exp4j/0.4.8/exp4j-0.4.8.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/freemarker/freemarker/2.3.32/freemarker-2.3.32.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/googlejavaformat/google-java-format/1.21.0/google-java-format-1.21.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/33.0.0-jre/guava-33.0.0-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.2/failureaccess-1.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/3.41.0/checker-qual-3.41.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.23.0/error_prone_annotations-2.23.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/2.8/j2objc-annotations-2.8.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc code-generation/language-python/.factorypath
index 0000000000,0000000000..5cf8f4e695
new file mode 100644
--- /dev/null
+++ b/code-generation/language-python/.factorypath
@@@ -1,0 -1,0 +1,38 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-language-base/1.7.0/plc4x-code-generation-language-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/objecthunter/exp4j/0.4.8/exp4j-0.4.8.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/freemarker/freemarker/2.3.32/freemarker-2.3.32.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc code-generation/protocol-base-mspec/.factorypath
index 0000000000,0000000000..aa25822af6
new file mode 100644
--- /dev/null
+++ b/code-generation/protocol-base-mspec/.factorypath
@@@ -1,0 -1,0 +1,35 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc code-generation/protocol-test/.factorypath
index 0000000000,0000000000..24c09035f0
new file mode 100644
--- /dev/null
+++ b/code-generation/protocol-test/.factorypath
@@@ -1,0 -1,0 +1,33 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/api/.factorypath
index 0000000000,0000000000..0e0a85f966
new file mode 100644
--- /dev/null
+++ b/plc4j/api/.factorypath
@@@ -1,0 -1,0 +1,30 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/ab-eth/.factorypath
index 0000000000,0000000000..f846b4b306
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/ab-eth/.factorypath
@@@ -1,0 -1,0 +1,47 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/ads/.factorypath
index 0000000000,0000000000..beb5d648cf
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/ads/.factorypath
@@@ -1,0 -1,0 +1,47 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/bacnet/.factorypath
index 0000000000,0000000000..f6ea54fdb8
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/bacnet/.factorypath
@@@ -1,0 -1,0 +1,58 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/c-bus/.factorypath
index 0000000000,0000000000..3b94b8329a
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/c-bus/.factorypath
@@@ -1,0 -1,0 +1,48 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/can/.factorypath
index 0000000000,0000000000..398485543f
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/can/.factorypath
@@@ -1,0 -1,0 +1,47 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/canopen/.factorypath
index 0000000000,0000000000..c545ff1ca9
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/canopen/.factorypath
@@@ -1,0 -1,0 +1,47 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/ctrlx/.factorypath
index 0000000000,0000000000..8554c1a1d3
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/ctrlx/.factorypath
@@@ -1,0 -1,0 +1,54 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/annotation/jakarta.annotation-api/2.1.1/jakarta.annotation-api-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-logging/commons-logging/1.3.0/commons-logging-1.3.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/httpcomponents/httpmime/4.5.14/httpmime-4.5.14.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.16.1/jackson-datatype-jsr310-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/hrakaroo/glob/0.9.0/glob-0.9.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/eip/.factorypath
index 0000000000,0000000000..9b8cb03a48
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/eip/.factorypath
@@@ -1,0 -1,0 +1,48 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/firmata/.factorypath
index 0000000000,0000000000..d603d161cc
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/firmata/.factorypath
@@@ -1,0 -1,0 +1,50 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/iec-60870/.factorypath
index 0000000000,0000000000..5c4424d234
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/iec-60870/.factorypath
@@@ -1,0 -1,0 +1,47 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/knxnetip/.factorypath
index 0000000000,0000000000..f12de984d5
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/knxnetip/.factorypath
@@@ -1,0 -1,0 +1,59 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxManufacturer.java
index 8bfa7c3038,e095950861..cf0304cd6d
--- a/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxManufacturer.java
+++ b/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxManufacturer.java
@@@ -755,10 -755,28 +755,29 @@@ public enum KnxManufacturer 
    M_CAV_AUDIOGUANGZHOUCO__LTD((int) 655, (int) 713, (String) "CAV AUDIO(GUANGZHOU)CO.,LTD"),
    M_HELKAMA_BICA_OY((int) 656, (int) 714, (String) "Helkama Bica Oy"),
    M_MODULYTE((int) 657, (int) 715, (String) "ModuLyte"),
-   M_ABB___RESERVED((int) 658, (int) 43954, (String) "ABB - reserved"),
+   M_CONSOLINNO_ENERGY_GMBH((int) 658, (int) 716, (String) "Consolinno Energy GmbH"),
+   M_SCHIDERON_ELECTRIC_ASIA_LIMITED(
+       (int) 659, (int) 717, (String) "SCHIDERON ELECTRIC (ASIA) LIMITED"),
+   M_3R((int) 660, (int) 718, (String) "3R"),
+   M_ARKLYFE((int) 661, (int) 719, (String) "Arklyfe"),
+   M_FOSHAN_HAYDN_TECHNOLOGY_LIGHTING_CO__LTD_(
+       (int) 662, (int) 720, (String) "Foshan Haydn Technology Lighting Co.,Ltd."),
+   M_KNXES_COMPANY_LIMITED((int) 663, (int) 721, (String) "KNXES COMPANY LIMITED"),
+   M_THE_AKUVOX_COMPANY((int) 664, (int) 722, (String) "The Akuvox Company"),
+   M_NINGBO_YINZHOU_SHENGRUIJIE_ELECTRONICS_CO__LTD_(
+       (int) 665, (int) 723, (String) "NingBo Yinzhou ShengRuiJie Electronics Co. Ltd."),
+   M_SHENZHEN_HAIZHICHUANG_TECHNOLOGY_CO___LTD(
+       (int) 666, (int) 724, (String) "Shenzhen Haizhichuang Technology Co., Ltd"),
+   M_SHENZHEN_EASYDETEK_TECHNOLOGY_CO_LTD(
+       (int) 667, (int) 725, (String) "Shenzhen easydetek technology Co.Ltd"),
+   M_MUTLUSAN_ELECTRIC((int) 668, (int) 726, (String) "Mutlusan Electric"),
+   M_HANGZHOU_BROADLINK_TECHNOLOGY_CO__LTD_(
+       (int) 669, (int) 727, (String) "Hangzhou BroadLink Technology Co.,Ltd."),
+   M_MARLEY_DEUTSCHLAND_GMBH((int) 670, (int) 728, (String) "Marley Deutschland GmbH"),
+   M_ABB___RESERVED((int) 671, (int) 43954, (String) "ABB - reserved"),
    M_BUSCH_JAEGER_ELEKTRO___RESERVED(
-       (int) 659, (int) 43959, (String) "Busch-Jaeger Elektro - reserved");
+       (int) 672, (int) 43959, (String) "Busch-Jaeger Elektro - reserved");
 +
    private static final Map<Integer, KnxManufacturer> map;
  
    static {
diff --cc plc4j/drivers/mock/.factorypath
index 0000000000,0000000000..4b31d581bc
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/mock/.factorypath
@@@ -1,0 -1,0 +1,53 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.10.2/junit-jupiter-api-5.10.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.3.0/opentest4j-1.3.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.10.2/junit-platform-commons-1.10.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/hamcrest/hamcrest/2.2/hamcrest-2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/hamcrest/hamcrest-core/2.2/hamcrest-core-2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/hamcrest/hamcrest-library/2.2/hamcrest-library-2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/modbus/.factorypath
index 0000000000,0000000000..f141dee893
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/modbus/.factorypath
@@@ -1,0 -1,0 +1,53 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/opcua/.factorypath
index 0000000000,0000000000..b6d9bfd2b8
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/opcua/.factorypath
@@@ -1,0 -1,0 +1,49 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/open-protocol/.factorypath
index 0000000000,0000000000..51b8231731
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/open-protocol/.factorypath
@@@ -1,0 -1,0 +1,49 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/plc4x/.factorypath
index 0000000000,0000000000..11ec7f2cd7
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/plc4x/.factorypath
@@@ -1,0 -1,0 +1,48 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/profinet-ng/.factorypath
index 0000000000,0000000000..9e2929dacd
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/profinet-ng/.factorypath
@@@ -1,0 -1,0 +1,56 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/profinet/.factorypath
index 0000000000,0000000000..c834211f89
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/profinet/.factorypath
@@@ -1,0 -1,0 +1,55 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/s7/.factorypath
index 0000000000,0000000000..1dcd849b16
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/s7/.factorypath
@@@ -1,0 -1,0 +1,49 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/simulated/.factorypath
index 0000000000,0000000000..77dd75b6e8
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/simulated/.factorypath
@@@ -1,0 -1,0 +1,46 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-ads-telemetry/.factorypath
index 0000000000,0000000000..64d429058c
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-ads-telemetry/.factorypath
@@@ -1,0 -1,0 +1,75 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/log4j-over-slf4j/2.0.12/log4j-over-slf4j-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-cloud-azure/.factorypath
index 0000000000,0000000000..b8f4dc4c5d
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-cloud-azure/.factorypath
@@@ -1,0 -1,0 +1,80 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/microsoft/azure/sdk/iot/iot-device-client/2.4.1/iot-device-client-2.4.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/qpid/proton-j/0.34.1/proton-j-0.34.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/microsoft/azure/qpid-proton-j-extensions/1.2.4/qpid-proton-j-extensions-1.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/paho/org.eclipse.paho.client.mqttv3/1.2.5/org.eclipse.paho.client.mqttv3-1.2.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/microsoft/azure/sdk/iot/provisioning/security/security-provider/2.0.1/security-provider-2.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/gson/gson/2.10.1/gson-2.10.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-cli/commons-cli/1.6.0/commons-cli-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-cloud-google/.factorypath
index 0000000000,0000000000..307b75591a
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-cloud-google/.factorypath
@@@ -1,0 -1,0 +1,79 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/paho/org.eclipse.paho.client.mqttv3/1.2.5/org.eclipse.paho.client.mqttv3-1.2.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/joda-time/joda-time/2.12.7/joda-time-2.12.7.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/jsonwebtoken/jjwt-api/0.12.5/jjwt-api-0.12.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-cli/commons-cli/1.6.0/commons-cli-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/log4j-over-slf4j/2.0.12/log4j-over-slf4j-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-connectivity-mqtt/.factorypath
index 0000000000,0000000000..4e7559fe61
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-connectivity-mqtt/.factorypath
@@@ -1,0 -1,0 +1,83 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/hivemq/hivemq-mqtt-client/1.3.3/hivemq-mqtt-client-1.3.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/jctools/jctools-core/2.1.2/jctools-core-2.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/annotations/16.0.3/annotations-16.0.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/dagger/dagger/2.27/dagger-2.27.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/reactivex/rxjava2/rxjava/2.2.21/rxjava-2.2.21.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.16.1/jackson-dataformat-yaml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/gson/gson/2.10.1/gson-2.10.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-discovery/.factorypath
index 0000000000,0000000000..63ba2c6dec
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-discovery/.factorypath
@@@ -1,0 -1,0 +1,76 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-cli/commons-cli/1.6.0/commons-cli-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-core/1.5.3/logback-core-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-influx-data-collection/.factorypath
index 0000000000,0000000000..ed6af4d2b0
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-influx-data-collection/.factorypath
@@@ -1,0 -1,0 +1,94 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/influxdb/influxdb-client-java/7.0.0/influxdb-client-java-7.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/influxdb/influxdb-client-core/7.0.0/influxdb-client-core-7.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/influxdb/influxdb-client-utils/7.0.0/influxdb-client-utils-7.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/okio/okio/3.7.0/okio-3.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/okio/okio-jvm/3.7.0/okio-jvm-3.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/kotlin/kotlin-stdlib/1.9.21/kotlin-stdlib-1.9.21.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/annotations/13.0/annotations-13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/okhttp3/okhttp/4.12.0/okhttp-4.12.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.8.21/kotlin-stdlib-jdk8-1.8.21.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.8.21/kotlin-stdlib-jdk7-1.8.21.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/retrofit2/retrofit/2.9.0/retrofit-2.9.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/okhttp3/logging-interceptor/4.12.0/logging-interceptor-4.12.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/gson/gson/2.10.1/gson-2.10.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/reactivex/rxjava3/rxjava/3.1.8/rxjava-3.1.8.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/retrofit2/adapter-rxjava3/2.9.0/adapter-rxjava3-2.9.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/retrofit2/converter-scalars/2.9.0/converter-scalars-2.9.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/retrofit2/converter-gson/2.9.0/converter-gson-2.9.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-configuration2/2.9.0/commons-configuration2-2.9.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-logging/commons-logging/1.3.0/commons-logging-1.3.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-integration-iotdb/.factorypath
index 0000000000,0000000000..9a79808f63
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-integration-iotdb/.factorypath
@@@ -1,0 -1,0 +1,100 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-cli/commons-cli/1.6.0/commons-cli-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/iotdb/tsfile/1.2.2/tsfile-1.2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/luben/zstd-jni/1.5.4-2/zstd-jni-1.5.4-2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/xerial/snappy/snappy-java/1.1.8.4/snappy-java-1.1.8.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/lz4/lz4-java/1.8.0/lz4-java-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/gson/gson/2.10.1/gson-2.10.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/openjdk/jol/jol-core/0.2/jol-core-0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/airlift/slice/0.41/slice-0.41.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/tukaani/xz/1.9/xz-1.9.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/iotdb/iotdb-antlr/1.2.2/iotdb-antlr-1.2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-jexl3/3.2.1/commons-jexl3-3.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-logging/commons-logging/1.3.0/commons-logging-1.3.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/iotdb/service-rpc/1.2.2/service-rpc-1.2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/iotdb/iotdb-thrift/1.2.2/iotdb-thrift-1.2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/thrift/libthrift/0.14.1/libthrift-0.14.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/iotdb/iotdb-thrift-commons/1.2.2/iotdb-thrift-commons-1.2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/iotdb/iotdb-jdbc/1.2.2/iotdb-jdbc-1.2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/osgi/osgi.cmpn/6.0.0/osgi.cmpn-6.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/ops4j/pax/jdbc/pax-jdbc-common/1.4.5/pax-jdbc-common-1.4.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/jcl-over-slf4j/1.7.28/jcl-over-slf4j-1.7.28.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/osgi/org.osgi.core/6.0.0/org.osgi.core-6.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/iotdb/iotdb-session/1.2.2/iotdb-session-1.2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/iotdb/isession/1.2.2/isession-1.2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/log4j-over-slf4j/2.0.12/log4j-over-slf4j-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-nats/.factorypath
index 0000000000,0000000000..3ba856b416
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-nats/.factorypath
@@@ -1,0 -1,0 +1,78 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/nats/jnats/2.17.3/jnats-2.17.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/i2p/crypto/eddsa/0.3.0/eddsa-0.3.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-cli/commons-cli/1.6.0/commons-cli-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/log4j-over-slf4j/2.0.12/log4j-over-slf4j-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-opm/.factorypath
index 0000000000,0000000000..b8f82d62d2
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-opm/.factorypath
@@@ -1,0 -1,0 +1,80 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-opm/0.13.0-SNAPSHOT/plc4j-opm-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/bytebuddy/byte-buddy/1.14.12/byte-buddy-1.14.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-configuration2/2.9.0/commons-configuration2-2.9.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-logging/commons-logging/1.3.0/commons-logging-1.3.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-connection-cache/0.13.0-SNAPSHOT/plc4j-connection-cache-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-core/1.5.3/logback-core-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-webservice/.factorypath
index 0000000000,0000000000..f876e674e3
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-webservice/.factorypath
@@@ -1,0 -1,0 +1,80 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-cli/commons-cli/1.6.0/commons-cli-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/gson/gson/2.10.1/gson-2.10.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-logging/commons-logging/1.3.0/commons-logging-1.3.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/log4j-over-slf4j/2.0.12/log4j-over-slf4j-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-world-kotlin/.factorypath
index 0000000000,0000000000..442f2711f1
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-world-kotlin/.factorypath
@@@ -1,0 -1,0 +1,75 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/kotlin/kotlin-stdlib/1.9.22/kotlin-stdlib-1.9.22.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/annotations/13.0/annotations-13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-world-plc4x-discover-and-browse/.factorypath
index 0000000000,0000000000..59b1e83544
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-world-plc4x-discover-and-browse/.factorypath
@@@ -1,0 -1,0 +1,75 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/log4j-over-slf4j/2.0.12/log4j-over-slf4j-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-world-plc4x-read/.factorypath
index 0000000000,0000000000..63ba2c6dec
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-world-plc4x-read/.factorypath
@@@ -1,0 -1,0 +1,76 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-cli/commons-cli/1.6.0/commons-cli-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-core/1.5.3/logback-core-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-world-plc4x-subscribe/.factorypath
index 0000000000,0000000000..2d199aebd0
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-world-plc4x-subscribe/.factorypath
@@@ -1,0 -1,0 +1,77 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-cli/commons-cli/1.6.0/commons-cli-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/log4j-over-slf4j/2.0.12/log4j-over-slf4j-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-core/1.5.3/logback-core-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-world-plc4x-write/.factorypath
index 0000000000,0000000000..63ba2c6dec
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-world-plc4x-write/.factorypath
@@@ -1,0 -1,0 +1,76 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-cli/commons-cli/1.6.0/commons-cli-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-core/1.5.3/logback-core-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/plc4j-s7event/.factorypath
index 0000000000,0000000000..4735ca85c4
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/plc4j-s7event/.factorypath
@@@ -1,0 -1,0 +1,75 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-simple/2.0.12/slf4j-simple-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/poll-loop/.factorypath
index 0000000000,0000000000..1485c6fedb
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/poll-loop/.factorypath
@@@ -1,0 -1,0 +1,74 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/log4j-over-slf4j/2.0.12/log4j-over-slf4j-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/integrations/apache-calcite/.factorypath
index 0000000000,0000000000..1c7a4a7819
new file mode 100644
--- /dev/null
+++ b/plc4j/integrations/apache-calcite/.factorypath
@@@ -1,0 -1,0 +1,110 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/calcite/calcite-core/1.36.0/calcite-core-1.36.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/locationtech/jts/jts-core/1.19.0/jts-core-1.19.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/locationtech/jts/io/jts-io-common/1.19.0/jts-io-common-1.19.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/googlecode/json-simple/json-simple/1.1.1/json-simple-1.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/locationtech/proj4j/proj4j/1.2.2/proj4j-1.2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.26.1/error_prone_annotations-2.26.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/33.0.0-jre/guava-33.0.0-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.2/failureaccess-1.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/2.8/j2objc-annotations-2.8.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/calcite/avatica/avatica-core/1.23.0/avatica-core-1.23.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/calcite/avatica/avatica-metrics/1.23.0/avatica-metrics-1.23.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/protobuf/protobuf-java/3.25.3/protobuf-java-3.25.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/httpcomponents/client5/httpclient5/5.1.3/httpclient5-5.1.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/httpcomponents/core5/httpcore5-h2/5.1.3/httpcore5-h2-5.1.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/httpcomponents/core5/httpcore5/5.1.3/httpcore5-5.1.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/3.42.0/checker-qual-3.42.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.16.1/jackson-dataformat-yaml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/uzaygezen/uzaygezen-core/0.2/uzaygezen-core-0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/jayway/jsonpath/json-path/2.7.0/json-path-2.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/minidev/json-smart/2.4.7/json-smart-2.4.7.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/minidev/accessors-smart/2.4.7/accessors-smart-2.4.7.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/ow2/asm/asm/9.1/asm-9.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/yahoo/datasketches/sketches-core/0.9.0/sketches-core-0.9.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/yahoo/datasketches/memory/0.9.0/memory-0.9.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/hydromatic/aggdesigner-algorithm/6.0/aggdesigner-algorithm-6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-lang/commons-lang/2.4/commons-lang-2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-logging/commons-logging/1.3.0/commons-logging-1.3.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-dbcp2/2.9.0/commons-dbcp2-2.9.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-pool2/2.12.0/commons-pool2-2.12.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-math3/3.6.1/commons-math3-3.6.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/janino/commons-compiler/3.1.9/commons-compiler-3.1.9.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/janino/janino/3.1.9/janino-3.1.9.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/calcite/calcite-linq4j/1.36.0/calcite-linq4j-1.36.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-scraper/0.13.0-SNAPSHOT/plc4j-scraper-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-collections4/4.4/commons-collections4-4.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-connection-cache/0.13.0-SNAPSHOT/plc4j-connection-cache-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/integrations/apache-kafka/.factorypath
index 0000000000,0000000000..1868479cd9
new file mode 100644
--- /dev/null
+++ b/plc4j/integrations/apache-kafka/.factorypath
@@@ -1,0 -1,0 +1,72 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.16.1/jackson-dataformat-yaml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-math3/3.6.1/commons-math3-3.6.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-collections4/4.4/commons-collections4-4.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/kafka/kafka-clients/3.2.0/kafka-clients-3.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/luben/zstd-jni/1.5.2-1/zstd-jni-1.5.2-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/lz4/lz4-java/1.8.0/lz4-java-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/xerial/snappy/snappy-java/1.1.8.4/snappy-java-1.1.8.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/kafka/connect-api/3.2.0/connect-api-3.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/ws/rs/javax.ws.rs-api/2.1.1/javax.ws.rs-api-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/integrations/apache-nifi/nifi-plc4x-nar/.factorypath
index 0000000000,0000000000..65f158ad02
new file mode 100644
--- /dev/null
+++ b/plc4j/integrations/apache-nifi/nifi-plc4x-nar/.factorypath
@@@ -1,0 -1,0 +1,93 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-connection-cache/0.13.0-SNAPSHOT/plc4j-connection-cache-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.106.Final/netty-buffer-4.1.106.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.106.Final/netty-codec-4.1.106.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.106.Final/netty-common-4.1.106.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.106.Final/netty-transport-4.1.106.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.106.Final/netty-resolver-4.1.106.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-utils/1.25.0/nifi-utils-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-api/1.25.0/nifi-api-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-property-utils/1.25.0/nifi-property-utils-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/xml/bind/jakarta.xml.bind-api/4.0.1/jakarta.xml.bind-api-4.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-runtime/4.0.4/jaxb-runtime-4.0.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-core/4.0.4/jaxb-core-4.0.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/activation/jakarta.activation-api/2.1.3/jakarta.activation-api-2.1.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/angus/angus-activation/2.0.1/angus-activation-2.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/txw2/4.0.4/txw2-4.0.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/sun/istack/istack-commons-runtime/4.1.2/istack-commons-runtime-4.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-json-utils/1.25.0/nifi-json-utils-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-avro-record-utils/1.25.0/nifi-avro-record-utils-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-standard-record-utils/1.25.0/nifi-standard-record-utils-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-security-socket-ssl/1.25.0/nifi-security-socket-ssl-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/ben-manes/caffeine/caffeine/2.9.3/caffeine-2.9.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/3.19.0/checker-qual-3.19.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.10.0/error_prone_annotations-2.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/avro/avro/1.11.3/avro-1.11.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-compress/1.26.1/commons-compress-1.26.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.106.Final/netty-handler-4.1.106.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.106.Final/netty-transport-native-unix-common-4.1.106.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/integrations/apache-nifi/nifi-plc4x-processors/.factorypath
index 0000000000,0000000000..87320e2e64
new file mode 100644
--- /dev/null
+++ b/plc4j/integrations/apache-nifi/nifi-plc4x-processors/.factorypath
@@@ -1,0 -1,0 +1,73 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-connection-cache/0.13.0-SNAPSHOT/plc4j-connection-cache-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.106.Final/netty-buffer-4.1.106.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.106.Final/netty-codec-4.1.106.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.106.Final/netty-common-4.1.106.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.106.Final/netty-transport-4.1.106.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.106.Final/netty-resolver-4.1.106.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-api/1.25.0/nifi-api-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-record/1.25.0/nifi-record-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-record-serialization-service-api/1.25.0/nifi-record-serialization-service-api-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-deprecation-log/1.25.0/nifi-deprecation-log-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-utils/1.25.0/nifi-utils-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-property-utils/1.25.0/nifi-property-utils-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/xml/bind/jakarta.xml.bind-api/4.0.1/jakarta.xml.bind-api-4.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-runtime/4.0.4/jaxb-runtime-4.0.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-core/4.0.4/jaxb-core-4.0.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/activation/jakarta.activation-api/2.1.3/jakarta.activation-api-2.1.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/angus/angus-activation/2.0.1/angus-activation-2.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/txw2/4.0.4/txw2-4.0.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/sun/istack/istack-commons-runtime/4.1.2/istack-commons-runtime-4.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-json-utils/1.25.0/nifi-json-utils-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-avro-record-utils/1.25.0/nifi-avro-record-utils-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-standard-record-utils/1.25.0/nifi-standard-record-utils-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-security-socket-ssl/1.25.0/nifi-security-socket-ssl-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/ben-manes/caffeine/caffeine/2.9.3/caffeine-2.9.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/3.19.0/checker-qual-3.19.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.10.0/error_prone_annotations-2.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/avro/avro/1.11.3/avro-1.11.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-compress/1.26.1/commons-compress-1.26.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-framework-api/1.25.0/nifi-framework-api-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/integrations/plc4j-apache-karaf/pom.xml
index 9db27f494b,0000000000..c7e0d4c72a
mode 100644,000000..100644
--- a/plc4j/integrations/plc4j-apache-karaf/pom.xml
+++ b/plc4j/integrations/plc4j-apache-karaf/pom.xml
@@@ -1,113 -1,0 +1,113 @@@
 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 +<!--
 +Licensed to the Apache Software Foundation (ASF) under one
 +or more contributor license agreements.  See the NOTICE file
 +distributed with this work for additional information
 +regarding copyright ownership.  The ASF licenses this file
 +to you under the Apache License, Version 2.0 (the
 +"License"); you may not use this file except in compliance
 +with the License.  You may obtain a copy of the License at
 +
 +    https://www.apache.org/licenses/LICENSE-2.0
 +
 +Unless required by applicable law or agreed to in writing,
 +software distributed under the License is distributed on an
 +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 +KIND, either express or implied.  See the License for the
 +specific language governing permissions and limitations
 +under the License.
 +-->
 +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 +
 +    <modelVersion>4.0.0</modelVersion>
 +  
 +<!--    <parent>
 +        <groupId>org.apache.plc4x</groupId>
 +        <artifactId>plc4j-integrations</artifactId>
 +        <version>0.12.0-SNAPSHOT</version>
 +    </parent>-->
 +
 +    <groupId>org.apache.plc4x</groupId>
 +    <artifactId>plc4j-apache-karaf</artifactId>
 +    <version>0.12.0-SNAPSHOT</version>
 +    <packaging>pom</packaging>
 +    
 +    <name>PLC4J: Integrations: Apache Karaf</name>
 +    <description>Integration module for integrating PLC4X into Apache Karaf.</description>
 +
 +    <properties>
 +    
 +        <!-- Inherited -->
 +        <apache.log4j.version>2.20.0</apache.log4j.version>
 +        <bit-io.version>1.4.3</bit-io.version>
 +        <c3p0.version>0.9.5.5</c3p0.version>   
 +        <commons-codec.version>1.16.0</commons-codec.version> 
 +        <commons-net.version>3.10.0</commons-net.version>               
 +        <commons-lang3.version>3.14.0</commons-lang3.version>
 +        <hikaricp.version>2.7.9</hikaricp.version>
 +        <netty.version>4.1.104.Final</netty.version>
 +        <quartz.version>2.3.2</quartz.version>
 +        <slf4j.version>2.0.3</slf4j.version>   
 +        <spifly.version>1.3.6</spifly.version>
 +        <jackson.version>2.16.1</jackson.version>  
 +        <jakarta.xml.bind.version>2.3.3</jakarta.xml.bind.version>
 +        <parser-ng.version>0.1.8</parser-ng.version>
 +        <vavr.version>0.10.4</vavr.version>
 +    
 +        <!-- Database used in Pax-jdbc -->
 +        <derby.version>10.14.2.0</derby.version>
 +        <h2.version>2.1.210</h2.version>
 +    
 +        <!-- Remove GPL licence -->   
 +        <javaluator.version>3.0.3</javaluator.version>
 +
 +        <!-- Integration version -->
 +    
 +        <karaf.version>4.4.4</karaf.version>
 +        <org.osgi.core.version>6.0.0</org.osgi.core.version>
 +        <osgi.core.version>8.0.0</osgi.core.version>    
 +        <osgi.cmpn.version>7.0.0</osgi.cmpn.version>
 +        <osgi.device.version>1.1.0</osgi.device.version>
 +        <org.osgi.dal.version>1.0.2</org.osgi.dal.version>        
 +        <disruptor.version>3.4.4</disruptor.version>
 +    
 +        <!-- EPICS -->
 +        <epics.core.version>7.0.9</epics.core.version>
 +        <epics.util.version>1.0.6</epics.util.version>
 +        <epics.vtype.version>1.0.6</epics.vtype.version>
 +        <epics.vtype.all.version>1.0.6</epics.vtype.all.version>
 +        <epics.ntypes.version>0.3.8</epics.ntypes.version>
 +        <epics.jca.version>2.4.8</epics.jca.version>
 +        <epics.pvaccess.version>5.1.8</epics.pvaccess.version>
 +        <epics.pvaclient.version>4.3.2</epics.pvaclient.version>
 +        <epics.pvdata.version>6.1.8</epics.pvdata.version>
 +        <epics.pvdatabase.version>4.3.1</epics.pvdatabase.version>
 +        <epics.gpclient.version>1.0.7</epics.gpclient.version>
 +        <epics.gpclient.core.version>1.0.7</epics.gpclient.core.version>
 +        <epics.gpclient.sim.version>1.0.7</epics.gpclient.sim.version>
 +        <epics.gpclient.loc.version>1.0.7</epics.gpclient.loc.version>
 +        <epics.gpclient.pva.version>1.0.7</epics.gpclient.pva.version>
 +        <epics.gpclient.ca.version>1.0.7</epics.gpclient.ca.version>
 +  
 +    </properties>
 +                           
 +    <modules>
-         <module>org.apache.plc4x.merlot</module>
 +        <module>org.apache.plc4x.merlot.modbus.dev</module>
 +        <module>org.apache.plc4x.merlot.modbus.svr</module>
 +        <module>org.apache.plc4x.merlot.scheduler</module>
 +        <module>org.apache.plc4x.merlot.branding</module>
 +        <module>org.apache.plc4x.merlot.uns</module>
 +        <module>org.apache.plc4x.merlot.features</module>
 +        <module>org.apache.plc4x.merlot.das</module>
 +        <module>org.apache.plc4x.merlot.modbus.sim</module>   
 +        <module>org.apache.plc4x.merlot.db</module>
 +        <module>org.apache.plc4x.merlot.das.api</module>
 +        <module>org.apache.plc4x.merlot.derby</module>
 +        <module>org.apache.plc4x.merlot.h2</module>  
 +        <module>org.apache.plc4x.merlot.drv.simulated</module>
 +        <module>org.apache.plc4x.merlot.das.ref</module>
 +        <module>org.apache.plc4x.merlot.das.base</module>
++	<module>org.apache.plc4x.merlot</module>
 +    </modules>
 +
 +</project>
diff --cc plc4j/integrations/pom.xml
index cb0abb6ade,3192c3f11d..c75c4185fd
--- a/plc4j/integrations/pom.xml
+++ b/plc4j/integrations/pom.xml
@@@ -40,21 -40,7 +40,9 @@@
    <modules>
      <module>apache-calcite</module>
      <module>apache-nifi</module>
 +    <!-- <module>opcua-server</module> -->
 +    <module>plc4j-apache-karaf</module>
+     <module>apache-kafka</module>
    </modules>
  
-   <!-- It seems that the Kafka-Connect plugin doesn't work with Java 21 -->
-   <profiles>
-     <profile>
-       <id>.below-java-21</id>
-       <activation>
-         <jdk>[11,21)</jdk>
-       </activation>
-       <modules>
-         <module>apache-kafka</module>
-       </modules>
-     </profile>
-   </profiles>
- 
  </project>
diff --cc plc4j/osgi/.factorypath
index 0000000000,0000000000..0bb05a2688
new file mode 100644
--- /dev/null
+++ b/plc4j/osgi/.factorypath
@@@ -1,0 -1,0 +1,46 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/osgi/osgi.core/8.0.0/osgi.core-8.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/spi/.factorypath
index 0000000000,0000000000..6119c90b03
new file mode 100644
--- /dev/null
+++ b/plc4j/spi/.factorypath
@@@ -1,0 -1,0 +1,45 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/tools/capture-replay/.factorypath
index 0000000000,0000000000..b6612a88e6
new file mode 100644
--- /dev/null
+++ b/plc4j/tools/capture-replay/.factorypath
@@@ -1,0 -1,0 +1,35 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-cli/commons-cli/1.6.0/commons-cli-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/tools/connection-cache/.factorypath
index 0000000000,0000000000..0e0a85f966
new file mode 100644
--- /dev/null
+++ b/plc4j/tools/connection-cache/.factorypath
@@@ -1,0 -1,0 +1,30 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/tools/opcua-server/.factorypath
index 0000000000,0000000000..fd739d3243
new file mode 100644
--- /dev/null
+++ b/plc4j/tools/opcua-server/.factorypath
@@@ -1,0 -1,0 +1,83 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/milo/dictionary-manager/0.6.12/dictionary-manager-0.6.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/milo/sdk-server/0.6.12/sdk-server-0.6.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/milo/bsd-generator/0.6.12/bsd-generator-0.6.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/milo/bsd-core/0.6.12/bsd-core-0.6.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/milo/stack-server/0.6.12/stack-server-0.6.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec-http/4.1.107.Final/netty-codec-http-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/milo/stack-core/0.6.12/stack-core-0.6.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/33.0.0-jre/guava-33.0.0-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.2/failureaccess-1.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-runtime/2.3.6/jaxb-runtime-2.3.6.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/xml/bind/jakarta.xml.bind-api/2.3.3/jakarta.xml.bind-api-2.3.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/txw2/2.3.6/txw2-2.3.6.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/sun/istack/istack-commons-runtime/3.0.12/istack-commons-runtime-3.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/sun/activation/jakarta.activation/1.2.2/jakarta.activation-1.2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/milo/sdk-core/0.6.12/sdk-core-0.6.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.16.1/jackson-dataformat-yaml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-cli/commons-cli/1.6.0/commons-cli-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jetty/jetty-util/11.0.20/jetty-util-11.0.20.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcmail-jdk18on/1.77/bcmail-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/tools/opm/.factorypath
index 0000000000,0000000000..16dc4e4241
new file mode 100644
--- /dev/null
+++ b/plc4j/tools/opm/.factorypath
@@@ -1,0 -1,0 +1,49 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/bytebuddy/byte-buddy/1.14.12/byte-buddy-1.14.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-configuration2/2.9.0/commons-configuration2-2.9.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-logging/commons-logging/1.3.0/commons-logging-1.3.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/tools/plc4x-server/.factorypath
index 0000000000,0000000000..c7efa1df2c
new file mode 100644
--- /dev/null
+++ b/plc4j/tools/plc4x-server/.factorypath
@@@ -1,0 -1,0 +1,65 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/log4j-over-slf4j/2.0.12/log4j-over-slf4j-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-core/1.5.3/logback-core-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/tools/scraper-ng/.factorypath
index 0000000000,0000000000..0e0a85f966
new file mode 100644
--- /dev/null
+++ b/plc4j/tools/scraper-ng/.factorypath
@@@ -1,0 -1,0 +1,30 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/tools/scraper/.factorypath
index 0000000000,0000000000..5bb4f684fe
new file mode 100644
--- /dev/null
+++ b/plc4j/tools/scraper/.factorypath
@@@ -1,0 -1,0 +1,38 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.16.1/jackson-dataformat-yaml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-math3/3.6.1/commons-math3-3.6.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-collections4/4.4/commons-collections4-4.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/tools/ui/application/.factorypath
index 0000000000,0000000000..db6f3d549f
new file mode 100644
--- /dev/null
+++ b/plc4j/tools/ui/application/.factorypath
@@@ -1,0 -1,0 +1,126 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot/3.2.4/spring-boot-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-core/6.1.5/spring-core-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-jcl/6.1.5/spring-jcl-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-autoconfigure/3.2.4/spring-boot-autoconfigure-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-context/6.1.5/spring-context-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-aop/6.1.5/spring-aop-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-beans/6.1.5/spring-beans-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-expression/6.1.5/spring-expression-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/micrometer/micrometer-observation/1.12.4/micrometer-observation-1.12.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/micrometer/micrometer-commons/1.12.4/micrometer-commons-1.12.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-jpa/3.2.4/spring-data-jpa-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-commons/3.2.4/spring-data-commons-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-orm/6.1.5/spring-orm-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-jdbc/6.1.5/spring-jdbc-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-tx/6.1.5/spring-tx-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/annotation/jakarta.annotation-api/2.1.1/jakarta.annotation-api-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-web/3.2.4/spring-boot-starter-web-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-json/3.2.4/spring-boot-starter-json-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.15.4/jackson-datatype-jdk8-2.15.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.15.4/jackson-datatype-jsr310-2.15.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/module/jackson-module-parameter-names/2.15.4/jackson-module-parameter-names-2.15.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-tomcat/3.2.4/spring-boot-starter-tomcat-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-core/10.1.19/tomcat-embed-core-10.1.19.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-el/10.1.19/tomcat-embed-el-10.1.19.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-websocket/10.1.19/tomcat-embed-websocket-10.1.19.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-webmvc/6.1.5/spring-webmvc-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-websocket/3.2.4/spring-boot-starter-websocket-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-messaging/6.1.5/spring-messaging-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-web/6.1.5/spring-web-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-websocket/6.1.5/spring-websocket-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-data-jpa/3.2.4/spring-boot-starter-data-jpa-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-aop/3.2.4/spring-boot-starter-aop-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/aspectj/aspectjweaver/1.9.21.1/aspectjweaver-1.9.21.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-jdbc/3.2.4/spring-boot-starter-jdbc-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/zaxxer/HikariCP/5.0.1/HikariCP-5.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/orm/hibernate-core/6.4.4.Final/hibernate-core-6.4.4.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/transaction/jakarta.transaction-api/2.0.1/jakarta.transaction-api-2.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/jboss/logging/jboss-logging/3.5.3.Final/jboss-logging-3.5.3.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/common/hibernate-commons-annotations/6.0.6.Final/hibernate-commons-annotations-6.0.6.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/smallrye/jandex/3.1.2/jandex-3.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/classmate/1.6.0/classmate-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-runtime/4.0.5/jaxb-runtime-4.0.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-core/4.0.5/jaxb-core-4.0.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/angus/angus-activation/2.0.2/angus-activation-2.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/txw2/4.0.5/txw2-4.0.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/sun/istack/istack-commons-runtime/4.1.2/istack-commons-runtime-4.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/inject/jakarta.inject-api/2.0.1/jakarta.inject-api-2.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-aspects/6.1.5/spring-aspects-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/derby/derby/10.17.1.0/derby-10.17.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/derby/derbyshared/10.16.1.1/derbyshared-10.16.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/derby/derbytools/10.17.1.0/derbytools-10.17.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/persistence/jakarta.persistence-api/3.1.0/jakarta.persistence-api-3.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-core/1.5.3/logback-core-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter/3.2.4/spring-boot-starter-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-logging/3.2.4/spring-boot-starter-logging-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-to-slf4j/2.21.1/log4j-to-slf4j-2.21.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-api/2.21.1/log4j-api-2.21.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/jul-to-slf4j/2.0.12/jul-to-slf4j-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/xml/bind/jakarta.xml.bind-api/4.0.2/jakarta.xml.bind-api-4.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/activation/jakarta.activation-api/2.1.3/jakarta.activation-api-2.1.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/bytebuddy/byte-buddy/1.14.12/byte-buddy-1.14.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/tools/ui/backend/.factorypath
index 0000000000,0000000000..570a08e2b6
new file mode 100644
--- /dev/null
+++ b/plc4j/tools/ui/backend/.factorypath
@@@ -1,0 -1,0 +1,126 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-web/3.2.4/spring-boot-starter-web-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter/3.2.4/spring-boot-starter-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot/3.2.4/spring-boot-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-autoconfigure/3.2.4/spring-boot-autoconfigure-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-logging/3.2.4/spring-boot-starter-logging-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-to-slf4j/2.21.1/log4j-to-slf4j-2.21.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-api/2.21.1/log4j-api-2.21.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/jul-to-slf4j/2.0.12/jul-to-slf4j-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-json/3.2.4/spring-boot-starter-json-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.15.4/jackson-datatype-jdk8-2.15.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.15.4/jackson-datatype-jsr310-2.15.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/module/jackson-module-parameter-names/2.15.4/jackson-module-parameter-names-2.15.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-tomcat/3.2.4/spring-boot-starter-tomcat-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-core/10.1.19/tomcat-embed-core-10.1.19.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-el/10.1.19/tomcat-embed-el-10.1.19.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-websocket/10.1.19/tomcat-embed-websocket-10.1.19.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-webmvc/6.1.5/spring-webmvc-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-websocket/3.2.4/spring-boot-starter-websocket-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-messaging/6.1.5/spring-messaging-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-core/6.1.5/spring-core-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-jcl/6.1.5/spring-jcl-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-context/6.1.5/spring-context-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-aop/6.1.5/spring-aop-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-beans/6.1.5/spring-beans-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-expression/6.1.5/spring-expression-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/micrometer/micrometer-observation/1.12.4/micrometer-observation-1.12.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/micrometer/micrometer-commons/1.12.4/micrometer-commons-1.12.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-web/6.1.5/spring-web-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-jpa/3.2.4/spring-data-jpa-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-commons/3.2.4/spring-data-commons-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-orm/6.1.5/spring-orm-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-jdbc/6.1.5/spring-jdbc-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-tx/6.1.5/spring-tx-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/annotation/jakarta.annotation-api/2.1.1/jakarta.annotation-api-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-websocket/6.1.5/spring-websocket-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-data-jpa/3.2.4/spring-boot-starter-data-jpa-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-aop/3.2.4/spring-boot-starter-aop-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/aspectj/aspectjweaver/1.9.21.1/aspectjweaver-1.9.21.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-jdbc/3.2.4/spring-boot-starter-jdbc-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/zaxxer/HikariCP/5.0.1/HikariCP-5.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/orm/hibernate-core/6.4.4.Final/hibernate-core-6.4.4.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/transaction/jakarta.transaction-api/2.0.1/jakarta.transaction-api-2.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/jboss/logging/jboss-logging/3.5.3.Final/jboss-logging-3.5.3.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/common/hibernate-commons-annotations/6.0.6.Final/hibernate-commons-annotations-6.0.6.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/smallrye/jandex/3.1.2/jandex-3.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/classmate/1.6.0/classmate-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/xml/bind/jakarta.xml.bind-api/4.0.2/jakarta.xml.bind-api-4.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/activation/jakarta.activation-api/2.1.3/jakarta.activation-api-2.1.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-runtime/4.0.5/jaxb-runtime-4.0.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-core/4.0.5/jaxb-core-4.0.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/angus/angus-activation/2.0.2/angus-activation-2.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/txw2/4.0.5/txw2-4.0.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/sun/istack/istack-commons-runtime/4.1.2/istack-commons-runtime-4.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/inject/jakarta.inject-api/2.0.1/jakarta.inject-api-2.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-aspects/6.1.5/spring-aspects-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/derby/derby/10.17.1.0/derby-10.17.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/derby/derbyshared/10.16.1.1/derbyshared-10.16.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/derby/derbytools/10.17.1.0/derbytools-10.17.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/persistence/jakarta.persistence-api/3.1.0/jakarta.persistence-api-3.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-core/1.5.3/logback-core-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/bytebuddy/byte-buddy/1.14.12/byte-buddy-1.14.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/tools/ui/frontend/.factorypath
index 0000000000,0000000000..329652a57c
new file mode 100644
--- /dev/null
+++ b/plc4j/tools/ui/frontend/.factorypath
@@@ -1,0 -1,0 +1,124 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-web/3.2.4/spring-boot-starter-web-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter/3.2.4/spring-boot-starter-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot/3.2.4/spring-boot-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-autoconfigure/3.2.4/spring-boot-autoconfigure-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-logging/3.2.4/spring-boot-starter-logging-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-to-slf4j/2.21.1/log4j-to-slf4j-2.21.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-api/2.21.1/log4j-api-2.21.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/jul-to-slf4j/2.0.12/jul-to-slf4j-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-json/3.2.4/spring-boot-starter-json-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.15.4/jackson-datatype-jdk8-2.15.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.15.4/jackson-datatype-jsr310-2.15.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/module/jackson-module-parameter-names/2.15.4/jackson-module-parameter-names-2.15.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-tomcat/3.2.4/spring-boot-starter-tomcat-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-core/10.1.19/tomcat-embed-core-10.1.19.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-el/10.1.19/tomcat-embed-el-10.1.19.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-websocket/10.1.19/tomcat-embed-websocket-10.1.19.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-webmvc/6.1.5/spring-webmvc-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-websocket/3.2.4/spring-boot-starter-websocket-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-messaging/6.1.5/spring-messaging-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-core/6.1.5/spring-core-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-jcl/6.1.5/spring-jcl-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-context/6.1.5/spring-context-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-aop/6.1.5/spring-aop-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-beans/6.1.5/spring-beans-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-expression/6.1.5/spring-expression-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/micrometer/micrometer-observation/1.12.4/micrometer-observation-1.12.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/micrometer/micrometer-commons/1.12.4/micrometer-commons-1.12.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-web/6.1.5/spring-web-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-jpa/3.2.4/spring-data-jpa-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-commons/3.2.4/spring-data-commons-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-orm/6.1.5/spring-orm-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-jdbc/6.1.5/spring-jdbc-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-tx/6.1.5/spring-tx-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/annotation/jakarta.annotation-api/2.1.1/jakarta.annotation-api-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-websocket/6.1.5/spring-websocket-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-data-jpa/3.2.4/spring-boot-starter-data-jpa-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-aop/3.2.4/spring-boot-starter-aop-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/aspectj/aspectjweaver/1.9.21.1/aspectjweaver-1.9.21.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-jdbc/3.2.4/spring-boot-starter-jdbc-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/zaxxer/HikariCP/5.0.1/HikariCP-5.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/orm/hibernate-core/6.4.4.Final/hibernate-core-6.4.4.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/transaction/jakarta.transaction-api/2.0.1/jakarta.transaction-api-2.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/jboss/logging/jboss-logging/3.5.3.Final/jboss-logging-3.5.3.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/common/hibernate-commons-annotations/6.0.6.Final/hibernate-commons-annotations-6.0.6.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/smallrye/jandex/3.1.2/jandex-3.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/classmate/1.6.0/classmate-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/xml/bind/jakarta.xml.bind-api/4.0.2/jakarta.xml.bind-api-4.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/activation/jakarta.activation-api/2.1.3/jakarta.activation-api-2.1.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-runtime/4.0.5/jaxb-runtime-4.0.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-core/4.0.5/jaxb-core-4.0.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/angus/angus-activation/2.0.2/angus-activation-2.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/txw2/4.0.5/txw2-4.0.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/sun/istack/istack-commons-runtime/4.1.2/istack-commons-runtime-4.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/inject/jakarta.inject-api/2.0.1/jakarta.inject-api-2.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-aspects/6.1.5/spring-aspects-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/derby/derby/10.17.1.0/derby-10.17.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/derby/derbyshared/10.16.1.1/derbyshared-10.16.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/derby/derbytools/10.17.1.0/derbytools-10.17.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/persistence/jakarta.persistence-api/3.1.0/jakarta.persistence-api-3.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/bytebuddy/byte-buddy/1.14.12/byte-buddy-1.14.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/transports/can/.factorypath
index 0000000000,0000000000..ba2cf1ec8e
new file mode 100644
--- /dev/null
+++ b/plc4j/transports/can/.factorypath
@@@ -1,0 -1,0 +1,45 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/transports/pcap-replay/.factorypath
index 0000000000,0000000000..7ab2ecb75d
new file mode 100644
--- /dev/null
+++ b/plc4j/transports/pcap-replay/.factorypath
@@@ -1,0 -1,0 +1,48 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/transports/pcap-shared/.factorypath
index 0000000000,0000000000..9379377d11
new file mode 100644
--- /dev/null
+++ b/plc4j/transports/pcap-shared/.factorypath
@@@ -1,0 -1,0 +1,48 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/transports/raw-socket/.factorypath
index 0000000000,0000000000..97c907f50d
new file mode 100644
--- /dev/null
+++ b/plc4j/transports/raw-socket/.factorypath
@@@ -1,0 -1,0 +1,49 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/transports/serial/.factorypath
index 0000000000,0000000000..fc71560bce
new file mode 100644
--- /dev/null
+++ b/plc4j/transports/serial/.factorypath
@@@ -1,0 -1,0 +1,45 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/transports/socketcan/.factorypath
index 0000000000,0000000000..fa217bd024
new file mode 100644
--- /dev/null
+++ b/plc4j/transports/socketcan/.factorypath
@@@ -1,0 -1,0 +1,46 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/tel/schich/javacan-core/3.3.2/javacan-core-3.3.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/transports/tcp/.factorypath
index 0000000000,0000000000..43b9790ed5
new file mode 100644
--- /dev/null
+++ b/plc4j/transports/tcp/.factorypath
@@@ -1,0 -1,0 +1,45 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/transports/test/.factorypath
index 0000000000,0000000000..34d55a9d5e
new file mode 100644
--- /dev/null
+++ b/plc4j/transports/test/.factorypath
@@@ -1,0 -1,0 +1,52 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/hamcrest/hamcrest-core/2.2/hamcrest-core-2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/hamcrest/hamcrest-library/2.2/hamcrest-library-2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/mockito/mockito-core/5.10.0/mockito-core-5.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/bytebuddy/byte-buddy/1.14.12/byte-buddy-1.14.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/bytebuddy/byte-buddy-agent/1.14.11/byte-buddy-agent-1.14.11.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/objenesis/objenesis/3.3/objenesis-3.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/mockito/mockito-junit-jupiter/5.10.0/mockito-junit-jupiter-5.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/transports/udp/.factorypath
index 0000000000,0000000000..843c91cdb7
new file mode 100644
--- /dev/null
+++ b/plc4j/transports/udp/.factorypath
@@@ -1,0 -1,0 +1,45 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/transports/virtualcan/.factorypath
index 0000000000,0000000000..ba2cf1ec8e
new file mode 100644
--- /dev/null
+++ b/plc4j/transports/virtualcan/.factorypath
@@@ -1,0 -1,0 +1,45 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/utils/pcap-replay/.factorypath
index 0000000000,0000000000..ae00b50dea
new file mode 100644
--- /dev/null
+++ b/plc4j/utils/pcap-replay/.factorypath
@@@ -1,0 -1,0 +1,39 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/utils/pcap-shared/.factorypath
index 0000000000,0000000000..410ebe981e
new file mode 100644
--- /dev/null
+++ b/plc4j/utils/pcap-shared/.factorypath
@@@ -1,0 -1,0 +1,38 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/utils/plc-simulator/.factorypath
index 0000000000,0000000000..dadaf921fa
new file mode 100644
--- /dev/null
+++ b/plc4j/utils/plc-simulator/.factorypath
@@@ -1,0 -1,0 +1,56 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-collections4/4.4/commons-collections4-4.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-cli/commons-cli/1.6.0/commons-cli-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/utils/raw-sockets/.factorypath
index 0000000000,0000000000..8b64dbb39c
new file mode 100644
--- /dev/null
+++ b/plc4j/utils/raw-sockets/.factorypath
@@@ -1,0 -1,0 +1,40 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/utils/test-generator/.factorypath
index 0000000000,0000000000..1a73e8fbde
new file mode 100644
--- /dev/null
+++ b/plc4j/utils/test-generator/.factorypath
@@@ -1,0 -1,0 +1,58 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/groovy/groovy-xml/4.0.18/groovy-xml-4.0.18.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/groovy/groovy/4.0.18/groovy-4.0.18.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/xmlunit/xmlunit-matchers/2.9.1/xmlunit-matchers-2.9.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/xmlunit/xmlunit-core/2.9.1/xmlunit-core-2.9.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/xml/bind/jakarta.xml.bind-api/2.3.3/jakarta.xml.bind-api-2.3.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/activation/jakarta.activation-api/2.1.3/jakarta.activation-api-2.1.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/utils/test-utils/.factorypath
index 0000000000,0000000000..122c828e1b
new file mode 100644
--- /dev/null
+++ b/plc4j/utils/test-utils/.factorypath
@@@ -1,0 -1,0 +1,56 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-artifact/3.9.4/maven-artifact-3.9.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/dom4j/dom4j/2.1.4/dom4j-2.1.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/xmlunit/xmlunit-core/2.9.1/xmlunit-core-2.9.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/xml/bind/jakarta.xml.bind-api/2.3.3/jakarta.xml.bind-api-2.3.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/activation/jakarta.activation-api/2.1.3/jakarta.activation-api-2.1.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.10.2/junit-jupiter-api-5.10.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.3.0/opentest4j-1.3.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.10.2/junit-platform-commons-1.10.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc pom.xml
index b250f6e388,17a4b8d3e3..79e8655e22
--- a/pom.xml
+++ b/pom.xml
@@@ -164,32 -170,6 +170,32 @@@
      <enable-all-tests>false</enable-all-tests>
      <excluded-test-groups>require-all-tests</excluded-test-groups>
      <reflow.skin.version>2.3.3</reflow.skin.version>
 +    
 +    <!-- Integration version -->
-     <karaf.version>4.4.3</karaf.version>
++    <karaf.version>4.4.5</karaf.version>
 +    <osgi.core.version>8.0.0</osgi.core.version>
 +    <osgi.cmpn.version>7.0.0</osgi.cmpn.version>
 +    <osgi.device.version>1.1.0</osgi.device.version>
 +    <javaluator.version>3.0.3</javaluator.version>
 +    <disruptor.version>3.4.4</disruptor.version>
 +    
 +    <!-- EPICS -->    
 +    <epics.core.version>7.0.9</epics.core.version>
 +    <epics.util.version>1.0.6</epics.util.version>
 +    <epics.vtype.version>1.0.6</epics.vtype.version>  
 +    <epics.vtype.all.version>1.0.6</epics.vtype.all.version>      
 +    <epics.ntypes.version>0.3.8</epics.ntypes.version>  
 +    <epics.jca.version>2.4.8</epics.jca.version>
 +    <epics.pvaccess.version>5.1.8</epics.pvaccess.version>  
 +    <epics.pvaclient.version>4.3.2</epics.pvaclient.version>       
 +    <epics.pvdata.version>6.1.8</epics.pvdata.version>
 +    <epics.pvdatabase.version>4.3.1</epics.pvdatabase.version>    
 +    <epics.gpclient.version>1.0.7</epics.gpclient.version>   
 +    <epics.gpclient.core.version>1.0.7</epics.gpclient.core.version>
 +    <epics.gpclient.sim.version>1.0.7</epics.gpclient.sim.version>                 
 +    <epics.gpclient.loc.version>1.0.7</epics.gpclient.loc.version>  
 +    <epics.gpclient.pva.version>1.0.7</epics.gpclient.pva.version>
 +    <epics.gpclient.ca.version>1.0.7</epics.gpclient.ca.version>    
    </properties>
  
    <modules>
diff --cc protocols/ab-eth/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/ab-eth/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/ads/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/ads/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/bacnetip/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/bacnetip/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/c-bus/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/c-bus/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/canopen/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/canopen/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/df1/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/df1/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/eip/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/eip/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/firmata/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/firmata/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/genericcan/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/genericcan/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/iec-60870/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/iec-60870/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/knxnetip/.factorypath
index 0000000000,0000000000..aa25822af6
new file mode 100644
--- /dev/null
+++ b/protocols/knxnetip/.factorypath
@@@ -1,0 -1,0 +1,35 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/modbus/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/modbus/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/mqtt/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/mqtt/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/opcua/.factorypath
index 0000000000,0000000000..9d47e196f7
new file mode 100644
--- /dev/null
+++ b/protocols/opcua/.factorypath
@@@ -1,0 -1,0 +1,62 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-core/3.9.6/maven-core-3.9.6.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-model/3.9.6/maven-model-3.9.6.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-settings/3.9.6/maven-settings-3.9.6.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-settings-builder/3.9.6/maven-settings-builder-3.9.6.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-sec-dispatcher/2.0/plexus-sec-dispatcher-2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-cipher/2.0/plexus-cipher-2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-builder-support/3.9.6/maven-builder-support-3.9.6.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-repository-metadata/3.9.6/maven-repository-metadata-3.9.6.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-artifact/3.9.4/maven-artifact-3.9.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-plugin-api/3.9.6/maven-plugin-api-3.9.6.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-model-builder/3.9.6/maven-model-builder-3.9.6.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-resolver-provider/3.9.6/maven-resolver-provider-3.9.6.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/resolver/maven-resolver-impl/1.9.18/maven-resolver-impl-1.9.18.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/resolver/maven-resolver-named-locks/1.9.18/maven-resolver-named-locks-1.9.18.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/resolver/maven-resolver-api/1.9.18/maven-resolver-api-1.9.18.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/resolver/maven-resolver-spi/1.9.18/maven-resolver-spi-1.9.18.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/resolver/maven-resolver-util/1.9.18/maven-resolver-util-1.9.18.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/shared/maven-shared-utils/3.3.4/maven-shared-utils-3.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.9.0.M2/org.eclipse.sisu.plexus-0.9.0.M2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/javax.annotation-api/1.2/javax.annotation-api-1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.9.0.M2/org.eclipse.sisu.inject-0.9.0.M2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/5.1.0/guice-5.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/33.0.0-jre/guava-33.0.0-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/3.5.1/plexus-utils-3.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.7.0/plexus-classworlds-2.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-interpolation/1.26/plexus-interpolation-1.26.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.0/plexus-component-annotations-2.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/open-protocol/.factorypath
index 0000000000,0000000000..30ccc86872
new file mode 100644
--- /dev/null
+++ b/protocols/open-protocol/.factorypath
@@@ -1,0 -1,0 +1,35 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/plc4x-api/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/plc4x-api/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/plc4x/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/plc4x/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/profinet/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/profinet/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/s7/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/s7/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/simulated/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/simulated/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/socketcan/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/socketcan/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/umas/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/umas/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc src/site/asciidoc/users/download.adoc
index bc17005e61,cf1edee462..cdac305361
--- a/src/site/asciidoc/users/download.adoc
+++ b/src/site/asciidoc/users/download.adoc
@@@ -21,7 -21,59 +21,63 @@@ Be sure to verify your downloads by the
  
  === Current Releases
  
++<<<<<<< HEAD
 +==== 0.11.0 Official https://www.apache.org/dyn/closer.lua/plc4x/0.11.0/apache-plc4x-0.12.0-source-release.zip[source release] [ https://downloads.apache.org/plc4x/0.11.0/apache-plc4x-0.12.0-source-release.zip.sha512[SHA512] ] [ https://downloads.apache.org/plc4x/0.11.0/apache-plc4x-0.12.0-source-release.zip.asc[ASC] ]
++=======
+ ==== 0.12.0 Official https://www.apache.org/dyn/closer.lua/plc4x/0.12.0/apache-plc4x-0.12.0-source-release.zip[source release] [ https://downloads.apache.org/plc4x/0.12.0/apache-plc4x-0.12.0-source-release.zip.sha512[SHA512] ] [ https://downloads.apache.org/plc4x/0.12.0/apache-plc4x-0.12.0-source-release.zip.asc[ASC] ]
+ 
+ This release was mainly a release containing many bugfixes. We literally halved the number of open issues. A second major topic would have been another API streamlining in preparation to aiming for the big 1.0.0 release. The API was extended by additional features, that now allow tools to automatically provide support for tool assist when connecting to devices. Now additional information such as:
+ - Which transports does a given driver support?
+ - Which is the default transport for a given driver?
+ - Which configuration-options does a driver have?
+ - What types are these configuration options?
+ - What are the default-values these configuration options have?
+ - Which of these configuration options are required?
+ - The same set of information is also available for the transports a driver is using.
+ 
+ ===== New Features
+ 
+ - API: Made several bits of information available via the API
+ allowing tools to provide more content assist when dealing
+ with PLC4X connections.
+ - S7: The S7 driver now supports reading of STRING and
+ WSTRING data-types without providing a maximum length.
+ - Build: Worked on making PLC4X provide reproducible builds.
+ - Added "Ping" functionality to: ADS, EIP, KNX, Mock, Modbus
+ and Simulated drivers.
+ - The OPC-UA Java driver now support certificate-based
+ authentication and encryption.
+ 
+ ===== Incompatible changes
+ 
+ - Java 8 is no longer officially supported and Java 11 is the
+ new base-line.
+ - Renamed the PlcDriverManager method `listDrivers` to
+ `getProtocolCodes`
+ - Renamed the PlcDriverMetadata method `canDiscover` to
+ `isDiscoverySupported`
+ - Renamed the PlcConnectionMetadata methods `canRead`, `canWrite`
+ `canSubscribe` and `canBrowse` to `isReadSupported`,
+ `isWriteSupported`, `isSubscribeSupported` and `isBrowseSupported`
+ - The configuration syntax for configuring transport-related
+ config options in the connection-string was updated to be
+ now prefixed with the transport name the option belongs to.
+ 
+ ===== Bug Fixes
+ 
+ - S7: Several bugs and issues regarding supporting various
+ duration, date and time data-types.
+ - S7: Implemented the missing 64bit (L-) types.
+ - KNX: Fixed an issue with decoding 16 bit floating point
+ numbers.
+ - NiFi-Integration: The NiFi integration module was greatly
+ improved.
+ - Core: Fixed several leaks of open threads.
+ 
+ === Previous Releases
+ 
+ ==== 0.11.0 Official https://archive.apache.org/dist/plc4x/0.11.0/apache-plc4x-0.11.0-source-release.zip[source release] [ https://downloads.apache.org/plc4x/0.11.0/apache-plc4x-0.11.0-source-release.zip.sha512[SHA512] ] [ https://downloads.apache.org/plc4x/0.11.0/apache-plc4x-0.10.0-source-release.zip.asc[ASC] ]
++>>>>>>> develop
  
  The APIs have been streamlined in a preparation for a hopefully soon 1.0.0 release.
  Many drivers have been re-implemented with much more features.