Java – openjpa in OSGi does not find the MySQL JDBC connector bundle

I am currently working on Felix's OSGi project (v4.0.3) I need to use JPA, so I installed the Apache Aries JPA package I also installed openjpa. I need it to connect to MySQL database using MySQL connector bundle Unfortunately, it doesn't work. Openjpa says it can't find the MySQL JDBC class. I can't figure out what's bad. Maybe I did it wrong I will explain what I installed and persistence XML file and the actual exception I got

This is the list of Apache Aries packages I installed:

> org. apache. aries. jpa. api-0.3. jar > org. apache. aries. jpa. container. context-0.3. jar > org. apache. aries. jpa. container-0.3. jar > org. apache. aries. util-0.4. jar

Then I installed the dependencies of the Apache Aries JPA package I downloaded them from springsource:

> com. springsource. javax. transaction-1.1. 0.jar > com. springsource. org. apache. log4j-1.2. 16.jar > com. springsource. slf4j. api-1.6. 1.jar > com. springsource. slf4j. log4j-1.6. 1.jar > javax. persistence_ 2.0. 4.v201112161009. Jar (this is from eclipse link just in case)

I also installed openjpa and all its dependencies I'm in apache-openjpa-2.2 Bundles 2 to 5 (commons - *) were found in the Lib folder of the 0 download folder I downloaded SERP here because the jar found in the Lib folder is not an OSGi package Finally, I found the last two packages (#7 and #8) in springsource:

> openjpa-2.2. 0.jar > commons-collections-3.2. 1.jar > commons-dbcp-1.4. jar > commons-lang-2.4. jar > commons-pool-1.5. 4.jar > org. apache. servicemix. bundles. serp-1.13. 1_ 4.jar > com. springsource. javax. servlet-2.5. 0.jar > com. springsource. org. objectweb. asm-3.2. 0.jar

Once I finally installed openjpa, I still need the MySQL jdbc driver package. I also obtained its common logging dependency from the springsource Repository:

> com. springsource. com. MysqL. jdbc-5.1. 6.jar > com. springsource. org. apache. commons. logging-1.1. 1.jar

Now, the list of installed packages becomes very large I said I installed openjpa, but it's just because I can't figure out how to use any other provider with Aries I originally wanted to use eclipse link, but obviously Apache Aries did not detect that it was a provider. According to this blog, you must make another bundle containing your own activator to make Aries notice eclipse link I tried, but it didn't work, so I used openjpa again

So now I have two questions:

>How can I get openjpa to notice my MySQL bundle?

Or:

>How can Apache Aries notice eclipse link?

This is the persistence XML file:

<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="userManager.model" transaction-type="RESOURCE_LOCAL">
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
    <class>org.project.dao.entity.UserEntity</class>
    <properties>
        <property name="openjpa.ConnectionDriverName" value="com.MysqL.jdbc.Driver" />
        <property name="openjpa.ConnectionURL" value="jdbc:MysqL://localhost:3306/usermanager?autoReconnect=true" />
        <property name="openjpa.ConnectionUserName" value="root" />
        <property name="openjpa.ConnectionPassword" value="root" />            
    </properties>
</persistence-unit>
</persistence>

An error occurred while executing the constructor for the following Dao class:

@PersistenceContext(unitName="userManager.model")
private EntityManager em;
private EntityManagerFactory emf;

public UserDAOBean() {
    em = emf.createEntityManager();
}

This is the error I encountered when openjpa couldn't find mysql Of course, it is worth mentioning that both URL and username / password are valid:

<openjpa-2.2.0-r422266:1244990 nonfatal general error> org.apache.openjpa.persistence.PersistenceException: There were errors initializing your configuration: <openjpa-2.2.0-r422266:1244990 fatal user error> org.apache.openjpa.util.UserException: A connection Could not be obtained for driver class "com.MysqL.jdbc.Driver" and URL "jdbc:MysqL://localhost:3306/usermanager?autoReconnect=true".  You may have specified an invalid URL.
at org.apache.openjpa.jdbc.schema.DataSourceFactory.newConnectException(DataSourceFactory.java:255)
at org.apache.openjpa.jdbc.schema.DataSourceFactory.newDataSource(DataSourceFactory.java:123)
at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.createConnectionFactory(JDBCConfigurationImpl.java:844)
at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getConnectionFactory(JDBCConfigurationImpl.java:732)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.openjpa.lib.conf.ConfigurationImpl.instantiateAll(ConfigurationImpl.java:295)
at org.apache.openjpa.conf.OpenJPAConfigurationImpl.instantiateAll(OpenJPAConfigurationImpl.java:1671)
at org.apache.openjpa.kernel.AbstractBrokerFactory.makeReadOnly(AbstractBrokerFactory.java:646)
at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:203)
at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:154)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60)
at org.apache.aries.jpa.container.impl.CountingEntityManagerFactory.createEntityManager(CountingEntityManagerFactory.java:64)
at javax.persistence.EntityManagerFactory$$Proxy.createEntityManager(UnkNown Source)

I have cut off the exception (it continues) until this point:

Caused by: java.lang.ClassNotFoundException: com.MysqL.jdbc.Driver not found by org.apache.openjpa [12]
at org.apache.Felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1460)
at org.apache.Felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:72)
at org.apache.Felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1843)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at org.apache.openjpa.jdbc.schema.DataSourceFactory.newDataSource(DataSourceFactory.java:85)
... 108 more

PS: due to spam restrictions, I can't publish links to Aries, openjpa or eclipse link. Sorry:/

Solution

Thanks to Holly Cummins. After a period of research, I have found a way to solve the problem I will elaborate below. This will be a very long answer

