Java на основе Azure Функция - Исключение: ClassCastException: класс jdk.internal.loader.ClassLoaders $ AppClassLoader не может быть приведен - PullRequest
0 голосов
/ 14 марта 2020

Я новичок ie с Java. Я создал самую простую Http Triggered Azure Функция с кодом Visual Studio. Код по умолчанию из шаблона и неизменен. Однако, когда я получаю ошибку при вызове http://localhost: 7071 / api / HttpExample

Что может быть проблемой и исправить?

Http Functions:

    HttpExample: [GET,POST] http://localhost:7071/api/HttpExample

[14.3.2020 11.36.30] Host lock lease acquired by instance ID '0000000000000000000000008457DB20'.
[14.3.2020 11.38.23] Executing HTTP request: {
[14.3.2020 11.38.23]   "requestId": "22ff78da-8114-4dfe-a76e-ad2c3f2d9e99",
[14.3.2020 11.38.23]   "method": "GET",
[14.3.2020 11.38.23]   "uri": "/api/HttpExample"
[14.3.2020 11.38.23] }
[14.3.2020 11.38.23] Executing 'Functions.HttpExample' (Reason='This function was programmatically 
called via the host APIs.', Id=137d2055-2fbf-4eba-bbb7-fe6167aae5db)
[14.3.2020 11.38.23] Executed 'Functions.HttpExample' (Failed, Id=137d2055-2fbf-4eba-bbb7- 
fe6167aae5db)
[14.3.2020 11.38.23] System.Private.CoreLib: Exception while executing function: 
Functions.HttpExample. System.Private.CoreLib: Result: Failure      
Exception: ClassCastException: class jdk.internal.loader.ClassLoaders$AppClassLoader cannot be cast 
to class java.net.URLClassLoader (jdk.internal.loader.ClassLoaders$AppClassLoader and 
java.net.URLClassLoader are in module java.base of loader 'bootstrap')
Stack: java.lang.ClassCastException: class jdk.internal.loader.ClassLoaders$AppClassLoader cannot be 
cast to class java.net.URLClassLoader (jdk.internal.loader.ClassLoaders$AppClassLoader and 
java.net.URLClassLoader are in module java.base of loader 'bootstrap')
[14.3.2020 11.38.23]    at com.microsoft.azure.functions.worker.reflect.DefaultClassLoaderProvider.addUrlToSystemClassLoader(Default 
   ClassLoaderProvider.java:72)

enter image description here

1 Ответ

1 голос
/ 16 марта 2020

Судя по наличию java .base / jdk.internal.loader.ClassLoaders в трассировке стека, вы используете Java 9 или новее. DefaultRestartInitializer в Spring Boot пытается преобразовать загрузчик класса приложения в URLClassLoader. Это работает в Java 8 и более ранних версиях, но не работает в Java 9 и более поздних версиях. Spring Boot был обновлён до версии 2.0, чтобы справиться с этим изменением в Java 9.

Если вы хотите использовать Spring Boot с Java 9 или более поздней версией, вам следует выполнить обновление до Spring Boot 2. В то время На момент написания статьи последняя версия 2.0.5 поддерживает Java 8, 9 и 10. Spring Boot 2.1, который будет выпущен позднее в этом году, добавит поддержку Java 11.

...