Make sure we can also read jakarta persistence.xml by default
diff --git a/container/openejb-jee/src/main/java/org/apache/openejb/jee/jpa/unit/JaxbPersistenceFactory.java b/container/openejb-jee/src/main/java/org/apache/openejb/jee/jpa/unit/JaxbPersistenceFactory.java
index 1ca0617..6caa2dc 100644
--- a/container/openejb-jee/src/main/java/org/apache/openejb/jee/jpa/unit/JaxbPersistenceFactory.java
+++ b/container/openejb-jee/src/main/java/org/apache/openejb/jee/jpa/unit/JaxbPersistenceFactory.java
@@ -80,7 +80,11 @@
@Override
protected String eeUri(final String uri) {
- return "http://xmlns.jcp.org/xml/ns/persistence".equals(uri) ? "http://java.sun.com/xml/ns/persistence": uri;
+ // there should not be any other namespace, but let's see if we can match all of them
+ // http://java.sun.com/xml/ns/persistence
+ // http://xmlns.jcp.org/xml/ns/persistence
+ // https://jakarta.ee/xml/ns/persistence
+ return uri != null && uri.contains("/persistence") ? PERSISTENCE_SCHEMA: uri;
}
@Override
diff --git a/container/openejb-jee/src/test/java/org/apache/openejb/jee/jpa/PersistenceXmlTest.java b/container/openejb-jee/src/test/java/org/apache/openejb/jee/jpa/PersistenceXmlTest.java
index cc0dc4f..2d1d317 100644
--- a/container/openejb-jee/src/test/java/org/apache/openejb/jee/jpa/PersistenceXmlTest.java
+++ b/container/openejb-jee/src/test/java/org/apache/openejb/jee/jpa/PersistenceXmlTest.java
@@ -20,6 +20,7 @@
import junit.framework.TestCase;
import org.apache.openejb.jee.JAXBContextFactory;
+import org.apache.openejb.jee.jpa.unit.JaxbPersistenceFactory;
import org.apache.openejb.jee.jpa.unit.Persistence;
import org.custommonkey.xmlunit.Diff;
import org.custommonkey.xmlunit.ElementNameAndAttributeQualifier;
@@ -97,6 +98,41 @@
assertTrue("Files are similar " + myDiff, myDiff.similar());
}
+ public void testPersistenceJakarta() throws Exception {
+
+ // make sure we can still parse previous versions
+ {
+ final URL resource = this.getClass().getClassLoader().getResource("persistence_2.0-example.xml");
+ final InputStream in = resource.openStream();
+
+ final Persistence element = JaxbPersistenceFactory.getPersistence(Persistence.class, in);
+
+ assertNotNull(element);
+ System.out.println("unmarshalled " + element);
+ }
+ {
+ final URL resource = this.getClass().getClassLoader().getResource("persistence-example.xml");
+ final InputStream in = resource.openStream();
+
+ final Persistence element = JaxbPersistenceFactory.getPersistence(Persistence.class, in);
+
+ assertNotNull(element);
+ System.out.println("unmarshalled " + element);
+ }
+
+ // try new jakarta namespace
+ {
+ final URL resource = this.getClass().getClassLoader().getResource("persistence_2.0-jakarta.xml");
+ final InputStream in = resource.openStream();
+
+ final Persistence element = JaxbPersistenceFactory.getPersistence(Persistence.class, in);
+
+ assertNotNull(element);
+ System.out.println("unmarshalled " + element);
+ }
+
+ }
+
private java.lang.String readContent(InputStream in) throws IOException {
final StringBuilder sb = new StringBuilder();
in = new BufferedInputStream(in);
diff --git a/container/openejb-jee/src/test/resources/persistence_2.0-jakarta.xml b/container/openejb-jee/src/test/resources/persistence_2.0-jakarta.xml
new file mode 100644
index 0000000..04f1240
--- /dev/null
+++ b/container/openejb-jee/src/test/resources/persistence_2.0-jakarta.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+
+ 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
+
+ http://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.
+-->
+
+<!-- $Rev$ -->
+<persistence xmlns="https://jakarta.ee/xml/ns/persistence"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd" version="3.0">
+
+ <persistence-unit transaction-type="JTA" name="foo">
+ <description>description</description>
+ <provider>org.acme.Provider</provider>
+ <jta-data-source>jtadatasource</jta-data-source>
+ <non-jta-data-source>nonjtadatasource</non-jta-data-source>
+ <mapping-file>mappingfile1</mapping-file>
+ <mapping-file>mappingfile2</mapping-file>
+ <jar-file>jarfile1</jar-file>
+ <jar-file>jarfile2</jar-file>
+ <class>org.acme.Person</class>
+ <class>org.acme.Animal</class>
+ <exclude-unlisted-classes>true</exclude-unlisted-classes>
+ <shared-cache-mode>ALL</shared-cache-mode>
+ <validation-mode>AUTO</validation-mode>
+ <properties>
+ <property value="rab" name="bar"/>
+ <property value="zab" name="baz"/>
+ <property value="oof" name="foo"/>
+ </properties>
+ </persistence-unit>
+ <persistence-unit transaction-type="RESOURCE_LOCAL" name="bar">
+ <description>description2</description>
+ <provider>org.acme.Provider2</provider>
+ <jta-data-source>jtadatasource2</jta-data-source>
+ <non-jta-data-source>nonjtadatasource2</non-jta-data-source>
+ <mapping-file>mappingfile12</mapping-file>
+ <mapping-file>mappingfile22</mapping-file>
+ <jar-file>jarfile12</jar-file>
+ <jar-file>jarfile22</jar-file>
+ <class>org.acme.Person2</class>
+ <class>org.acme.Animal2</class>
+ <exclude-unlisted-classes>true</exclude-unlisted-classes>
+ <properties>
+ <property value="rab2" name="bar2"/>
+ <property value="oof2" name="foo2"/>
+ <property value="zab2" name="baz2"/>
+ </properties>
+ </persistence-unit>
+</persistence>