If you want to use eclipse link with Apache Aries (I find the installation order of magnitude simpler than osji's openjpa, because it is only contained in five packages), you will have to check out the eclipse link – Aries adapter directly from Apache because it has not been released yet

Go to the appropriate folder and execute the following command to get it:

svn checkout https://svn.apache.org/repos/asf/aries/trunk/jpa/jpa-container-eclipselink-adapter/

You should get a folder called JPA container eclipse link adapter Now, assuming you are using Linux and have Maven installed, run the following command:

cd jpa-container-eclipselink-adapter
mvn clean install

Once Maven has successfully compiled the adapter's source code, you can use this path to find it in the Maven repository

<maven-repo>/org/apache/aries/jpa/org.apache.aries.jpa.eclipselink.adapter/0.3.1-SNAPSHOT/org.apache.aries.jpa.eclipselink.adapter-0.3.1-SNAPSHOT.jar

You must deploy this bundle with other bundles (copy it to Felix's bundle folder)

That's the eclipse link part. Now in order for your persistence to really work, you must use blueprint and Aries Here's what you need from[ http://aries.apache.org/downloads/currentrelease.html ](APACHE Aries download page) list of all bundles obtained

> org. apache. aries. blueprint > org. apache. aries. proxy > org. apache. aries. jndi. api > org. apache. aries. jndi > org. apache. aries. blueprint > org. apache. aries. jpa. api > org. apache. aries. jpa. container. context > org. apache. aries. jpa. container > org. apache. aries. transaction. blueprint > org. apache. aries. transaction. Manager (this is listed twice on their website, it's only repeated once) > org apache. aries. util

Once you've finished downloading Aries, you still need to rely on them (get them from springsource) These are slf4j, log4j, slf4j, log4j binding and javax Transaction 1.1 API bundle

> http://ebr.springsource.com/repository/app/bundle/version/detail?name=com.springsource.slf4j.api&version=1.6.1 > http://ebr.springsource.com/repository/app/bundle/version/detail?name=com.springsource.slf4j.log4j&version=1.6.1 > http://ebr.springsource.com/repository/app/bundle/version/detail?name=com.springsource.javax.transaction&version=1.1.0 > http://ebr.springsource.com/repository/app/bundle/version/detail?name=com.springsource.org.apache.log4j&version=1.2.16

You also need the eclipse link bundle (you need the OSGi bundle)

http://www.eclipse.org/eclipselink/downloads/

Open the zip and get the following file:

> org. eclipse. persistence. antlr > org. eclipse. persistence. asm > org. eclipse. persistence. core > org. eclipse. persistence. jpa > javax. persistence

Finally, assuming you want to use the MySQL database, you will need the package of the MySQL jdbc driver (downloaded from springsource)

> http://ebr.springsource.com/repository/app/bundle/version/detail?name=com.springsource.com.mysql.jdbc&version=5.1.6 > http://ebr.springsource.com/repository/app/bundle/version/detail?name=com.springsource.org.apache.commons.logging&version=1.1.1

Once all these packages are installed, you need to use non JTA data sources obtained through JNDI This is a persistence XML file, you can change it as needed:

<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
    <persistence-unit name="userManager" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <non-jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/userManagerDS)</non-jta-data-source>
        <class>com.example.dao.entity.UserEntity</class>
        <exclude-unlisted-classes>true</exclude-unlisted-classes>
        <properties>  
            <!-- EclipseLink should create the database schema automatically -->
            <!-- <property name="eclipselink.ddl-generation" value="create-tables" /> 
            <property name="eclipselink.ddl-generation.output-mode" value="database" /> -->
        </properties>
    </persistence-unit>
</persistence>

See javax in the non JTA data source tag sql. Datasource? This is what we define using blueprint XML To do this, you first need to add the OSGi - inf / blueprint / folder to the persistence package (the package containing Dao and entities) This is the default folder where blueprint XML files are located. Any XML files here will be scanned When finished, create blueprint XML file (name can be changed) and paste (and modify) the following code:

<bean id="dataSource" class="com.MysqL.jdbc.jdbc2.optional.MysqLDataSource">
        <property name="url" value="jdbc:MysqL://localhost:3306/usermanager?autoReconnect=true" />
        <property name="user" value="root" />
        <property name="password" value="root" />
    </bean>

    <service id="MysqLDataSource" interface="javax.sql.DataSource" ref="dataSource">
        <service-properties>
            <entry key="osgi.jndi.service.name" value="jdbc/userManagerDS" />
        </service-properties>
    </service>

    <service id="userDAOService" interface="com.example.dao.remote.UserDAORemote">
        <bean class="com.example.dao.beans.UserDAOBean">
            <jpa:unit index="0" unitname="userManager" />
        </bean>
    </service>
</blueprint>

Here, we did two things First, we tell Aries to create usermanagerds data source and configure it with jdbc driver, URL, user and password This is with us in persistence The data source used in the XML file is the same

Then, we inject entitymanagerfactory into our Dao Our Dao is com example. dao. beans. Userdaobean class, we need to add its name to the bean tag This class must implement an interface, which we need to add to the service tag Now the last JPA: unit tag tells Aries to inject the entitymanagerfactory related to the persistence unit named usermanager (the name we use in persistence. XML) by using the first constructor of userdaobean This is done by using the index = "0" attribute This also means that you must use the following code in the Dao:

private EntityManager em;
private EntityManagerFactory emf;

public UserDAOBean(EntityManagerFactory emf) {
    this.emf = emf;
    this.em = emf.createEntityManager();
}

You can also use setter to inject EMF Here are more resources to help you use the blueprint:

> http://aries.apache.org/modules/jpaproject.html > http://aries.apache.org/modules/blueprint.html > http://mail-archives.apache.org/mod_mbox/aries-user/201104.mbox/%3C15F2C30E -2A71-4320-9992- DBCF181B58E4@gmail.com %3E

Optional: note that if you are using Felix, add javax The transaction package will cause a "usage constraint violation" because the system package (bundle 0) will also export this API You must change the config Properties to prevent it from exporting it:

#org.osgi.framework.system.packages=

You must enter here a list of all packages exported from the previous package Unfortunately, there is no way to "delete" a package. You have to redefine the entire list of packages to export This is mine and I hope it helps (yes, very, very long):

org.osgi.framework.system.packages=org.osgi.framework;version=1.6.0,org.osgi.framework.launch;version=1.0.0,org.osgi.framework.wiring;version=1.0.0,org.osgi.framework.startlevel;version=1.0.0,org.osgi.framework.hooks.bundle;version=1.0.0,org.osgi.framework.hooks.resolver;version=1.0.0,org.osgi.framework.hooks.service;version=1.1.0,org.osgi.framework.hooks.weaving;version=1.0.0,org.osgi.service.packageadmin;version=1.2.0,org.osgi.service.startlevel;version=1.1.0,org.osgi.service.url;version=1.0.0,org.osgi.util.tracker;version=1.5.0,javax.accessibility;version=0.0.0.1_006_JavaSE,javax.activation;version=0.0.0.1_006_JavaSE,javax.activity;version=0.0.0.1_006_JavaSE,javax.annotation.processing;version=0.0.0.1_006_JavaSE,javax.annotation;version=0.0.0.1_006_JavaSE,javax.crypto.interfaces;version=0.0.0.1_006_JavaSE,javax.crypto.spec;version=0.0.0.1_006_JavaSE,javax.crypto;version=0.0.0.1_006_JavaSE,javax.imageio.event;version=0.0.0.1_006_JavaSE,javax.imageio.Metadata;version=0.0.0.1_006_JavaSE,javax.imageio.plugins.bmp;version=0.0.0.1_006_JavaSE,javax.imageio.plugins.jpeg;version=0.0.0.1_006_JavaSE,javax.imageio.spi;version=0.0.0.1_006_JavaSE,javax.imageio.stream;version=0.0.0.1_006_JavaSE,javax.imageio;version=0.0.0.1_006_JavaSE,javax.jws.soap;version=0.0.0.1_006_JavaSE,javax.jws;version=0.0.0.1_006_JavaSE,javax.lang.model.element;version=0.0.0.1_006_JavaSE,javax.lang.model.type;version=0.0.0.1_006_JavaSE,javax.lang.model.util;version=0.0.0.1_006_JavaSE,javax.lang.model;version=0.0.0.1_006_JavaSE,javax.management.loading;version=0.0.0.1_006_JavaSE,javax.management.modelmbean;version=0.0.0.1_006_JavaSE,javax.management.monitor;version=0.0.0.1_006_JavaSE,javax.management.openmbean;version=0.0.0.1_006_JavaSE,javax.management.relation;version=0.0.0.1_006_JavaSE,javax.management.remote.rmi;version=0.0.0.1_006_JavaSE,javax.management.remote;version=0.0.0.1_006_JavaSE,javax.management.timer;version=0.0.0.1_006_JavaSE,javax.management;version=0.0.0.1_006_JavaSE,javax.naming.directory;version=0.0.0.1_006_JavaSE,javax.naming.event;version=0.0.0.1_006_JavaSE,javax.naming.ldap;version=0.0.0.1_006_JavaSE,javax.naming.spi;version=0.0.0.1_006_JavaSE,javax.naming;version=0.0.0.1_006_JavaSE,javax.net.ssl;version=0.0.0.1_006_JavaSE,javax.net;version=0.0.0.1_006_JavaSE,javax.print.attribute.standard;version=0.0.0.1_006_JavaSE,javax.print.attribute;version=0.0.0.1_006_JavaSE,javax.print.event;version=0.0.0.1_006_JavaSE,javax.print;version=0.0.0.1_006_JavaSE,javax.rmi.CORBA;version=0.0.0.1_006_JavaSE,javax.rmi.ssl;version=0.0.0.1_006_JavaSE,javax.rmi;version=0.0.0.1_006_JavaSE,javax.script;version=0.0.0.1_006_JavaSE,javax.security.auth.callback;version=0.0.0.1_006_JavaSE,javax.security.auth.kerberos;version=0.0.0.1_006_JavaSE,javax.security.auth.login;version=0.0.0.1_006_JavaSE,javax.security.auth.spi;version=0.0.0.1_006_JavaSE,javax.security.auth.x500;version=0.0.0.1_006_JavaSE,javax.security.auth;version=0.0.0.1_006_JavaSE,javax.security.cert;version=0.0.0.1_006_JavaSE,javax.security.sasl;version=0.0.0.1_006_JavaSE,javax.sound.midi.spi;version=0.0.0.1_006_JavaSE,javax.sound.midi;version=0.0.0.1_006_JavaSE,javax.sound.sampled.spi;version=0.0.0.1_006_JavaSE,javax.sound.sampled;version=0.0.0.1_006_JavaSE,javax.sql.rowset.serial;version=0.0.0.1_006_JavaSE,javax.sql.rowset.spi;version=0.0.0.1_006_JavaSE,javax.sql.rowset;version=0.0.0.1_006_JavaSE,javax.sql;version=0.0.0.1_006_JavaSE,javax.swing.border;version=0.0.0.1_006_JavaSE,javax.swing.colorchooser;version=0.0.0.1_006_JavaSE,javax.swing.event;version=0.0.0.1_006_JavaSE,javax.swing.filechooser;version=0.0.0.1_006_JavaSE,javax.swing.plaf.basic;version=0.0.0.1_006_JavaSE,javax.swing.plaf.Metal;version=0.0.0.1_006_JavaSE,javax.swing.plaf.multi;version=0.0.0.1_006_JavaSE,javax.swing.plaf.synth;version=0.0.0.1_006_JavaSE,javax.swing.plaf;version=0.0.0.1_006_JavaSE,javax.swing.table;version=0.0.0.1_006_JavaSE,javax.swing.text.html.parser;version=0.0.0.1_006_JavaSE,javax.swing.text.html;version=0.0.0.1_006_JavaSE,javax.swing.text.rtf;version=0.0.0.1_006_JavaSE,javax.swing.text;version=0.0.0.1_006_JavaSE,javax.swing.tree;version=0.0.0.1_006_JavaSE,javax.swing.undo;version=0.0.0.1_006_JavaSE,javax.swing;version=0.0.0.1_006_JavaSE,javax.tools;version=0.0.0.1_006_JavaSE,javax.transaction.xa;version=0.0.0.1_006_JavaSE,javax.transaction;version=0.0.0.1_006_JavaSE,javax.xml.bind.annotation.adapters;version=0.0.0.1_006_JavaSE,javax.xml.bind.annotation;version=0.0.0.1_006_JavaSE,javax.xml.bind.attachment;version=0.0.0.1_006_JavaSE,javax.xml.bind.helpers;version=0.0.0.1_006_JavaSE,javax.xml.bind.util;version=0.0.0.1_006_JavaSE,javax.xml.bind;version=0.0.0.1_006_JavaSE,javax.xml.crypto.dom;version=0.0.0.1_006_JavaSE,javax.xml.crypto.dsig.dom;version=0.0.0.1_006_JavaSE,javax.xml.crypto.dsig.keyinfo;version=0.0.0.1_006_JavaSE,javax.xml.crypto.dsig.spec;version=0.0.0.1_006_JavaSE,javax.xml.crypto.dsig;version=0.0.0.1_006_JavaSE,javax.xml.crypto;version=0.0.0.1_006_JavaSE,javax.xml.datatype;version=0.0.0.1_006_JavaSE,javax.xml.namespace;version=0.0.0.1_006_JavaSE,javax.xml.parsers;version=0.0.0.1_006_JavaSE,javax.xml.soap;version=0.0.0.1_006_JavaSE,javax.xml.stream.events;version=0.0.0.1_006_JavaSE,javax.xml.stream.util;version=0.0.0.1_006_JavaSE,javax.xml.stream;version=0.0.0.1_006_JavaSE,javax.xml.transform.dom;version=0.0.0.1_006_JavaSE,javax.xml.transform.sax;version=0.0.0.1_006_JavaSE,javax.xml.transform.stax;version=0.0.0.1_006_JavaSE,javax.xml.transform.stream;version=0.0.0.1_006_JavaSE,javax.xml.transform;version=0.0.0.1_006_JavaSE,javax.xml.validation;version=0.0.0.1_006_JavaSE,javax.xml.ws.handler.soap;version=0.0.0.1_006_JavaSE,javax.xml.ws.handler;version=0.0.0.1_006_JavaSE,javax.xml.ws.http;version=0.0.0.1_006_JavaSE,javax.xml.ws.soap;version=0.0.0.1_006_JavaSE,javax.xml.ws.spi;version=0.0.0.1_006_JavaSE,javax.xml.ws.wsaddressing;version=0.0.0.1_006_JavaSE,javax.xml.ws;version=0.0.0.1_006_JavaSE,javax.xml.xpath;version=0.0.0.1_006_JavaSE,javax.xml;version=0.0.0.1_006_JavaSE,org.ietf.jgss;version=0.0.0.1_006_JavaSE,org.omg.CORBA.DynAnyPackage;version=0.0.0.1_006_JavaSE,org.omg.CORBA.ORBPackage;version=0.0.0.1_006_JavaSE,org.omg.CORBA.TypeCodePackage;version=0.0.0.1_006_JavaSE,org.omg.CORBA.portable;version=0.0.0.1_006_JavaSE,org.omg.CORBA;version=0.0.0.1_006_JavaSE,org.omg.CORBA_2_3.portable;version=0.0.0.1_006_JavaSE,org.omg.CORBA_2_3;version=0.0.0.1_006_JavaSE,org.omg.CosNaming.NamingContextExtPackage;version=0.0.0.1_006_JavaSE,org.omg.CosNaming.NamingContextPackage;version=0.0.0.1_006_JavaSE,org.omg.CosNaming;version=0.0.0.1_006_JavaSE,org.omg.Dynamic;version=0.0.0.1_006_JavaSE,org.omg.DynamicAny.DynAnyFactoryPackage;version=0.0.0.1_006_JavaSE,org.omg.DynamicAny.DynAnyPackage;version=0.0.0.1_006_JavaSE,org.omg.DynamicAny;version=0.0.0.1_006_JavaSE,org.omg.IOP.CodecFactoryPackage;version=0.0.0.1_006_JavaSE,org.omg.IOP.CodecPackage;version=0.0.0.1_006_JavaSE,org.omg.IOP;version=0.0.0.1_006_JavaSE,org.omg.Messaging;version=0.0.0.1_006_JavaSE,org.omg.PortableInterceptor.ORBInitInfoPackage;version=0.0.0.1_006_JavaSE,org.omg.PortableInterceptor;version=0.0.0.1_006_JavaSE,org.omg.PortableServer.CurrentPackage;version=0.0.0.1_006_JavaSE,org.omg.PortableServer.POAManagerPackage;version=0.0.0.1_006_JavaSE,org.omg.PortableServer.POAPackage;version=0.0.0.1_006_JavaSE,org.omg.PortableServer.ServantLocatorPackage;version=0.0.0.1_006_JavaSE,org.omg.PortableServer.portable;version=0.0.0.1_006_JavaSE,org.omg.PortableServer;version=0.0.0.1_006_JavaSE,org.omg.SendingContext;version=0.0.0.1_006_JavaSE,org.omg.stub.java.rmi;version=0.0.0.1_006_JavaSE,org.w3c.dom.bootstrap;version=0.0.0.1_006_JavaSE,org.w3c.dom.events;version=0.0.0.1_006_JavaSE,org.w3c.dom.ls;version=0.0.0.1_006_JavaSE,org.w3c.dom;version=0.0.0.1_006_JavaSE,org.xml.sax.ext;version=0.0.0.1_006_JavaSE,org.xml.sax.helpers;version=0.0.0.1_006_JavaSE,org.xml.sax;version=0.0.0.1_006_JavaSE
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>