具有两个不同版本 Jersey 服务器的 Java 客户端

标签 java jersey jersey-client

我有一个连接到使用 jersey 版本 1.19 实现的 java 服务器(服务器 A)的 java 客户端,因此我将相同版本的 jersey 客户端添加到我的 pom 中,一切正常。 不需要我的客户端连接使用 jersey 版本 2.17 实现的其他 java 服务器(服务器 B),然后问题就开始了...... 当我尝试向服务器 B 发送请求时,我收到 org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException ,并且对于服务器 A,所有请求都工作正常。经过一番研究,我明白我需要更改 pom 文件中的 Jersey 客户端版本。 然后对服务器 B 的请求工作正常,但对服务器 A 的请求遇到相同的异常,我尝试将两个 Jersey 客户端版本放入我的 pom 中,只有服务器 B 工作正常。 有什么方法可以让我使用两种版本的 Jersey 服务器吗?

我的pom文件中的依赖项

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>javax.ws.rs-api</artifactId>
        <version>2.0</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
        <version>2.17</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-moxy</artifactId>
        <version>2.17</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-client</artifactId>
        <version>1.19</version>
    </dependency>

我得到的异常堆栈跟踪:

        Jan 03, 2017 5:03:22 PM org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor aroundWriteTo
    SEVERE: MessageBodyWriter not found for media type=application/json, type=class com.sun.jersey.api.representation.Form, genericType=class com.sun.jersey.api.representation.Form.
    [ERROR] 2017-01-03 17:03:23 [JavaFX Application Thread] controller.login(76) - Unable To Connect to the server.
    org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/json, type=class com.sun.jersey.api.representation.Form, genericType=class com.sun.jersey.api.representation.Form.
        at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:247) ~[jersey-common-2.17.jar:?]
        at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162) ~[jersey-common-2.17.jar:?]
        at org.glassfish.jersey.filter.LoggingFilter.aroundWriteTo(LoggingFilter.java:302) ~[jersey-common-2.17.jar:?]
        at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162) ~[jersey-common-2.17.jar:?]
        at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1128) ~[jersey-common-2.17.jar:?]
        at org.glassfish.jersey.client.ClientRequest.writeEntity(ClientRequest.java:502) ~[jersey-client-2.17.jar:?]
        at org.glassfish.jersey.client.HttpUrlConnector._apply(HttpUrlConnector.java:329) ~[jersey-client-2.17.jar:?]
        at org.glassfish.jersey.client.HttpUrlConnector.apply(HttpUrlConnector.java:242) ~[jersey-client-2.17.jar:?]
        at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:245) ~[jersey-client-2.17.jar:?]
        at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:671) ~[jersey-client-2.17.jar:?]
        at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:668) ~[jersey-client-2.17.jar:?]
        at org.glassfish.jersey.internal.Errors.process(Errors.java:315) ~[jersey-common-2.17.jar:?]
        at org.glassfish.jersey.internal.Errors.process(Errors.java:297) ~[jersey-common-2.17.jar:?]
        at org.glassfish.jersey.internal.Errors.process(Errors.java:228) ~[jersey-common-2.17.jar:?]

最佳答案

我通过使用另一个名为 Unirest 的休息客户端成功解决了这个问题,该客户端与两台服务器都可以正常工作。谢谢

关于具有两个不同版本 Jersey 服务器的 Java 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41458598/

相关文章:

java - Java 中的不可变对象(immutable对象)和访问数据

java - 失去焦点时如何在 JTextField 中保留选定的文本?

java - 在我的 mainActivity 中找不到 DataBindingUtil

ContainerRequestFilter 上的 junit 测试 - 验证 WebApplicationException 的实体

java - 尝试使用 Jersey 创建 Restful WebService 时出错

java - Web 服务 java JAX-RS 中的多个参数

java - Jersey 客户端内容配置中字段的某些顺序

java - Jersey @Consumes @Produces 不被服务器接受,

java - Volley Post 请求在 onResponse 内未返回任何响应

java - 如何根据 Maven 配置文件点击特定的 REST Url?