Ошибка exception in thread main java lang noclassdeffounderror javax xml bind datatypeconverter

I recently switched to intellij but I’m finding it hard to connect to my localDB. The same code worked on eclipse fine. Also I have already added the sqljdbc42.jar as a module dependency.

package com.enter;
import java.sql.*;

public class SqlConnect {
    private String username, password, url;
    public Connection conn;

    public SqlConnect() {
        username = "user=admin;";
        password = "password=admin";
        url = "jdbc:sqlserver://Bossman-PC\SQL2014TRAINING;databaseName=EnterDB;";
        Connect();
    }
    public SqlConnect(String user, String pass) {
        username = user;
        password = pass;
        url = "jdbc:sqlserver://Bossman-PC\SQL2014TRAINING;databaseName=EnterDB;";
        Connect();
    }

    public void Connect() { //Loads sql driver and creates a connection object with local database
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            String connectionUrl = url + username + password;
            conn = DriverManager.getConnection(connectionUrl);
            System.out.println("Connected.");
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public Connection getConnection() {
        return conn;
    }


}

Error produced:

Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:4098)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:3160)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$100(SQLServerConnection.java:43)
at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:3123)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7505)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2445)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1981)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1628)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1459)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:773)
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1168)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:678)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:252)
at com.enter.SqlConnect.Connect(SqlConnect.java:25)
at com.enter.SqlConnect.<init>(SqlConnect.java:12)
at com.enter.Login.makeConnection(Login.java:26)
at com.enter.Login.<init>(Login.java:16)
at com.enter.Execute.initLogin(Execute.java:14)
at com.enter.Execute.main(Execute.java:9)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
... 19 more

Process finished with exit code 1

Any help would be greatly appreciated. I’ve also tried the overloaded DriverManager.getConnection(url, user, pass) method and same error.

Gord Thompson's user avatar

Gord Thompson

116k32 gold badges211 silver badges412 bronze badges

asked Nov 21, 2017 at 20:57

J.Johnson's user avatar

6

For Java 9+ compatibility, you need to use version 6.4.0 or higher for the Java version you use as identified by the jreXX version suffix. Use the highest version lower or equal to you Java version).


Previous answer

As noted by Microsoft on GitHub:

Currently none of our driver released Jars are compatible with JDK9.

You can either switch to using the Java 8 JDK, or you can incorporate Microsoft’s development code from their ‘JDBC4.3’ branch into your project and use that with the Java 9 JDK.

Mark Rotteveel's user avatar

answered Nov 22, 2017 at 12:56

Gord Thompson's user avatar

Gord ThompsonGord Thompson

116k32 gold badges211 silver badges412 bronze badges

4

You can get this to work if you include the extra jvm parameter

--add-modules=java.se.ee

Which in your run configuration in Intellij would go here

enter image description here

This then includes several modules which in java 9 have been marked as deprecated for future removal so these could be removed in java 10 so it is only really a temporary solution until Microsoft release java 9 compatible jdbc drivers.

More on this can be found in the Java9 Migration guide

answered Dec 20, 2017 at 2:47

Java Devil's user avatar

Java DevilJava Devil

10.6k7 gold badges33 silver badges48 bronze badges

1

If you have a maven build, add the following to your pom.xml

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
</dependency>

answered Oct 15, 2021 at 11:34

Anurag Bhalekar's user avatar

For cli is compiled to use Java 8 it will throw the following error when the default Java-version is 10 (or higher):

Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
        at org.utplsql.api.reporter.Reporter.setAttributes(Reporter.java:80)
        at org.utplsql.api.reporter.Reporter.<init>(Reporter.java:29)
        at org.utplsql.api.reporter.DefaultReporter.<init>(DefaultReporter.java:15)
        at org.utplsql.api.reporter.ReporterFactory.createReporter(ReporterFactory.java:94)
        at org.utplsql.api.reporter.ReporterFactory.create(ReporterFactory.java:122)
        at oracle.jdbc.driver.Accessor.getORAData(Accessor.java:944)
        at oracle.jdbc.driver.OracleCallableStatement.getORAData(OracleCallableStatement.java:1864)
        at oracle.jdbc.driver.OracleCallableStatementWrapper.getORAData(OracleCallableStatementWrapper.java:789)
        at org.utplsql.api.reporter.Reporter.initDbReporter(Reporter.java:73)
        at org.utplsql.api.reporter.Reporter.init(Reporter.java:46)
        at org.utplsql.cli.ReporterManager.initReporters(ReporterManager.java:68)
        at org.utplsql.cli.RunCommand.run(RunCommand.java:158)
        at org.utplsql.cli.Cli.main(Cli.java:33)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
        at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
        ... 13 more

