You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by gn...@apache.org on 2022/12/08 13:01:50 UTC
[camel] 01/03: Rewrite script
This is an automated email from the ASF dual-hosted git repository.
gnodet pushed a commit to branch jakarta/jetty
in repository https://gitbox.apache.org/repos/asf/camel.git
commit d013c40b0d1466ea922f48a5192c4b4590bbae0c
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Thu Nov 24 15:53:25 2022 +0100
Rewrite script
---
jakarta/rewrite.java | 422 +++++++++++++++++++++++++++++++++++++++++++++++++++
jakarta/transform.sh | 367 ++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 789 insertions(+)
diff --git a/jakarta/rewrite.java b/jakarta/rewrite.java
new file mode 100755
index 00000000000..4dc8fba6ff1
--- /dev/null
+++ b/jakarta/rewrite.java
@@ -0,0 +1,422 @@
+///usr/bin/env jbang "$0" "$@" ; exit $?
+//DEPS info.picocli:picocli:4.5.0
+
+import java.io.IOError;
+import java.io.IOException;
+import java.io.InterruptedIOException;
+import java.nio.charset.MalformedInputException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
+import java.util.Objects;
+import java.util.concurrent.Callable;
+import java.util.regex.Pattern;
+import java.util.stream.Stream;
+
+import picocli.CommandLine;
+import picocli.CommandLine.Command;
+import picocli.CommandLine.Option;
+import picocli.CommandLine.Parameters;
+
+@Command(name = "rewrite")
+class rewrite implements Callable<Integer> {
+
+ public static void main(String... args) throws Exception {
+ int exitCode = new CommandLine(new rewrite()).execute(args);
+ System.exit(exitCode);
+ }
+
+
+ @Override
+ public Integer call() throws Exception {
+ // Rebase on top of main
+ // exec("git", "checkout", "jakarta-rewrite");
+ // Create/reset branch 'rewritten'
+ // exec("git", "checkout", "-B", "jakarta-rewritten", "jakarta-rewrite");
+
+ // Switch version to 4.0.0-SNAPSHOT
+ System.out.println("Switch version to 4.0.0-SNAPSHOT");
+ try (Stream<Path> files = Files.walk(Paths.get("."))) {
+ files.forEach(p -> {
+ String name = p.getFileName().toString();
+ if (name.equals("pom.xml")) {
+ regex(p, "<version>3\\.20\\.0-SNAPSHOT</version>", "<version>4.0.0-SNAPSHOT</version>");
+ } else if (p.toString().contains("/src/generated/resources/")) {
+ if (name.endsWith(".properties")) {
+ regex(p, "version=3.20.0-SNAPSHOT", "version=4.0.0-SNAPSHOT");
+ } else if (name.endsWith(".json")) {
+ regex(p, "\"version\": \"3\\.20\\.0-SNAPSHOT\"", "\"version\": \"4.0.0-SNAPSHOT\"");
+ }
+ }
+ });
+ }
+
+ // Remove OSGi support
+ System.out.println("Remove OSGi support");
+ try (Stream<Path> files = Files.walk(Paths.get("."))) {
+ files
+ .filter(p -> p.getFileName().toString().equals("pom.xml"))
+ .forEach(p -> regex(p,
+ " *<([^>]+-version-range)>[^<]+</\\1> *\n", "",
+ " *<(camel\\.osgi\\.[^>]+)(>[^<]+</\\1>| */>) *\n", "",
+ " *<!-- OSGi bundles properties --> *\n", "",
+ " *<(plugin|pluginExecutionFilter)>\\s*<groupId>org.apache.camel</groupId>\\s*<artifactId>camel-bundle-plugin</artifactId>[\\s\\S]*?</\\1> *\n", "",
+ " *<module>init</module> *\n", ""
+ ));
+ }
+
+ // Switch to javax.annotation.processing.Generated
+ System.out.println("Switch to javax.annotation.processing.Generated");
+ try (Stream<Path> files = Files.walk(Paths.get("."))) {
+ files
+ .filter(p -> {
+ String name = p.getFileName().toString();
+ return name.endsWith(".java") || name.endsWith(".txt") || name.endsWith(".vm");
+ })
+ .forEach(p -> regex(p,
+ "javax.annotation.processing.Generated", "javax.annotation.processing.Generated"
+ ));
+ }
+
+ // Add support for jakarta in checkstyle
+ System.out.println("Add support for jakarta in checkstyle");
+ try (Stream<Path> files = Stream.of(
+ "pom.xml",
+ "etc/pom.xml",
+ "buildingtools/src/main/resources/camel-checkstyle.xml").map(Paths::get)) {
+ files.forEach(p -> regex(p,
+ "java;javax;org.w3c;org.xml;w3c;", "java;jakarta;javax;org.w3c;org.xml;w3c;",
+ "java,javax,org.w3c,org.xml,junit", "java,jakarta,javax,org.w3c,org.xml,junit"
+ ));
+ }
+
+ // Switch javax packages to jakarta
+ System.out.println("Switch javax packages to jakarta");
+ try (Stream<Path> files = Files.walk(Paths.get("."))) {
+ files
+ .filter(p -> p.getFileName().toString().endsWith(".java") && !p.toString().equals("jakarta/rewrite.java"))
+ .forEach(p -> regex(p,
+ "javax\\.activation", "jakarta\\.activation",
+ "javax\\.annotation\\.security", "jakarta\\.annotation\\.security",
+ "javax\\.annotation\\.sql", "jakarta\\.annotation\\.sql",
+ "javax\\.annotation(?!\\.processing)", "jakarta\\.annotation",
+ "javax\\.batch\\.api\\.chunk\\.listener", "jakarta\\.batch\\.api\\.chunk\\.listener",
+ "javax\\.batch\\.api\\.chunk", "jakarta\\.batch\\.api\\.chunk",
+ "javax\\.batch\\.api\\.listener", "jakarta\\.batch\\.api\\.listener",
+ "javax\\.batch\\.api\\.partition", "jakarta\\.batch\\.api\\.partition",
+ "javax\\.batch\\.api", "jakarta\\.batch\\.api",
+ "javax\\.batch\\.operations", "jakarta\\.batch\\.operations",
+ "javax\\.batch\\.runtime\\.context", "jakarta\\.batch\\.runtime\\.context",
+ "javax\\.batch\\.runtime", "jakarta\\.batch\\.runtime",
+ "javax\\.decorator", "jakarta\\.decorator",
+ "javax\\.ejb\\.embeddable", "jakarta\\.ejb\\.embeddable",
+ "javax\\.ejb\\.spi", "jakarta\\.ejb\\.spi",
+ "javax\\.ejb", "jakarta\\.ejb",
+ "javax\\.el", "jakarta\\.el",
+ "javax\\.enterprise\\.concurrent", "jakarta\\.enterprise\\.concurrent",
+ "javax\\.enterprise\\.context\\.control", "jakarta\\.enterprise\\.context\\.control",
+ "javax\\.enterprise\\.context\\.spi", "jakarta\\.enterprise\\.context\\.spi",
+ "javax\\.enterprise\\.context", "jakarta\\.enterprise\\.context",
+ "javax\\.enterprise\\.event", "jakarta\\.enterprise\\.event",
+ "javax\\.enterprise\\.inject\\.literal", "jakarta\\.enterprise\\.inject\\.literal",
+ "javax\\.enterprise\\.inject\\.se", "jakarta\\.enterprise\\.inject\\.se",
+ "javax\\.enterprise\\.inject\\.spi\\.configurator", "jakarta\\.enterprise\\.inject\\.spi\\.configurator",
+ "javax\\.enterprise\\.inject\\.spi", "jakarta\\.enterprise\\.inject\\.spi",
+ "javax\\.enterprise\\.inject", "jakarta\\.enterprise\\.inject",
+ "javax\\.enterprise\\.util", "jakarta\\.enterprise\\.util",
+ "javax\\.faces\\.annotation", "jakarta\\.faces\\.annotation",
+ "javax\\.faces\\.application", "jakarta\\.faces\\.application",
+ "javax\\.faces\\.bean", "jakarta\\.faces\\.bean",
+ "javax\\.faces\\.component\\.behavior", "jakarta\\.faces\\.component\\.behavior",
+ "javax\\.faces\\.component\\.html", "jakarta\\.faces\\.component\\.html",
+ "javax\\.faces\\.component\\.search", "jakarta\\.faces\\.component\\.search",
+ "javax\\.faces\\.component\\.visit", "jakarta\\.faces\\.component\\.visit",
+ "javax\\.faces\\.component", "jakarta\\.faces\\.component",
+ "javax\\.faces\\.context", "jakarta\\.faces\\.context",
+ "javax\\.faces\\.convert", "jakarta\\.faces\\.convert",
+ "javax\\.faces\\.el", "jakarta\\.faces\\.el",
+ "javax\\.faces\\.event", "jakarta\\.faces\\.event",
+ "javax\\.faces\\.flow\\.builder", "jakarta\\.faces\\.flow\\.builder",
+ "javax\\.faces\\.flow", "jakarta\\.faces\\.flow",
+ "javax\\.faces\\.lifecycle", "jakarta\\.faces\\.lifecycle",
+ "javax\\.faces\\.model", "jakarta\\.faces\\.model",
+ "javax\\.faces\\.push", "jakarta\\.faces\\.push",
+ "javax\\.faces\\.render", "jakarta\\.faces\\.render",
+ "javax\\.faces\\.validator", "jakarta\\.faces\\.validator",
+ "javax\\.faces\\.view\\.facelets", "jakarta\\.faces\\.view\\.facelets",
+ "javax\\.faces\\.view", "jakarta\\.faces\\.view",
+ "javax\\.faces\\.webapp", "jakarta\\.faces\\.webapp",
+ "javax\\.faces", "jakarta\\.faces",
+ "javax\\.inject", "jakarta\\.inject",
+ "javax\\.interceptor", "jakarta\\.interceptor",
+ "javax\\.jms", "jakarta\\.jms",
+ "javax\\.json\\.bind\\.adapter", "jakarta\\.json\\.bind\\.adapter",
+ "javax\\.json\\.bind\\.annotation", "jakarta\\.json\\.bind\\.annotation",
+ "javax\\.json\\.bind\\.config", "jakarta\\.json\\.bind\\.config",
+ "javax\\.json\\.bind\\.serializer", "jakarta\\.json\\.bind\\.serializer",
+ "javax\\.json\\.bind\\.spi", "jakarta\\.json\\.bind\\.spi",
+ "javax\\.json\\.bind", "jakarta\\.json\\.bind",
+ "javax\\.json\\.spi", "jakarta\\.json\\.spi",
+ "javax\\.json\\.stream", "jakarta\\.json\\.stream",
+ "javax\\.json", "jakarta\\.json",
+ "javax\\.jws\\.soap", "jakarta\\.jws\\.soap",
+ "javax\\.jws", "jakarta\\.jws",
+ "javax\\.mail\\.event", "jakarta\\.mail\\.event",
+ "javax\\.mail\\.internet", "jakarta\\.mail\\.internet",
+ "javax\\.mail\\.search", "jakarta\\.mail\\.search",
+ "javax\\.mail\\.util", "jakarta\\.mail\\.util",
+ "javax\\.mail", "jakarta\\.mail",
+ "javax\\.persistence\\.criteria", "jakarta\\.persistence\\.criteria",
+ "javax\\.persistence\\.metamodel", "jakarta\\.persistence\\.metamodel",
+ "javax\\.persistence\\.spi", "jakarta\\.persistence\\.spi",
+ "javax\\.persistence", "jakarta\\.persistence",
+ "javax\\.resource\\.cci", "jakarta\\.resource\\.cci",
+ "javax\\.resource\\.spi\\.endpoint", "jakarta\\.resource\\.spi\\.endpoint",
+ "javax\\.resource\\.spi\\.security", "jakarta\\.resource\\.spi\\.security",
+ "javax\\.resource\\.spi\\.work", "jakarta\\.resource\\.spi\\.work",
+ "javax\\.resource\\.spi", "jakarta\\.resource\\.spi",
+ "javax\\.resource", "jakarta\\.resource",
+ "javax\\.security\\.auth\\.message\\.callback", "jakarta\\.security\\.auth\\.message\\.callback",
+ "javax\\.security\\.auth\\.message\\.config", "jakarta\\.security\\.auth\\.message\\.config",
+ "javax\\.security\\.auth\\.message\\.module", "jakarta\\.security\\.auth\\.message\\.module",
+ "javax\\.security\\.auth\\.message", "jakarta\\.security\\.auth\\.message",
+ "javax\\.security\\.enterprise\\.authentication\\.mechanism\\.http", "jakarta\\.security\\.enterprise\\.authentication\\.mechanism\\.http",
+ "javax\\.security\\.enterprise\\.credential", "jakarta\\.security\\.enterprise\\.credential",
+ "javax\\.security\\.enterprise\\.identitystore", "jakarta\\.security\\.enterprise\\.identitystore",
+ "javax\\.security\\.enterprise", "jakarta\\.security\\.enterprise",
+ "javax\\.security\\.jacc", "jakarta\\.security\\.jacc",
+ "javax\\.servlet\\.annotation", "jakarta\\.servlet\\.annotation",
+ "javax\\.servlet\\.descriptor", "jakarta\\.servlet\\.descriptor",
+ "javax\\.servlet\\.http", "jakarta\\.servlet\\.http",
+ "javax\\.servlet\\.jsp\\.el", "jakarta\\.servlet\\.jsp\\.el",
+ "javax\\.servlet\\.jsp\\.jstl\\.core", "jakarta\\.servlet\\.jsp\\.jstl\\.core",
+ "javax\\.servlet\\.jsp\\.jstl\\.fmt", "jakarta\\.servlet\\.jsp\\.jstl\\.fmt",
+ "javax\\.servlet\\.jsp\\.jstl\\.sql", "jakarta\\.servlet\\.jsp\\.jstl\\.sql",
+ "javax\\.servlet\\.jsp\\.jstl\\.tlv", "jakarta\\.servlet\\.jsp\\.jstl\\.tlv",
+ "javax\\.servlet\\.jsp\\.jstl", "jakarta\\.servlet\\.jsp\\.jstl",
+ "javax\\.servlet\\.jsp\\.resources", "jakarta\\.servlet\\.jsp\\.resources",
+ "javax\\.servlet\\.jsp\\.tagext", "jakarta\\.servlet\\.jsp\\.tagext",
+ "javax\\.servlet\\.jsp", "jakarta\\.servlet\\.jsp",
+ "javax\\.servlet\\.resources", "jakarta\\.servlet\\.resources",
+ "javax\\.servlet", "jakarta\\.servlet",
+ "javax\\.transaction", "jakarta\\.transaction",
+ "javax\\.validation\\.bootstrap", "jakarta\\.validation\\.bootstrap",
+ "javax\\.validation\\.constraints", "jakarta\\.validation\\.constraints",
+ "javax\\.validation\\.constraintvalidation", "jakarta\\.validation\\.constraintvalidation",
+ "javax\\.validation\\.executable", "jakarta\\.validation\\.executable",
+ "javax\\.validation\\.groups", "jakarta\\.validation\\.groups",
+ "javax\\.validation\\.metadata", "jakarta\\.validation\\.metadata",
+ "javax\\.validation\\.spi", "jakarta\\.validation\\.spi",
+ "javax\\.validation\\.valueextraction", "jakarta\\.validation\\.valueextraction",
+ "javax\\.validation", "jakarta\\.validation",
+ "javax\\.websocket\\.server", "jakarta\\.websocket\\.server",
+ "javax\\.websocket", "jakarta\\.websocket",
+ "javax\\.ws\\.rs\\.client", "jakarta\\.ws\\.rs\\.client",
+ "javax\\.ws\\.rs\\.container", "jakarta\\.ws\\.rs\\.container",
+ "javax\\.ws\\.rs\\.core", "jakarta\\.ws\\.rs\\.core",
+ "javax\\.ws\\.rs\\.ext", "jakarta\\.ws\\.rs\\.ext",
+ "javax\\.ws\\.rs\\.sse", "jakarta\\.ws\\.rs\\.sse",
+ "javax\\.ws\\.rs", "jakarta\\.ws\\.rs",
+ "javax\\.xml\\.bind\\.annotation\\.adapters", "jakarta\\.xml\\.bind\\.annotation\\.adapters",
+ "javax\\.xml\\.bind\\.annotation", "jakarta\\.xml\\.bind\\.annotation",
+ "javax\\.xml\\.bind\\.attachment", "jakarta\\.xml\\.bind\\.attachment",
+ "javax\\.xml\\.bind\\.helpers", "jakarta\\.xml\\.bind\\.helpers",
+ "javax\\.xml\\.bind\\.util", "jakarta\\.xml\\.bind\\.util",
+ "javax\\.xml\\.bind", "jakarta\\.xml\\.bind",
+ "javax\\.xml\\.soap", "jakarta\\.xml\\.soap",
+ "javax\\.xml\\.ws\\.handler\\.soap", "jakarta\\.xml\\.ws\\.handler\\.soap",
+ "javax\\.xml\\.ws\\.handler", "jakarta\\.xml\\.ws\\.handler",
+ "javax\\.xml\\.ws\\.http", "jakarta\\.xml\\.ws\\.http",
+ "javax\\.xml\\.ws\\.soap", "jakarta\\.xml\\.ws\\.soap",
+ "javax\\.xml\\.ws\\.spi\\.http", "jakarta\\.xml\\.ws\\.spi\\.http",
+ "javax\\.xml\\.ws\\.spi", "jakarta\\.xml\\.ws\\.spi",
+ "javax\\.xml\\.ws\\.wsaddressing", "jakarta\\.xml\\.ws\\.wsaddressing",
+ "javax\\.xml\\.ws", "jakarta\\.xml\\.ws"
+ ));
+ }
+
+ // Switch POMs to jakarta specs and other upgrades
+ System.out.println("Switch POMs to jakarta specs and other upgrades");
+ try (Stream<Path> files = Files.walk(Paths.get("."))) {
+ files
+ .filter(p -> p.getFileName().toString().equals("pom.xml"))
+ .forEach(p -> regex(p,
+ "<(jakarta-mail-version)>.*?</\\1>", "<$1>2.0.1</$1>",
+ "<(undertow-version)>[^<]+</\\1>", "<$1>2.3.0.Final</$1>",
+ // JAXB
+ "jaxb-api-version", "jakarta-xml-bind-api-version",
+ "jakarta-jaxb-version", "jakarta-xml-bind-api-version",
+ "(<dependency>\\s*)<groupId>javax\\.xml\\.bind</groupId>(\\s*)<artifactId>jaxb-api</artifactId>", "$1<groupId>jakarta.xml.bind</groupId>$2<artifactId>jakarta.xml.bind-api</artifactId>",
+ "(<dependency>\\s*<groupId>jakarta\\.xml\\.bind</groupId>\\s*<artifactId>jakarta\\.xml\\.bind-api</artifactId>\\s*)<version>.*?</version>", "$1<version>\\$\\{jakarta-xml-bind-api-version\\}</version>",
+ "<(jakarta-xml-bind-api-version)>.*?</\\1>", "<$1>4.0.0</$1>",
+ "<(glassfish-jaxb-runtime-version)>.*?</\\1>", "<$1>4.0.1</$1>",
+ "<(jaxb2-maven-plugin-version)>.*?</\\1>", "<$1>3.1.0</$1>",
+ "<(jaxb-core-version)>.*?</\\1>", "<$1>4.0.1</$1>",
+ "<(jaxb-impl-version)>.*?</\\1>", "<$1>4.0.1</$1>",
+ "<(jaxb-osgi-version)>.*?</\\1>", "<$1>4.0.1</$1>",
+ // Activation
+ "javax-activation-version", "jakarta-activation-version",
+ "<(jakarta-activation-version)>.*?</\\1>", "<$1>2.0.1</$1>",
+ "(<dependency>\\s*<groupId>com\\.sun\\.activation</groupId>\\s*)<artifactId>javax\\.activation</artifactId>", "$1<artifactId>jakarta.activation</artifactId>",
+ // Annotations
+ "javax-annotation-api-version", "jakarta-annotation-api-version",
+ "<(jakarta-annotation-api-version)>.*?</\\1>", "<$1>2.1.1</$1>",
+ "(<dependency>\\s*)<groupId>javax\\.annotation</groupId>(\\s*)<artifactId>javax\\.annotation-api</artifactId>", "$1<groupId>jakarta.annotation</groupId>$2<artifactId>jakarta.annotation-api</artifactId>",
+ "(<dependency>\\s*)<groupId>org.apache.geronimo.specs</groupId>(\\s*)<artifactId>geronimo-annotation_1.0_spec</artifactId>", "$1<groupId>jakarta.annotation</groupId>$2<artifactId>jakarta.annotation-api</artifactId>",
+ "(<dependency>\\s*<groupId>jakarta\\.annotation</groupId>\\s*<artifactId>jakarta\\.annotation-api</artifactId>\\s*)<version>.*?</version>", "$1<version>\\$\\{jakarta-annotation-api-version\\}</version>",
+ // Spring
+ " *<(spring5-version)>.*?</\\1> *\n", "",
+ "spring5-version", "spring-version",
+ "<(spring-version)>.*?</\\1>", "<$1>6.0.2</$1>",
+ // CDI
+ "weld3-version", "weld-version",
+ "<(weld-version)>.*?</\\1>", "<$1>5.1.0.Final</$1>",
+ "cdi-api-2.0-version", "jakarta-enterprise-cdi-api-version",
+ "jakarta-cdi-api-version", "jakarta-enterprise-cdi-api-version",
+ "<(jakarta-enterprise-cdi-api-version)>.*?</\\1>", "<$1>4.0.1</$1>",
+ "(<dependency>\\s*)<groupId>javax\\.enterprise</groupId>(\\s+)<artifactId>cdi-api</artifactId>", "$1<groupId>jakarta.enterprise</groupId>$2<artifactId>jakarta.enterprise.cdi-api</artifactId>",
+ // JMS
+ "geronimo-jms-spec-version", "jakarta-jms-api-version",
+ "<(jakarta-jms-api-version)>.*?</\\1>", "<$1>3.1.0</$1>",
+ "<(geronimo-jms2-spec-version)>.*?</\\1>", "<$1>\\${jakarta-jms-api-version}</$1>",
+ "(<dependency>\\s*)<groupId>org.apache.geronimo.specs</groupId>(\\s*)<artifactId>geronimo-jms_1.1_spec</artifactId>", "$1<groupId>jakarta.jms</groupId>$2<artifactId>jakarta.jms-api</artifactId>",
+ "(<dependency>\\s*)<groupId>org.apache.geronimo.specs</groupId>(\\s*)<artifactId>geronimo-jms_2.0_spec</artifactId>", "$1<groupId>jakarta.jms</groupId>$2<artifactId>jakarta.jms-api</artifactId>",
+ // JPA
+ "geronimo-jpa-spec-version", "jakarta-persistence-api-version",
+ "<(jakarta-persistence-api-version)>.*?</\\1>", "<$1>3.1.0</$1>",
+ "(<dependency>\\s*)<groupId>org.apache.geronimo.specs</groupId>(\\s*)<artifactId>geronimo-jpa_2.1_spec</artifactId>", "$1<groupId>jakarta.persistence</groupId>$2<artifactId>jakarta.persistence-api</artifactId>",
+ // JTA
+ "geronimo-jta-spec-version", "jakarta-transaction-api-version",
+ "<(jakarta-transaction-api-version)>.*?</\\1>", "<$1>2.0.1</$1>",
+ "(<dependency>\\s*)<groupId>org.apache.geronimo.specs</groupId>(\\s*)<artifactId>geronimo-jta_1.1_spec</artifactId>", "$1<groupId>jakarta.transaction</groupId>$2<artifactId>jakarta.transaction-api</artifactId>",
+ // Servlet
+ "<(undertow-version)>.*?</\\1>", "<$1>2.3.0.Final</$1>",
+ " *<(jetty9-version)>.*?</\\1> *\n", "",
+ "jetty9-version", "jetty-version",
+ "<(jetty-version)>.*?</\\1>", "<$1>11.0.12</$1>",
+ "javax-servlet-api-version", "jakarta-servlet-api-version",
+ "<(jakarta-servlet-api-version)>.*?</\\1>", "<$1>6.0.0</$1>",
+ "(<dependency>\\s*)<groupId>javax\\.servlet</groupId>(\\s*)<artifactId>javax\\.servlet-api</artifactId>", "$1<groupId>jakarta.servlet</groupId>$2<artifactId>jakarta.servlet-api</artifactId>",
+ "<(cxf-version)>.*?</\\1>", "<$1>4.0.0-SNAPSHOT</$1>",
+ "<(cxf-codegen-plugin-version)>.*?</\\1>", "<$1>4.0.0-SNAPSHOT</$1>",
+ "<(cxf-xjc-plugin-version)>.*?</\\1>", "<$1>4.0.0</$1>",
+ "<(cxf-xjc-utils-version)>.*?</\\1>", "<$1>4.0.0</$1>",
+ "<frontEnd>jaxws21</frontEnd>", "<frontEnd>jaxws</frontEnd>",
+ "Camel Jetty 9\\.x support", "Camel Jetty 11.x support",
+ // JAXWS
+ "<(jaxb-jxc-version)>.*?</\\1>", "<$1>4.0.1</$1>",
+ "<(jaxb-xjc-version)>.*?</\\1>", "<$1>4.0.1</$1>",
+ "<(javax-soap-api-version)>.*?</\\1>", "<$1>3.0.0</$1>",
+ "geronimo-ws-metadata-spec-version", "jakarta-jws-api-version",
+ "jaxws-api-version", "jakarta-xml-ws-api-version",
+ "javax-soap-api-version", "jakarta-xml-soap-api-version",
+ "<(jakarta-xml-soap-api-version)>.*?</\\1>", "<$1>3.0.0</$1>",
+ "<(jakarta-xml-ws-api-version)>.*?</\\1>", "<$1>4.0.0</$1>",
+ "<(jakarta-jws-api-version)>.*?</\\1>", "<$1>3.0.0</$1>",
+ "(<dependency>\\s*)<groupId>javax\\.xml\\.ws</groupId>(\\s*)<artifactId>jaxws-api</artifactId>", "$1<groupId>jakarta.xml.ws</groupId>$2<artifactId>jakarta.xml.ws-api</artifactId>",
+ "(<dependency>\\s*)<groupId>org\\.apache\\.geronimo\\.specs</groupId>(\\s*)<artifactId>geronimo-ws-metadata_2.0_spec</artifactId>", "$1<groupId>jakarta.jws</groupId>$2<artifactId>jakarta.jws-api</artifactId>",
+ "(<dependency>\\s*)<groupId>javax\\.xml\\.soap</groupId>(\\s*)<artifactId>javax\\.xml\\.soap-api</artifactId>", "$1<groupId>jakarta.xml.soap</groupId>$2<artifactId>jakarta.xml.soap-api</artifactId>",
+ // Other
+ "(<dependency>\\s*)<groupId>org.apache.geronimo.specs</groupId>(\\s*)<artifactId>geronimo-json_1.1_spec</artifactId>", "$1<groupId>jakarta.json</groupId>$2<artifactId>jakarta.json-api</artifactId>",
+ "(<dependency>\\s*)<groupId>org.apache.geronimo.specs</groupId>(\\s*)<artifactId>geronimo-jsonb_1.0_spec</artifactId>", "$1<groupId>jakarta.json.bind</groupId>$2<artifactId>jakarta.json.bind-api</artifactId>",
+ "(<dependency>\\s*)<groupId>org.apache.geronimo.specs</groupId>(\\s*)<artifactId>geronimo-jms_1.1_spec</artifactId>", "$1<groupId>jakarta.jms</groupId>$2<artifactId>jakarta.jws-api</artifactId>"
+ ));
+ }
+
+ regex(Paths.get("pom.xml"), "(( *)<jaxb-xjc-version>.*</jaxb-xjc-version>)", "$1\n$2<jaxb-jxc-version>4.0.1</jaxb-jxc-version>");
+ regex(Paths.get("parent/pom.xml"),
+ "(<plugin>\\s*<groupId>org.codehaus.mojo</groupId>\\s*<artifactId>jaxb2-maven-plugin</artifactId>[\\s\\S]*?)(</dependencies>\\s*</plugin>)",
+ "$1 <dependency>\n <groupId>com.sun.xml.bind</groupId>\n <artifactId>jaxb-xjc</artifactId>\n <version>\\${jaxb-xjc-version}</version>\n </dependency>\n <dependency>\n <groupId>com.sun.xml.bind</groupId>\n <artifactId>jaxb-jxc</artifactId>\n <version>\\${jaxb-jxc-version}</version>\n </dependency>\n $2");
+ regex(Paths.get("parent/pom.xml"),
+ " *<dependency>\\s+<groupId>jakarta.jms</groupId>\\s*<artifactId>jakarta.jms-api</artifactId>\\s+<version>\\$\\{geronimo-jms2-spec-version\\}</version>\\s+</dependency> *\n",
+ "");
+
+ // Spring
+ regex(Paths.get("components/camel-test/pom.xml"), "<module>camel-test-spring</module>", "<!--module>camel-test-spring</module-->");
+ regex(Paths.get("components/camel-spring-xml/src/test/java/org/apache/camel/spring/postprocessor/MagicAnnotationPostProcessor.java"),
+ "InstantiationAwareBeanPostProcessorAdapter", "SmartInstantiationAwareBeanPostProcessor",
+ "extends", "implements");
+
+ // CDI
+ regex(Paths.get("components/camel-test/pom.xml"), "<module>camel-test-cdi</module>", "<!--module>camel-test-cdi</module-->");
+ try (Stream<Path> files = Files.walk(Paths.get("components/camel-cdi/src"))) {
+ files
+ .filter(p -> p.getFileName().toString().endsWith(".java"))
+ .forEach(p -> regex(p,
+ "manager\\.createInjectionTarget\\((.*?)\\)\\;", "manager\\.getInjectionTargetFactory(\n $1).createInjectionTarget(null)\\;",
+ " @Override\\s+public boolean isNullable\\(\\)[\\s\n]+\\{\\s+return [^;]+;\\s+} *\n *\n", "",
+ "manager\\.fireEvent\\(([a-z]+), (.*?)\\);", "manager.getEvent().select($2).fire($1);",
+ "manager\\.fireEvent\\(([a-z]+)\\);", "manager.getEvent().fire($1);"
+ ));
+ }
+
+ // JAXB
+ regex(Paths.get("components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/mapper/DefaultNamespacePrefixMapper.java"),
+ "com.sun.xml.bind.marshaller", "org.glassfish.jaxb.runtime.marshaller");
+
+ // JMS
+ regex(Paths.get("components/pom.xml"),
+ "<module>camel-activemq</module>", "<!--module>camel-activemq</module-->");
+ regex(Paths.get("test-infra/pom.xml"),
+ "<module>camel-test-infra-activemq</module>", "<!--module>camel-test-infra-activemq</module-->");
+
+ // JAXWS
+ try (Stream<Path> files = Files.walk(Paths.get("components"))) {
+ files
+ .filter(p -> {
+ var name = p.getFileName().toString();
+ return name.endsWith(".xml") || name.endsWith(".xsd") || name.endsWith(".wsdl");
+ })
+ .forEach(p -> regex(p,
+ "http://java.sun.com/xml/ns/", "https://jakarta.ee/xml/ns/"
+ ));
+ }
+
+ // Add missing dependency
+ regex(Paths.get("components/camel-cxf/camel-cxf-common/pom.xml"),
+ "(<dependency>\n(\\s*)<groupId>[^<]*</groupId>\n\\s*<artifactId>[^<]*</artifactId>\n\\s*<scope>test</scope>\n(\\s*)</dependency>)",
+ "<dependency>\n$2<groupId>jakarta.xml.soap</groupId>\n$2<artifactId>jakarta.xml.soap-api</artifactId>\n$3</dependency>\n\n$3$1");
+
+ // Commit
+ exec("git", "commit", "-a", "-m", "Switch to jakarta namespace");
+
+ // Jetty 9 -> 11 migration
+ exec("git", "cherry-pick", "-x", "5e57bb6cc86bfdbc474f91fc2c152cb0fc03a9ff");
+
+ return 0;
+ }
+
+ private static void regex(Path path, String... expressions) throws IOError {
+ try {
+ var org = Files.readString(path);
+ var content = org;
+ for (int i = 0; i < expressions.length; i += 2) {
+ content = content.replaceAll(expressions[i], expressions[i+1]);
+ }
+ if (!Objects.equals(org, content)) {
+ Files.writeString(path, content, StandardOpenOption.TRUNCATE_EXISTING);
+ }
+ } catch (MalformedInputException e) {
+ System.out.println("Ignoring file because of bad encoding: " + path);
+ } catch (IOException e) {
+ throw new IOError(new IOException("Error processing file: " + path, e));
+ }
+ }
+
+ private static void exec(String... cmd) throws IOException {
+ var pb = new ProcessBuilder(cmd);
+ pb.redirectInput(ProcessBuilder.Redirect.INHERIT);
+ pb.redirectOutput(ProcessBuilder.Redirect.INHERIT);
+ pb.redirectError(ProcessBuilder.Redirect.INHERIT);
+ Process p = pb.start();
+ try {
+ p.waitFor();
+ } catch (InterruptedException e) {
+ throw (InterruptedIOException) new InterruptedIOException("Command interrupted").initCause(e);
+ }
+ if (p.exitValue() != 0) {
+ throw new IOException("Error executing '" + String.join(" ", (CharSequence[]) cmd));
+ }
+ }
+}
diff --git a/jakarta/transform.sh b/jakarta/transform.sh
new file mode 100755
index 00000000000..316a32e700e
--- /dev/null
+++ b/jakarta/transform.sh
@@ -0,0 +1,367 @@
+#!bash
+#
+#
+# TODO: investigate all occurrences of http://java.sun.com in the code
+#
+
+shopt -s globstar dotglob nullglob
+
+# Rebase on top of main
+git checkout jakarta-rewrite
+git pull --rebase origin main
+# Create/reset branch 'rewritten'
+git checkout -B jakarta-rewritten jakarta-rewrite
+
+# Switch version to 4.0.0-SNAPSHOT
+echo "Switching version to 4.0.0-SNAPSHOT"
+for pom in pom.xml **/pom.xml
+do
+ perl -i \
+ -0pe 's@<version>3.20.0-SNAPSHOT</version>@<version>4.0.0-SNAPSHOT</version>@g;' \
+ $pom
+done
+for dir in **/src/generated/resources
+do
+ for prop in $dir/**/*.properties
+ do
+ perl -i \
+ -0pe 's@version=3.20.0-SNAPSHOT@version=4.0.0-SNAPSHOT@g;' \
+ $prop
+ done
+ for json in $dir/**/*.json
+ do
+ perl -i \
+ -0pe 's@"version": "3.20.0-SNAPSHOT"@"version": "4.0.0-SNAPSHOT"@g;' \
+ $json
+ done
+done
+git commit -a -m "Switch to 4.0.0-SNAPSHOT"
+
+# Remove OSGi support
+echo "Remove OSGi support"
+for pom in pom.xml **/pom.xml
+do
+ perl -i \
+ -0pe 's@ *<([^>]+-version-range)>[^<]+</\1> *\n@@g;' \
+ -0pe 's@ *<(camel\.osgi\.[^>]+)(>[^<]+</\1>| */>) *\n@@g;' \
+ -0pe 's@ *<!-- OSGi bundles properties --> *\n@@g;' \
+ -0pe 's@ *<(plugin|pluginExecutionFilter)>\s*<groupId>org.apache.camel</groupId>\s*<artifactId>camel-bundle-plugin</artifactId>[\s\S]*?</\1> *\n@@g;' \
+ $pom
+done
+perl -i -0pe 's@ *<module>init</module> *\n@@g;' pom.xml
+git rm -r init
+git commit -a -m "Remove OSGi support"
+
+# Switch to javax.annotation.processing.Generated
+echo "Switch to javax.annotation.processing.Generated"
+for dir in **/src/{main,test,generated}
+do
+ for java in $dir/**/*.{java,txt,vm}
+ do
+ perl -i \
+ -0pe 's@javax.annotation.Generated@javax.annotation.processing.Generated@g;' \
+ $java
+ done
+done
+git commit -a -m "Switch to javax.annotation.processing.Generated"
+
+# Add support for jakarta in checkstyle
+echo "Add support for jakarta in checkstyle"
+for file in pom.xml etc/pom.xml buildingtools/**/camel-checkstyle.xml
+do
+ perl -i \
+ `# Add support for jakarta package in checkstyle` \
+ -0pe 's@java;javax;org.w3c;org.xml;w3c;@java;jakarta;javax;org.w3c;org.xml;w3c;@g;' \
+ -0pe 's@java,javax,org.w3c,org.xml,junit@java,jakarta,javax,org.w3c,org.xml,junit@g;' \
+ $file
+done
+git commit -a -m "Add support for jakarta in checkstyle"
+
+# Switch javax packages to jakarta
+echo "Switch javax packages to jakarta"
+for dir in **/src/{main,test,generated}
+do
+ for java in $dir/**/*.java
+ do
+ perl -i \
+ -0pe 's@javax.activation@jakarta.activation@g;' \
+ -0pe 's@javax.annotation.security@jakarta.annotation.security@g;' \
+ -0pe 's@javax.annotation.sql@jakarta.annotation.sql@g;' \
+ -0pe 's@javax.annotation(?!\.processing)@jakarta.annotation@g;' \
+ -0pe 's@javax.batch.api.chunk.listener@jakarta.batch.api.chunk.listener@g;' \
+ -0pe 's@javax.batch.api.chunk@jakarta.batch.api.chunk@g;' \
+ -0pe 's@javax.batch.api.listener@jakarta.batch.api.listener@g;' \
+ -0pe 's@javax.batch.api.partition@jakarta.batch.api.partition@g;' \
+ -0pe 's@javax.batch.api@jakarta.batch.api@g;' \
+ -0pe 's@javax.batch.operations@jakarta.batch.operations@g;' \
+ -0pe 's@javax.batch.runtime.context@jakarta.batch.runtime.context@g;' \
+ -0pe 's@javax.batch.runtime@jakarta.batch.runtime@g;' \
+ -0pe 's@javax.decorator@jakarta.decorator@g;' \
+ -0pe 's@javax.ejb.embeddable@jakarta.ejb.embeddable@g;' \
+ -0pe 's@javax.ejb.spi@jakarta.ejb.spi@g;' \
+ -0pe 's@javax.ejb@jakarta.ejb@g;' \
+ -0pe 's@javax.el@jakarta.el@g;' \
+ -0pe 's@javax.enterprise.concurrent@jakarta.enterprise.concurrent@g;' \
+ -0pe 's@javax.enterprise.context.control@jakarta.enterprise.context.control@g;' \
+ -0pe 's@javax.enterprise.context.spi@jakarta.enterprise.context.spi@g;' \
+ -0pe 's@javax.enterprise.context@jakarta.enterprise.context@g;' \
+ -0pe 's@javax.enterprise.event@jakarta.enterprise.event@g;' \
+ -0pe 's@javax.enterprise.inject.literal@jakarta.enterprise.inject.literal@g;' \
+ -0pe 's@javax.enterprise.inject.se@jakarta.enterprise.inject.se@g;' \
+ -0pe 's@javax.enterprise.inject.spi.configurator@jakarta.enterprise.inject.spi.configurator@g;' \
+ -0pe 's@javax.enterprise.inject.spi@jakarta.enterprise.inject.spi@g;' \
+ -0pe 's@javax.enterprise.inject@jakarta.enterprise.inject@g;' \
+ -0pe 's@javax.enterprise.util@jakarta.enterprise.util@g;' \
+ -0pe 's@javax.faces.annotation@jakarta.faces.annotation@g;' \
+ -0pe 's@javax.faces.application@jakarta.faces.application@g;' \
+ -0pe 's@javax.faces.bean@jakarta.faces.bean@g;' \
+ -0pe 's@javax.faces.component.behavior@jakarta.faces.component.behavior@g;' \
+ -0pe 's@javax.faces.component.html@jakarta.faces.component.html@g;' \
+ -0pe 's@javax.faces.component.search@jakarta.faces.component.search@g;' \
+ -0pe 's@javax.faces.component.visit@jakarta.faces.component.visit@g;' \
+ -0pe 's@javax.faces.component@jakarta.faces.component@g;' \
+ -0pe 's@javax.faces.context@jakarta.faces.context@g;' \
+ -0pe 's@javax.faces.convert@jakarta.faces.convert@g;' \
+ -0pe 's@javax.faces.el@jakarta.faces.el@g;' \
+ -0pe 's@javax.faces.event@jakarta.faces.event@g;' \
+ -0pe 's@javax.faces.flow.builder@jakarta.faces.flow.builder@g;' \
+ -0pe 's@javax.faces.flow@jakarta.faces.flow@g;' \
+ -0pe 's@javax.faces.lifecycle@jakarta.faces.lifecycle@g;' \
+ -0pe 's@javax.faces.model@jakarta.faces.model@g;' \
+ -0pe 's@javax.faces.push@jakarta.faces.push@g;' \
+ -0pe 's@javax.faces.render@jakarta.faces.render@g;' \
+ -0pe 's@javax.faces.validator@jakarta.faces.validator@g;' \
+ -0pe 's@javax.faces.view.facelets@jakarta.faces.view.facelets@g;' \
+ -0pe 's@javax.faces.view@jakarta.faces.view@g;' \
+ -0pe 's@javax.faces.webapp@jakarta.faces.webapp@g;' \
+ -0pe 's@javax.faces@jakarta.faces@g;' \
+ -0pe 's@javax.inject@jakarta.inject@g;' \
+ -0pe 's@javax.interceptor@jakarta.interceptor@g;' \
+ -0pe 's@javax.jms@jakarta.jms@g;' \
+ -0pe 's@javax.json.bind.adapter@jakarta.json.bind.adapter@g;' \
+ -0pe 's@javax.json.bind.annotation@jakarta.json.bind.annotation@g;' \
+ -0pe 's@javax.json.bind.config@jakarta.json.bind.config@g;' \
+ -0pe 's@javax.json.bind.serializer@jakarta.json.bind.serializer@g;' \
+ -0pe 's@javax.json.bind.spi@jakarta.json.bind.spi@g;' \
+ -0pe 's@javax.json.bind@jakarta.json.bind@g;' \
+ -0pe 's@javax.json.spi@jakarta.json.spi@g;' \
+ -0pe 's@javax.json.stream@jakarta.json.stream@g;' \
+ -0pe 's@javax.json@jakarta.json@g;' \
+ -0pe 's@javax.jws.soap@jakarta.jws.soap@g;' \
+ -0pe 's@javax.jws@jakarta.jws@g;' \
+ -0pe 's@javax.mail.event@jakarta.mail.event@g;' \
+ -0pe 's@javax.mail.internet@jakarta.mail.internet@g;' \
+ -0pe 's@javax.mail.search@jakarta.mail.search@g;' \
+ -0pe 's@javax.mail.util@jakarta.mail.util@g;' \
+ -0pe 's@javax.mail@jakarta.mail@g;' \
+ -0pe 's@javax.persistence.criteria@jakarta.persistence.criteria@g;' \
+ -0pe 's@javax.persistence.metamodel@jakarta.persistence.metamodel@g;' \
+ -0pe 's@javax.persistence.spi@jakarta.persistence.spi@g;' \
+ -0pe 's@javax.persistence@jakarta.persistence@g;' \
+ -0pe 's@javax.resource.cci@jakarta.resource.cci@g;' \
+ -0pe 's@javax.resource.spi.endpoint@jakarta.resource.spi.endpoint@g;' \
+ -0pe 's@javax.resource.spi.security@jakarta.resource.spi.security@g;' \
+ -0pe 's@javax.resource.spi.work@jakarta.resource.spi.work@g;' \
+ -0pe 's@javax.resource.spi@jakarta.resource.spi@g;' \
+ -0pe 's@javax.resource@jakarta.resource@g;' \
+ -0pe 's@javax.security.auth.message.callback@jakarta.security.auth.message.callback@g;' \
+ -0pe 's@javax.security.auth.message.config@jakarta.security.auth.message.config@g;' \
+ -0pe 's@javax.security.auth.message.module@jakarta.security.auth.message.module@g;' \
+ -0pe 's@javax.security.auth.message@jakarta.security.auth.message@g;' \
+ -0pe 's@javax.security.enterprise.authentication.mechanism.http@jakarta.security.enterprise.authentication.mechanism.http@g;' \
+ -0pe 's@javax.security.enterprise.credential@jakarta.security.enterprise.credential@g;' \
+ -0pe 's@javax.security.enterprise.identitystore@jakarta.security.enterprise.identitystore@g;' \
+ -0pe 's@javax.security.enterprise@jakarta.security.enterprise@g;' \
+ -0pe 's@javax.security.jacc@jakarta.security.jacc@g;' \
+ -0pe 's@javax.servlet.annotation@jakarta.servlet.annotation@g;' \
+ -0pe 's@javax.servlet.descriptor@jakarta.servlet.descriptor@g;' \
+ -0pe 's@javax.servlet.http@jakarta.servlet.http@g;' \
+ -0pe 's@javax.servlet.jsp.el@jakarta.servlet.jsp.el@g;' \
+ -0pe 's@javax.servlet.jsp.jstl.core@jakarta.servlet.jsp.jstl.core@g;' \
+ -0pe 's@javax.servlet.jsp.jstl.fmt@jakarta.servlet.jsp.jstl.fmt@g;' \
+ -0pe 's@javax.servlet.jsp.jstl.sql@jakarta.servlet.jsp.jstl.sql@g;' \
+ -0pe 's@javax.servlet.jsp.jstl.tlv@jakarta.servlet.jsp.jstl.tlv@g;' \
+ -0pe 's@javax.servlet.jsp.jstl@jakarta.servlet.jsp.jstl@g;' \
+ -0pe 's@javax.servlet.jsp.resources@jakarta.servlet.jsp.resources@g;' \
+ -0pe 's@javax.servlet.jsp.tagext@jakarta.servlet.jsp.tagext@g;' \
+ -0pe 's@javax.servlet.jsp@jakarta.servlet.jsp@g;' \
+ -0pe 's@javax.servlet.resources@jakarta.servlet.resources@g;' \
+ -0pe 's@javax.servlet@jakarta.servlet@g;' \
+ -0pe 's@javax.transaction@jakarta.transaction@g;' \
+ -0pe 's@javax.validation.bootstrap@jakarta.validation.bootstrap@g;' \
+ -0pe 's@javax.validation.constraints@jakarta.validation.constraints@g;' \
+ -0pe 's@javax.validation.constraintvalidation@jakarta.validation.constraintvalidation@g;' \
+ -0pe 's@javax.validation.executable@jakarta.validation.executable@g;' \
+ -0pe 's@javax.validation.groups@jakarta.validation.groups@g;' \
+ -0pe 's@javax.validation.metadata@jakarta.validation.metadata@g;' \
+ -0pe 's@javax.validation.spi@jakarta.validation.spi@g;' \
+ -0pe 's@javax.validation.valueextraction@jakarta.validation.valueextraction@g;' \
+ -0pe 's@javax.validation@jakarta.validation@g;' \
+ -0pe 's@javax.websocket.server@jakarta.websocket.server@g;' \
+ -0pe 's@javax.websocket@jakarta.websocket@g;' \
+ -0pe 's@javax.ws.rs.client@jakarta.ws.rs.client@g;' \
+ -0pe 's@javax.ws.rs.container@jakarta.ws.rs.container@g;' \
+ -0pe 's@javax.ws.rs.core@jakarta.ws.rs.core@g;' \
+ -0pe 's@javax.ws.rs.ext@jakarta.ws.rs.ext@g;' \
+ -0pe 's@javax.ws.rs.sse@jakarta.ws.rs.sse@g;' \
+ -0pe 's@javax.ws.rs@jakarta.ws.rs@g;' \
+ -0pe 's@javax.xml.bind.annotation.adapters@jakarta.xml.bind.annotation.adapters@g;' \
+ -0pe 's@javax.xml.bind.annotation@jakarta.xml.bind.annotation@g;' \
+ -0pe 's@javax.xml.bind.attachment@jakarta.xml.bind.attachment@g;' \
+ -0pe 's@javax.xml.bind.helpers@jakarta.xml.bind.helpers@g;' \
+ -0pe 's@javax.xml.bind.util@jakarta.xml.bind.util@g;' \
+ -0pe 's@javax.xml.bind@jakarta.xml.bind@g;' \
+ -0pe 's@javax.xml.soap@jakarta.xml.soap@g;' \
+ -0pe 's@javax.xml.ws.handler.soap@jakarta.xml.ws.handler.soap@g;' \
+ -0pe 's@javax.xml.ws.handler@jakarta.xml.ws.handler@g;' \
+ -0pe 's@javax.xml.ws.http@jakarta.xml.ws.http@g;' \
+ -0pe 's@javax.xml.ws.soap@jakarta.xml.ws.soap@g;' \
+ -0pe 's@javax.xml.ws.spi.http@jakarta.xml.ws.spi.http@g;' \
+ -0pe 's@javax.xml.ws.spi@jakarta.xml.ws.spi@g;' \
+ -0pe 's@javax.xml.ws.wsaddressing@jakarta.xml.ws.wsaddressing@g;' \
+ -0pe 's@javax.xml.ws@jakarta.xml.ws@g;' \
+ $java
+ done
+done
+git commit -a -m "Switch javax packages to jakarta"
+
+# Jetty 11 migration
+git cherry-pick -x 5e57bb6cc86bfdbc474f91fc2c152cb0fc03a9ff
+
+# Switch POMs to jakarta specs and other upgrades
+for pom in pom.xml **/pom.xml
+do
+ perl -i \
+ -0pe 's@<(jakarta-jaxb-version)>[0-9.]+</\1>@<$1>4.0.0</$1>@g;' \
+ -0pe 's@<(jaxb-api-version)>[0-9.]+</\1>@<$1>4.0.0</$1>@g;' \
+ -0pe 's@<(glassfish-jaxb-runtime-version)>[0-9.]+</\1>@<$1>4.0.1</$1>@g;' \
+ -0pe 's@<(jaxb2-maven-plugin-version)>[0-9.]+</\1>@<$1>3.1.0</$1>@g;' \
+ -0pe 's@<(jaxb-core-version)>[0-9.]+</\1>@<$1>4.0.1</$1>@g;' \
+ -0pe 's@<(jaxb-impl-version)>[0-9.]+</\1>@<$1>4.0.1</$1>@g;' \
+ -0pe 's@<(jaxb-osgi-version)>[0-9.]+</\1>@<$1>4.0.1</$1>@g;' \
+ -0pe 's@<(jakarta-mail-version)>[0-9.]+</\1>@<$1>2.0.1</$1>@g;' \
+ -0pe 's@<(undertow-version)>[^<]+</\1>@<$1>2.3.0.Final</$1>@g;' \
+ `# Annotations` \
+ -0pe 's@(<dependency>\s*)<groupId>javax.annotation</groupId>(\s*)<artifactId>javax.annotation-api</artifactId>@$1<groupId>jakarta.annotation</groupId>$2<artifactId>jakarta.annotation-api</artifactId>@g;' \
+ -0pe 's@(<dependency>\s*)<groupId>org.apache.geronimo.specs</groupId>(\s*)<artifactId>geronimo-annotation_1.0_spec</artifactId>@$1<groupId>jakarta.annotation</groupId>$2<artifactId>jakarta.annotation-api</artifactId>@g;' \
+ -0pe 's@<(javax-annotation-api-version)>[0-9.]+</\1>@<$1>2.1.1</$1>@g;' \
+ -0pe 's@javax-annotation-api-version@jakarta-annotation-api-version@g;' \
+ -0pe 's@(<dependency>\s+<groupId>jakarta.annotation</groupId>\s+<artifactId>jakarta.annotation-api</artifactId>\s+)<version>[^<]+</version>@$1<version>\${jakarta-annotation-api-version}</version>@g;' \
+ `# Spring ` \
+ -0pe 's@ *<(spring5-version)>.*?</\1> *\n@@g;' \
+ -0pe 's@spring5-version@spring-version@g;' \
+ -0pe 's@<(spring-version)>.*?</\1>@<$1>6.0.2</$1>@g;' \
+ `# CDI` \
+ -0pe 's@weld3-version@weld-version@g;' \
+ -0pe 's@<(weld-version)>.*?</\1>@<$1>5.1.0.Final</$1>@g;' \
+ -0pe 's@cdi-api-2.0-version@jakarta-enterprise-cdi-api-version@g;' \
+ -0pe 's@<(jakarta-enterprise-cdi-api-version)>.*?</\1>@<$1>4.0.1</$1>@g;' \
+ -0pe 's@(<dependency>\s*)<groupId>javax.enterprise</groupId>(\s+)<artifactId>cdi-api</artifactId>@$1<groupId>jakarta.enterprise</groupId>$2<artifactId>jakarta.enterprise.cdi-api</artifactId>@g;' \
+ `# JMS` \
+ -0pe 's@geronimo-jms-spec-version@jakarta-jms-api-version@g;' \
+ -0pe 's@<(jakarta-jms-api-version)>.*?</\1>@<$1>3.1.0</$1>@g;' \
+ -0pe 's@<(geronimo\-jms2\-spec\-version)>.*?</\1>@<$1>\${jakarta-jms-api-version}</$1>@g;' \
+ -0pe 's@(<dependency>\s*)<groupId>org.apache.geronimo.specs</groupId>(\s*)<artifactId>geronimo-jms_1.1_spec</artifactId>@$1<groupId>jakarta.jms</groupId>$2<artifactId>jakarta.jms-api</artifactId>@g;' \
+ -0pe 's@(<dependency>\s*)<groupId>org.apache.geronimo.specs</groupId>(\s*)<artifactId>geronimo-jms_2.0_spec</artifactId>@$1<groupId>jakarta.jms</groupId>$2<artifactId>jakarta.jms-api</artifactId>@g;' \
+ `# JPA` \
+ -0pe 's@geronimo-jpa-spec-version@jakarta-persistence-api-version@g;' \
+ -0pe 's@<(jakarta-persistence-api-version)>.*?</\1>@<$1>3.1.0</$1>@g;' \
+ -0pe 's@(<dependency>\s*)<groupId>org.apache.geronimo.specs</groupId>(\s*)<artifactId>geronimo-jpa_2.1_spec</artifactId>@$1<groupId>jakarta.persistence</groupId>$2<artifactId>jakarta.persistence-api</artifactId>@g;' \
+ `# JTA` \
+ -0pe 's@geronimo-jta-spec-version@jakarta-transaction-api-version@g;' \
+ -0pe 's@<(jakarta-transaction-api-version)>[0-9.]+</\1>@<$1>2.0.1</$1>@g;' \
+ -0pe 's@(<dependency>\s*)<groupId>org.apache.geronimo.specs</groupId>(\s*)<artifactId>geronimo-jta_1.1_spec</artifactId>@$1<groupId>jakarta.transaction</groupId>$2<artifactId>jakarta.transaction-api</artifactId>@g;' \
+ `# Servlet` \
+ -0pe 's@<(undertow-version)>[0-9.]+</\1>@<$1>2.3.0.Final</$1>@g;' \
+ -0pe 's@ *<(jetty9-version)>.*?</\1> *\n@@g;' \
+ -0pe 's@jetty9-version@jetty-version@g;' \
+ -0pe 's@<(jetty-version)>.*?</\1>@<$1>11.0.12</$1>@g;' \
+ -0pe 's@javax-servlet-api-version@jakarta-servlet-api-version@g;' \
+ -0pe 's@<(jakarta-servlet-api-version)>[0-9.]+</\1>@<$1>6.0.0</$1>@g;' \
+ -0pe 's@(<dependency>\s*)<groupId>javax.servlet</groupId>(\s*)<artifactId>javax.servlet-api</artifactId>@$1<groupId>jakarta.servlet</groupId>$2<artifactId>jakarta.servlet-api</artifactId>@g;' \
+ -0pe 's@<(cxf-version)>[0-9.]+</\1>@<$1>4.0.0-SNAPSHOT</$1>@g;' \
+ -0pe 's@<(cxf-codegen-plugin-version)>[0-9.]+</\1>@<$1>4.0.0-SNAPSHOT</$1>@g;' \
+ -0pe 's@<(cxf-xjc-plugin-version)>[0-9.]+</\1>@<$1>4.0.0</$1>@g;' \
+ -0pe 's@<(cxf-xjc-utils-version)>[0-9.]+</\1>@<$1>4.0.0</$1>@g;' \
+ -0pe 's@<frontEnd>jaxws21</frontEnd>@<frontEnd>jaxws</frontEnd>@g;' \
+ -0pe 's@Camel Jetty 9\.x support@Camel Jetty 11\.x support@g;' \
+ `# JAXWS` \
+ -0pe 's@<(jaxb-jxc-version)>[0-9.]+</\1>@<$1>4.0.1</$1>@g;' \
+ -0pe 's@<(jaxb-xjc-version)>[0-9.]+</\1>@<$1>4.0.1</$1>@g;' \
+ -0pe 's@<(javax-soap-api-version)>[0-9.]+</\1>@<$1>3.0.0</$1>@g;' \
+ -0pe 's@jaxws-api-version@jakarta-xml-ws-api-version@g;' \
+ -0pe 's@<(jakarta-xml-ws-api-version)>[0-9.]+</\1>@<$1>4.0.0</$1>@g;' \
+ -0pe 's@(<dependency>\s*)<groupId>javax.xml.ws</groupId>(\s*)<artifactId>jaxws-api</artifactId>@$1<groupId>jakarta.xml.ws</groupId>$2<artifactId>jakarta.xml.ws-api</artifactId>@g;' \
+ -0pe 's@(<dependency>\s*)<groupId>org.apache.geronimo.specs</groupId>(\s*)<artifactId>geronimo-ws-metadata_2.0_spec</artifactId>@$1<groupId>jakarta.jws</groupId>$2<artifactId>jakarta.jws-api</artifactId>@g;' \
+ `# Other` \
+ -0pe 's@(<dependency>\s*)<groupId>javax.xml.bind</groupId>(\s*)<artifactId>jaxb-api</artifactId>@$1<groupId>jakarta.xml.bind</groupId>$2<artifactId>jakarta.xml.bind-api</artifactId>@g;' \
+ -0pe 's@(<dependency>\s*)<groupId>javax.xml.soap</groupId>(\s*)<artifactId>javax.xml.soap-api</artifactId>@$1<groupId>jakarta.xml.soap</groupId>$2<artifactId>jakarta.xml.soap-api</artifactId>@g;' \
+ -0pe 's@(<dependency>\s*)<groupId>org.apache.geronimo.specs</groupId>(\s*)<artifactId>geronimo-json_1.1_spec</artifactId>@$1<groupId>jakarta.json</groupId>$2<artifactId>jakarta.json-api</artifactId>@g;' \
+ -0pe 's@(<dependency>\s*)<groupId>org.apache.geronimo.specs</groupId>(\s*)<artifactId>geronimo-jsonb_1.0_spec</artifactId>@$1<groupId>jakarta.json.bind</groupId>$2<artifactId>jakarta.json.bind-api</artifactId>@g;' \
+ -0pe 's@(<dependency>\s*)<groupId>org.apache.geronimo.specs</groupId>(\s*)<artifactId>geronimo-jms_1.1_spec</artifactId>@$1<groupId>jakarta.jms</groupId>$2<artifactId>jakarta.jws-api</artifactId>@g;' \
+ $pom
+done
+perl -i -0pe 's@(( *)<jaxb-xjc-version>.*</jaxb-xjc-version>)@$1\n$2<jaxb-jxc-version>4.0.1</jaxb-jxc-version>@g;' pom.xml
+perl -i -0pe 's@(<plugin>\s*<groupId>org.codehaus.mojo</groupId>\s*<artifactId>jaxb2-maven-plugin</artifactId>[\s\S]*?)(</dependencies>\s*</plugin>)@$1 <dependency>
+ <groupId>com.sun.xml.bind</groupId>
+ <artifactId>jaxb-xjc</artifactId>
+ <version>\${jaxb-xjc-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.sun.xml.bind</groupId>
+ <artifactId>jaxb-jxc</artifactId>
+ <version>\${jaxb-jxc-version}</version>
+ </dependency>
+ $2@g;' parent/pom.xml
+perl -i -0pe 's@ *<dependency>\s+<groupId>jakarta.jms</groupId>\s*<artifactId>jakarta.jms-api</artifactId>\s+<version>\${geronimo-jms2-spec-version}</version>\s+</dependency> *\n@@g;' parent/pom.xml
+
+# Spring
+perl -i -0pe 's@<module>camel-test-spring</module>@<!--module>camel-test-spring</module-->@g' components/camel-test/pom.xml
+perl -i -0pe 's@InstantiationAwareBeanPostProcessorAdapter@SmartInstantiationAwareBeanPostProcessor@g;' \
+ -0pe 's@extends@implements@g;' \
+ components/camel-spring-xml/src/test/java/org/apache/camel/spring/postprocessor/MagicAnnotationPostProcessor.java
+# CDI
+perl -i -0pe 's@<module>camel-test-cdi</module>@<!--module>camel-test-cdi</module-->@g' components/camel-test/pom.xml
+for java in components/camel-cdi/src/**/*.java
+do
+ perl -i \
+ -0pe 's@manager\.createInjectionTarget\((.*?)\)\;@manager\.getInjectionTargetFactory(\n $1).createInjectionTarget(null)\;@g;' \
+ -0pe 's/ *.Override\s+public boolean isNullable\(\) {\s+return [^;]+;\s+} *\n *\n//g;' \
+ -0pe 's/manager.fireEvent\(([a-z]+), (.*?)\);/manager.getEvent().select($2).fire($1);/g;' \
+ -0pe 's/manager.fireEvent\(([a-z]+)\);/manager.getEvent().fire($1);/g;' \
+ $java
+done
+# JAXB
+perl -i -0pe 's@com.sun.xml.bind.marshaller@org.glassfish.jaxb.runtime.marshaller@g;' \
+ components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/mapper/DefaultNamespacePrefixMapper.java
+# JMS
+perl -i -0pe 's@<module>camel-activemq</module>@<!--module>camel-activemq</module-->@g' components/pom.xml
+perl -i -0pe 's@<module>camel-test-infra-activemq</module>@<!--module>camel-test-infra-activemq</module-->@g' test-infra/pom.xml
+
+# JAXWS
+for xml in components/**/src/**/*.{xml,xsd,wsdl}
+do
+ perl -i \
+ -0pe 's@http://java.sun.com/xml/ns/@https://jakarta.ee/xml/ns/@g;' \
+ $xml
+done
+
+
+# for pom in pom.xml **/pom.xml
+# do
+# perl -i \
+# -0pe 's@(<dependency>\s+<groupId>jakarta.annotation</groupId>\s+<artifactId>jakarta.annotation-api</artifactId>\s+)<version>[^<]+</version>@$1<version>\${jakarta-annotation-api-version}</version>@g;' \
+# $pom
+# done
+# for pom in components/camel-jetty/**/*.java
+# do
+# perl -i \
+# -0pe 's@Expose HTTP endpoints using Jetty 10\.@Expose HTTP endpoints using Jetty 11\.@g;' \
+# done
+
+git commit -a -m "Upgrade dependencies"
+
+# git push --force origin jakarta-rewritten
+
+#mvn install -DskipTests
+#git commit -a -m "Regen"