原因和簡單介紹
我有一些代碼使用JAXB API類,它們是作為Java 6/7/8中JDK的一部分提供的。當我使用Java 9+運行相同的代碼時,在運行時我得到錯誤,指示無法找到JAXB類。
自Java 6以來,JAXB類已作為JDK的一部分提供,為什么Java 9不再能夠找到這些類?
使用Java 8構建將使您的代碼編譯為yes,但是當嘗試在Java 9+上運行該編譯代碼時,它將失敗,因為JAX-B不存在。
正如之前關于Java 11的一切內容中看到的那樣,它不再支持Java EE模塊。Java 11刪除了對 java.xml.bind- 它定義了XML綁定的Java體系結構 (JAXB)API的支持
Java 11包javax.xml.bind不再存在。
Java 7版本:包含和工作
Java 8版本:包含和工作
Java 9版本:已棄用
Java 10版:已棄用
Java 11版本:已刪除
SEVERE: StandardWrapper.Throwable
java.lang.TypeNotPresentException: Type javax.xml.bind.JAXBContext not presentat java.base/sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:117)at java.base/sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:125)at java.base/sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49)at java.base/sun.reflect.generics.visitor.Reifier.reifyTypeArguments(Reifier.java:68)at java.base/sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:138)at java.base/sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49)at java.base/sun.reflect.generics.repository.ClassRepository.computeSuperInterfaces(ClassRepository.java:117)at java.base/sun.reflect.generics.repository.ClassRepository.getSuperInterfaces(ClassRepository.java:95)at java.base/java.lang.Class.getGenericInterfaces(Class.java:1138)at com.sun.jersey.core.reflection.ReflectionHelper.getClass(ReflectionHelper.java:533)at com.sun.jersey.core.reflection.ReflectionHelper.getClass(ReflectionHelper.java:529)at com.sun.jersey.core.spi.factory.ContextResolverFactory.getParameterizedType(ContextResolverFactory.java:202)at com.sun.jersey.core.spi.factory.ContextResolverFactory.init(ContextResolverFactory.java:89)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:801)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)at org.apache.catalina.startup.Catalina.start(Catalina.java:695)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.base/java.lang.reflect.Method.invoke(Method.java:566)at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:350)at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:492)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBContextat org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1328)at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1157)at java.base/java.lang.Class.forName0(Native Method)at java.base/java.lang.Class.forName(Class.java:398)at java.base/sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:114)... 59 more
解決方案
為了解決此問題,需要手動將以下JAXB Maven依賴項添加到項目中。
適當的長期解決方案:(JDK 9及更高版本)
<!-- jaxb模塊引用 - start--><dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId></dependency><dependency><groupId>com.sun.xml.bind</groupId><artifactId>jaxb-impl</artifactId><version>2.3.0</version></dependency><dependency><groupId>org.glassfish.jaxb</groupId><artifactId>jaxb-runtime</artifactId><version>2.3.0</version></dependency><dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version></dependency><!-- jaxb模塊引用 - end -->
將每個模塊的JDK版本都修改到JDK8版本以下
參考鏈接:
https://stackoverflow.com/questions/43574426/how-to-resolve-java-lang-noclassdeffounderror-javax-xml-bind-jaxbexception-in-j
參考鏈接:
https://crunchify.com/java-11-and-javax-xml-bind-jaxbcontext/
總結
以上是生活随笔為你收集整理的运行SpringBoot时:Type javax.xml.bind.JAXBContext not present的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。