This can be avoided if we pack java 1.8 rt.jar into lib folder.

For cli is compiled to use Java 8 it will throw the following error when the default Java-version is 10 (or higher):

Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
        at org.utplsql.api.reporter.Reporter.setAttributes(Reporter.java:80)
        at org.utplsql.api.reporter.Reporter.<init>(Reporter.java:29)
        at org.utplsql.api.reporter.DefaultReporter.<init>(DefaultReporter.java:15)
        at org.utplsql.api.reporter.ReporterFactory.createReporter(ReporterFactory.java:94)
        at org.utplsql.api.reporter.ReporterFactory.create(ReporterFactory.java:122)
        at oracle.jdbc.driver.Accessor.getORAData(Accessor.java:944)
        at oracle.jdbc.driver.OracleCallableStatement.getORAData(OracleCallableStatement.java:1864)
        at oracle.jdbc.driver.OracleCallableStatementWrapper.getORAData(OracleCallableStatementWrapper.java:789)
        at org.utplsql.api.reporter.Reporter.initDbReporter(Reporter.java:73)
        at org.utplsql.api.reporter.Reporter.init(Reporter.java:46)
        at org.utplsql.cli.ReporterManager.initReporters(ReporterManager.java:68)
        at org.utplsql.cli.RunCommand.run(RunCommand.java:158)
        at org.utplsql.cli.Cli.main(Cli.java:33)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
        at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
        ... 13 more

This can be avoided if we pack java 1.8 rt.jar into lib folder.

Relevant versions: This information pertains to Artifactory version 7.x
 

Artifactory 7.x is compatible with Java 11 (and the JDK comes as part of your application bundle). When Artifactory starts, the JDBC driver will be copied from its $JFROG_HOME/artifactory/var/bootstrap/artifactory/tomcat/lib folder location to the $JFROG_HOME/artifactory/app/artifactory/tomcat/lib folder location.

Whenever you upgrade Artifactory to version 7.x, the following error may be encountered and Artifactory will not start:

Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter 

This means that the JDBC driver for the external database being used is incompatible with Java 11. To overcome this error, place a compatible JDBC driver in your $JFROG_HOME/artifactory/var/bootstrap/artifactory/tomcat/lib folder and restart Artifactory.

If this does not resolve the problem, do the following:

  • Navigate to the $JFROG_HOME/artifactory/app/artifactory/tomcat/lib folder as still the incompatible JDBC drivers still available

  • Remove all JDBC drivers

  • Restart Artifactory

Я потратил довольно много времени, чтобы выяснить как исправить ошибку java.lang.NoClassDefFoundError в Java.

В этой инструкции я покажу как исправить эти ошибки, раскрою некоторые секреты NoClassDefFoundError и поделюсь своим опытом в этой области.

NoClassDefFoundError – это самая распространенная ошибка в разработке Java. В любом случае, давайте посмотрим, почему это происходит и что нужно сделать для разрешения проблемы.
ошибка NoClassDefFoundError Java

NoClassDefFoundError в Java возникает, когда виртуальная машина Java не может найти определенный класс во время выполнения, который был доступен во время компиляции.

Например, если у нас есть вызов метода из класса или доступ к любому статическому члену класса, и этот класс недоступен во время выполнения, JVM сгенерирует NoClassDefFoundError.

Важно понимать, что это отличается от ClassNotFoundException, который появляется при попытке загрузить класс только во время выполнения, а имя было предоставлено во время выполнения, а не во время компиляции. Многие Java-разработчики смешивают эти две ошибки и запутываются.

NoClassDefFoundError возникнет, если класс присутствовал во время компиляции, но не был доступен в java classpath во время выполнения. Обычно появляется такая ошибка:

Exception in thread "main" java.lang.NoClassDefFoundError

Разница между java.lang.NoClassDefFoundError и ClassNotFoundException в Java

