我们正在考虑将一些遗留代码升级到Java 10.由于JAXB默认不可见(编辑:正确的长期解决方案不是使用各种JVM标志来规避症状,而是正确修复它)我已将此片段添加到我的pom.xml:
<!-- https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api -->
<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-core</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
不幸的是,在stderr启动时仍然会出现警告.显然这不是正确的解决方法.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.sun.xml.bind.v2.runtime.reflect.opt.Injector (file:/home/tra/.m2/repository/com/sun/xml/bind/jaxb-impl/2.3.0/jaxb-impl-2.3.0.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int)
WARNING: Please consider reporting this to the maintainers of com.sun.xml.bind.v2.runtime.reflect.opt.Injector
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Run Code Online (Sandbox Code Playgroud)
完整的输出--illegal-access=debug是:
WARNING: Illegal …Run Code Online (Sandbox Code Playgroud) [!] Android工具链 - 针对Android设备开发(Android SDK 27.0.3)
•Android SDK a ..\Android\sdk•未配置Android NDK位置(可选;对本机分析支持很有用)•平台android-27,构建工具27.0.3•Java二进制文件:C:\ Program Files\Android\Android Studio\jre\bin\java•Java版OpenJDK运行时环境(版本1.8.0_152-release-1024-b02)X Android许可证状态未知.
当我运行Flutter医生时,我收到了Android Sdk的错误,尽管我仍然可以在我的设备上构建/运行.我只是想知道如何解决这个问题.我相信我已经下载了最新版本的android sdk,不知道发生了什么,因为我上周没有这个问题.
在评论中遵循几个可能的修复后,它导致了一个新问题.我安装了较新版本的android sdk P,8和7以及一个新的jdk10.显然仍然没有足够的更新.
C:\Flutter\flutter>flutter doctor --android-licenses
A newer version of the Android SDK is required. To update, run:
C:\Users\tdmil\AppData\Local\Android\sdk\tools\bin\sdkmanager --update
Run Code Online (Sandbox Code Playgroud)
C:\ Flutter\flutter> C:\ users\username\appdata\local\android\sdk\tools\bin\sdkmanager.bat --update
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156)
at com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75)
at com.android.sdklib.repository.AndroidSdkHandler.<clinit>(AndroidSdkHandler.java:81)
at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:73)
at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
... 5 more
Run Code Online (Sandbox Code Playgroud) 我理解它是如何工作的但如果我想将MD5打印成String我该怎么做?
public static void getMD5(String fileName) throws Exception{
InputStream input = new FileInputStream(fileName);
byte[] buffer = new byte[1024];
MessageDigest hash = MessageDigest.getInstance("MD5");
int read;
do {
read = input.read(buffer);
if (read > 0) {
hash.update(buffer, 0, read);
}
} while (read != -1);
input.close();
}
Run Code Online (Sandbox Code Playgroud) 显然,com.sun.xml.bind:jaxb-impl 工件在 Maven 存储库中被标记为“旧JAXB 运行时模块”(请参阅下面的链接),但这两个工件仍在发布新版本:
https://mvnrepository.com/artifact/org.glassfish.jaxb/jaxb-runtime https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-impl
这个答案在我的 Maven 项目中,哪些工件应该用于 JAXB RI? 没有阐明差异。
上述问题和这一问题的公认答案如何解决 java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException 的结论是,对于 Java 9+,您应该使用: org.glassfish.jaxb:jaxb-runtime
但我有使用 com.sun.xml.bind:jaxb-impl 的代码,它似乎工作正常。那么,迁移到 jaxb-runtime 会带来什么损失或收益呢?
即使是最新版本(我撰写本文时为 3.0.2)也可用于“旧”jaxb-impl 模块。如果 Oracle 不再这样做,那么谁制作了 com.sun.xml.bind:jaxb-impl 工件?它是做什么用的?为什么它不与 jaxb-runtime 共享 Maven 组坐标?
是否有任何中心位置可以清楚地记录 JAXB 的当前状况?
现在 JAXB 存在很多混乱。
PS 我暂时需要保持与 Java 8 的兼容性 - 所以我还不能使用 3.x,而 2.4.x 似乎是一次放弃的尝试,旨在修复他们在分离出来时愚蠢地破坏的模块化性。 JDK。
我正在开发Eclipse中的Maven项目(branch platform-bom_brussels-sr7).当我最近尝试切换Java构建路径,为项目JDK 10,Eclipse构建再也找不到类,如javax.xml.xpath.XPath,org.w3c.dom.Document或org.xml.sax.SAXException.似乎只有XML相关的类受到影响,主要来自Maven依赖xml-apis-1.4.01.
从Eclipse中尝试Maven构建工作没有错误.Ctrl-LeftClick上一个假定缺失的类找到该类并在Eclipse编辑器中打开它.似乎只有Eclipse构建受到影响.
我尝试了几件事,但都没有帮助.我试过了:
我写了一个JAX-RS服务器,客户端都使用Jersey.我想将我的实体集合发送给客户端,我做了以下步骤:
我发出请求,它在服务器端成功处理客户端收到错误:
org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyReader not found for media type=application/json, type=interface java.util.List, genericType=java.util.List<model.HotelsEntity>.
org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:225)
org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:149)
org.glassfish.jersey.message.internal.MessageBodyFactory.readFrom(MessageBodyFactory.java:1124)
org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:853)
org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:812)
org.glassfish.jersey.client.ClientResponse.readEntity(ClientResponse.java:377)
org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:813)
org.glassfish.jersey.client.JerseyInvocation.access$600(JerseyInvocation.java:90)
org.glassfish.jersey.client.JerseyInvocation$3.call(JerseyInvocation.java:693)
org.glassfish.jersey.internal.Errors.process(Errors.java:315)
org.glassfish.jersey.internal.Errors.process(Errors.java:297)
org.glassfish.jersey.internal.Errors.process(Errors.java:228)
org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:424)
org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:689)
org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:405)
org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:301)
service.HotelService.getHotels(HotelService.java:30)
actions.HotelAction.perform(HotelAction.java:42)
MainServlet.processResponse(MainServlet.java:33)
MainServlet.doPost(MainServlet.java:22)
javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
Run Code Online (Sandbox Code Playgroud)
服务器:
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getHotelsList(@QueryParam("startDate") String startDate,
@QueryParam("endDate") String endDate) {
List<HotelsEntity> list = hotelService.getAll();
return ResponseFactory.response(Response.Status.OK, list);
}
Run Code Online (Sandbox Code Playgroud)
客户:
GenericType<List<HotelsEntity>> genericType = new GenericType<List<HotelsEntity>>(){};
WebTarget target = client.target(preparePath());
List<HotelsEntity> hotels = target.request(MediaType.APPLICATION_JSON_TYPE).get(genericType);
Run Code Online (Sandbox Code Playgroud)
提供者:
public class JsonProvider<T> implements MessageBodyReader<T>, MessageBodyWriter<T> {
@Override …Run Code Online (Sandbox Code Playgroud) 我正在使用maven和java-9构建我的项目.我在我的pom.xml文件中添加了:
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<compilerArgs>
<arg>--add-modules</arg>
<arg>java.xml.bind</arg>
</compilerArgs>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
但是,为了运行应用程序,我必须像这样运行它:
java -jar --add-modules java.xml.bind my-app.jar
Run Code Online (Sandbox Code Playgroud)
有没有办法构建应用程序,从命令行运行而不是--add-modules java.xml.bindjava命令行参数?
sdk-tools-darwin-4333796 (26.1.1)在运行时使用Java 9 sdkmanager抛出:
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156)
at com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75)
at com.android.sdklib.repository.AndroidSdkHandler.<clinit>(AndroidSdkHandler.java:81)
at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:73)
at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
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)
... 5 more
Run Code Online (Sandbox Code Playgroud) 有没有一种简单的方法将Java Date转换为XML日期字符串格式,反之亦然?
干杯,
Andez
我们使用maven并拥有依赖于其他内部工件的工件.我正在迁移到java-9,并且打算首先将所有内容迁移到Java 9而不模块化代码(即在未命名的模块中).
我遇到的问题是我们依赖java.xml.bind,现在不包含在默认模块中.是否有一种"正确"的方式来表达对java.xml.bindMaven的依赖?