gpt4 book ai didi

java - 在 AbstractInstallerScreen 中创建 Jersey 客户端的依赖性问题

转载 作者:行者123 更新时间:2023-11-30 10:38:02 25 4
gpt4 key购买 nike

在我们的 Install4j 项目中,我们想使用 Jersey 调用我们的网络服务器。我们为此任务实现了一个 AbstractInstallAction,它调用服务器使用

Client client = Client.create(new DefaultClientConfig());

这在 CustomAction 中工作正常;现在我想在 AbstractInstallerScreen 中使用相同的代码;屏幕中同一代码行的调用导致以下异常(我缩短了日志条目,但我想你会明白这一点):

Oct 06, 2016 10:10:24 AM com.sun.jersey.spi.inject.Errors processErrorMessages
SEVERE: The following errors and warnings have been detected with resource and/or provider classes:
SEVERE: Missing dependency for constructor public com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$App(com.sun.jersey.spi.inject.Injectable,javax.ws.rs.ext.Providers) at parameter index 0
SEVERE: Missing dependency for constructor public com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$Text(com.sun.jersey.spi.inject.Injectable,javax.ws.rs.ext.Providers) at parameter index 0
SEVERE: Missing dependency for constructor public com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General(com.sun.jersey.spi.inject.Injectable,javax.ws.rs.ext.Providers) at parameter index 0
SEVERE: Missing dependency for constructor public com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$App(com.sun.jersey.spi.inject.Injectable,javax.ws.rs.ext.Providers) at parameter index 0
SEVERE: Missing dependency for constructor public com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$Text(com.sun.jersey.spi.inject.Injectable,javax.ws.rs.ext.Providers) at parameter index 0
SEVERE: Missing dependency for constructor public com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General(com.sun.jersey.spi.inject.Injectable,javax.ws.rs.ext.Providers) at parameter index 0
SEVERE: Missing dependency for constructor public com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$App(com.sun.jersey.spi.inject.Injectable,javax.ws.rs.ext.Providers) at parameter index 0
SEVERE: Missing dependency for constructor public com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$Text(com.sun.jersey.spi.inject.Injectable,javax.ws.rs.ext.Providers) at parameter index 0
...
SEVERE: Missing dependency for field: com.sun.jersey.spi.MessageBodyWorkers com.sun.jersey.json.impl.provider.entity.JSONWithPaddingProvider.bodyWorker
com.sun.jersey.spi.inject.Errors$ErrorMessagesException
at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170)
at com.sun.jersey.spi.inject.Errors.postProcess(Errors.java:136)
at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:199)
at com.sun.jersey.api.client.Client.<init>(Client.java:188)
at com.sun.jersey.api.client.Client.<init>(Client.java:171)
at com.sun.jersey.api.client.Client.create(Client.java:683)
...

在我的 POM 文件中,我使用以下方式加载 Jersey 依赖项:

<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-multipart</artifactId>
<version>1.18.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.18.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.18.1</version>
</dependency>

所以问题是:我应该如何在安装程序屏幕中进行调用,这样我就不会收到提示缺少依赖项的异常,或者在自定义操作中使用 jersey 有什么区别?

最佳答案

这是由于 JAX-WS 误用了上下文类加载器。

在脚本和 Action 中,install4j 出于这个原因临时重置上下文类加载器,但在屏幕和表单组件中,这不会发生。

如果你这样调用你的代码:

ClassLoader oldContextClassLoader = Thread.currentThread().getContextClassLoader();
try {
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
// TODO Add your code that uses JAX-WS
} finally {
Thread.currentThread().setContextClassLoader(oldContextClassLoader);
}

它应该可以工作。

关于java - 在 AbstractInstallerScreen 中创建 Jersey 客户端的依赖性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39891875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com