[ads-pc-3]
java.lang.ClassNotFoundException и java.lang.NoClassDefFoundError оба связаны с Java Classpath, и они полностью отличаются друг от друга.

ClassNotFoundException возникает, когда JVM пытается загрузить класс во время выполнения, т.е. вы даете имя класса во время выполнения, а затем JVM пытается загрузить его, и если этот класс не найден, он генерирует исключение java.lang.ClassNotFoundException.

Тогда как в случае NoClassDefFoundError проблемный класс присутствовал во время компиляции, и поэтому программа успешно скомпилирована, но не доступна во время выполнения по любой причине.

Приступим к решению ошибки java.lang.NoClassDefFoundError.

Нам нужно добавить NoClassDefFoundError в Classpath или проверить, почему он не доступен в Classpath. Там может быть несколько причин, таких как:

  1. Класс недоступен в Java Classpath.
  2. Возможно, вы запускаете вашу программу с помощью jar, а класс не определен в атрибуте ClassPath.
  3. Любой сценарий запуска переопределяет переменную среды Classpath.
    Поскольку NoClassDefFoundError является подклассом java.lang.LinkageError, он также может появиться, если библиотека может быть недоступна.
  4. Проверьте наличие java.lang.ExceptionInInitializerError в файле журнала. NoClassDefFoundError из-за сбоя инициализации встречается довольно часто.
  5. Если вы работаете в среде J2EE, то видимость Class среди нескольких Classloader также может вызвать java.lang.NoClassDefFoundError.

Примеры

  1. Простой пример NoClassDefFoundError – класс принадлежит отсутствующему файлу JAR, или JAR не был добавлен в путь к классам, или имя jar было изменено кем-то.
  2. Класс не находится в Classpath, нет способа узнать это, но вы можете просто посмотреть в System.getproperty (“java.classpath”), и он напечатает classpath оттуда, где можно получить представление о фактическом пути к классам во время выполнения.
  3. Просто попробуйте запустить явно -classpath с тем классом, который, по вашему мнению, будет работать, и если он работает, это верный признак того – что-то переопределяет java classpath.

Это еще одна распространенная причина java.lang.NoClassDefFoundError, когда ваш класс выполняет некоторую инициализацию в статическом блоке и если статический блок генерирует исключение, класс, который ссылается на этот класс, получит NoclassDefFoundError.

Смотрите в журнале java.lang.ExceptionInInitializerError, потому что это может вызвать java.lang.NoClassDefFoundError: Could not initialize class.

Как и в следующем примере кода, во время загрузки и инициализации класса, пользовательский класс генерирует Exception из статического блока инициализатора, который вызывает ExceptionInInitializerError при первой загрузке пользовательского класса в ответ на новый вызов User ().
[ads-pc-3]

/**
 * Java program to demonstrate how failure of static initialization subsequently cause
 * java.lang.NoClassDefFoundError in Java.
 * @author Javin Paul
 */
public class NoClassDefFoundErrorDueToStaticInitFailure {

   public static void main(String args[]){
        
        List users = new ArrayList(2);
        
       for(int i=0; i<2; i++){
           try{
            users.add(new User(String.valueOf(i)));
           }catch(Throwable t){
                t.printStackTrace();
           }
       }         
   }
}

class User{
   private static String USER_ID = getUserId();
    
   public User(String id){
       this.USER_ID = id;
   }
   private static String getUserId() {
       throw new RuntimeException("UserId Not found");
   }     
}

Output
java.lang.ExceptionInInitializerError
at testing.NoClassDefFoundErrorDueToStaticInitFailure.main(NoClassDefFoundErrorDueToStaticInitFailure.java:23)
Caused by: java.lang.RuntimeException: UserId Not found
    at testing.User.getUserId(NoClassDefFoundErrorDueToStaticInitFailure.java:41)
    at testing.User.(NoClassDefFoundErrorDueToStaticInitFailure.java:35)
    ... 1 more
java.lang.NoClassDefFoundError: Could not initialize class testing.User
at testing.NoClassDefFoundErrorDueToStaticInitFailure.main(NoClassDefFoundErrorDueToStaticInitFailure.java:23)
  1. Поскольку NoClassDefFoundError также является LinkageError, который возникает из-за зависимости от какого-либо другого класса, вы также можете получить java.lang.NoClassDefFoundError, если ваша программа зависит от собственной библиотеки, а соответствующая DLL отсутствует. Помните, что это может также вызвать java.lang.UnsatisfiedLinkError: no dll in java.library.path. Чтобы решить эту проблему, держите dll вместе с JAR.
  2. Если вы используете файл ANT, создайте JAR, стоит отметить отладку до этого уровня, чтобы убедиться, что скрипт компоновки ANT получает правильное значение classpath и добавляет его в файл manifest.mf.
  3. Проблема с правами доступа к файлу JAR. Если вы работаете с Java-программой в многопользовательской операционной системе, такой как Linux, вам следует использовать идентификатор пользователя приложения для всех ресурсов приложения, таких как файлы JAR, библиотеки и конфигурации. Если вы используете разделяемую библиотеку, которая используется несколькими приложениями, работающими под разными пользователями, вы можете столкнуться с проблемой прав доступа, например, файл JAR принадлежит другому пользователю и недоступен для вашего приложения.
  4. Опечатка в конфигурации XML также может вызвать NoClassDefFoundError в Java. Как и большинство Java-фреймворков, таких как Spring, Struts все они используют конфигурацию XML для определения bean-компонентов. В любом случае, если вы неправильно указали имя компонента, он может вызвать ошибку при загрузке другого класса. Это довольно часто встречается в среде Spring MVC и в Apache Struts, где вы получаете множество исключений при развертывании файла WAR или EAR.
  5. Когда ваш скомпилированный класс, который определен в пакете, не присутствует в том же пакете во время загрузки, как в случае с JApplet.
  6. Еще одна причина- это нескольких загрузчиков классов в средах J2EE. Поскольку J2EE не использует стандартную структуру загрузчика классов, а зависит от Tomcat, WebLogic, WebSphere и т.д., от того, как они загружают различные компоненты J2EE, такие как WAR-файл или EJB-JAR-файл. Кроме того, если класс присутствует в обоих файлах JAR и вы вызовете метод equals для сравнения этих двух объектов, это приведет к исключению ClassCastException, поскольку объект, загруженный двумя различными загрузчиками классов, не может быть равным.
  7. Очень редко может происходить Exception in thread “main” java.lang.NoClassDefFoundError: com/sun/tools/javac/Main. Эта ошибка означает, что либо ваш Classpath, PATH или JAVA_HOME не настроен должным образом, либо JDK установка не правильная. Попробуйте переустановить JDK. Замечено, что проблема возникала после установки jdk1.6.0_33 и последующей переустановки JDK1.6.0_25.

При попытке использовать Hibernate для подключения к MySQL выдаёт ошибку Exception in thread «main» java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

Что только не пробовал…

В POM прописывал

<dependency>
           <groupId>javax.xml.bind</groupId>
           <artifactId>jaxb-api</artifactId>
           <version>2.3.0</version>
       </dependency>
       <dependency>
           <groupId>com.sun.xml.bind</groupId>
           <artifactId>jaxb-impl</artifactId>
           <version>2.3.0</version>
       </dependency>
       <dependency>
           <groupId>com.sun.xml.bind</groupId>
           <artifactId>jaxb-core</artifactId>
           <version>2.3.0</version>

Тогда тоже ругается на Exception in thread «main» java.lang.NoClassDefFoundError: javax/activation/DataSource

Компиляция Unity APK не удалась, несчастные случаи

Вопрос первый

Exception in thread «main» java.lang.NoSuchMethodError: com.android.prefs.AndroidLocation.getAvdFolder()Ljava/lang/String

Решение:

Обновление: каталог SDK

  • Android SDK Build-Tools
  • Android Emulator
  • Android SDK Platform-Tools
  • Android SDK Tools
  • Intel x86 Emulator Accelerator
  • Support Repository->Android Support Repository
  • Support Repository->Google Repository

Решение 1 (Pro -Test)

Два

java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter

Решение:

Нарисуйте версию JDK в JDK8 для решения (Pro -test)

  • Ошибка exception in exception handler властелин колец
  • Ошибка exception in exception handler command and conquer 3
  • Ошибка exception has been thrown by the target of an invocation
  • Ошибка exception ereaderror in module
  • Ошибка exception eoutofresources in module udl exe at 0009f63a