为什么 Jersey 客户端会抛出“从输入流读取实体时出错”的错误。

huangapple 未分类评论46阅读模式
英文:

Why Jersey client throws Error reading Entity from input stream

问题

以下是您提供的代码和错误信息的翻译部分:

private List<JsonNode> readUrl(){
  javax.ws.rs.client.Client client = ClientBuilder.newClient();
  String restUrl = restUrl;
  javax.ws.rs.client.WebTarget target = client.target(restUrl);
  javax.ws.rs.core.Response response = target.request(MediaType.APPLICATION_JSON).accept(acceptType).header(HttpHeaders.AUTHORIZATION, "xyz-abc").get();
  final int statusCode = response.getStatus();
  LOGGER.debug("Status Code: " + statusCode);
  String responseStr = response.readEntity(String.class); // 异常在此处抛出
}
<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <java.version>1.8</java.version>
  <jersey.version>2.3.1</jersey.version>
  <jackson.version>2.9.3</jackson.version>
  <junit.version>4.12</junit.version>
</properties>
<!-- Jersey 客户端依赖 -->
<dependency>
  <groupId>org.glassfish.jersey.core</groupId>
  <artifactId>jersey-client</artifactId>
  <version>${jersey.version}</version>
</dependency>
<dependency>
  <groupId>javax.xml.bind</groupId>
  <artifactId>jaxb-api</artifactId>
  <version>${jersey.version}</version>
</dependency>
<!-- Jackson 依赖 -->
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>${jackson.version}</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.jaxrs</groupId>
  <artifactId>jackson-jaxrs-json-provider</artifactId>
  <version>${jackson.version}</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.dataformat</groupId>
  <artifactId>jackson-dataformat-xml</artifactId>
  <version>${jackson.version}</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.dataformat</groupId>
  <artifactId>jackson-dataformat-yaml</artifactId>
  <version>${jackson.version}</version>
</dependency>
<dependency>
  <groupId>org.glassfish.jersey.media</groupId>
  <artifactId>jersey-media-json-jackson</artifactId>
  <version>${jersey.version}</version>
</dependency>
17:38:37.608 [main] DEBUG 读取 URL: https://example.com/abc&page=3&page_size=10000
17:39:21.278 [main] DEBUG 状态码: 200
17:41:42.837 [main] DEBUG 断开与数据库的连接: :memory:
17:41:42.839 [main] DEBUG 类 com.spacey.processor.impl.AProcessor 在 338 秒内完成
17:41:42.840 [main] ERROR 错误!javax.ws.rs.ProcessingException: 从输入流中读取实体时出错。
java.lang.RuntimeException: javax.ws.rs.ProcessingException: 从输入流中读取实体时出错。
        at com.spacey.processor.impl.AProcessor.process(AProcessor.java:141)
        at app.Executor.run(Executor.java:52)
        at app.Main.run(Main.java:33)
        at app.Main.main(Main.java:67)
Caused by: javax.ws.rs.ProcessingException: 从输入流中读取实体时出错。
        at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:867)
        at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:785)
        at org.glassfish.jersey.client.InboundJaxrsResponse.readEntity(InboundJaxrsResponse.java:96)
        at org.glassfish.jersey.client.ScopedJaxrsResponse.access$001(ScopedJaxrsResponse.java:56)
        at org.glassfish.jersey.client.ScopedJaxrsResponse$1.call(ScopedJaxrsResponse.java:77)
        ...
Caused by: javax.net.ssl.SSLException: SSL 对等方错误关闭连接
        at sun.security.ssl.InputRecord.readV3Record(Unknown Source)
        ...
        at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:851)
        ... 17 more
17:41:43.061 [main] INFO 完成,用时 339202 毫秒

请注意,以上内容只是您提供的内容的翻译部分,没有包括任何额外的信息或回答。如果您需要进一步的帮助,请随时提问。

英文:

I recently built an application using jersey/jax-rs acting as a client. Sometimes the app works well. But most of the time I get this error thrown while performing readEntity(String.class) even though response'es status return '200' code.

17:38:37.608 [main] DEBUG Read URL: https://example.com/abc&amp;page=3&amp;page_size=10000
17:39:21.278 [main] DEBUG Status code: 200
17:41:42.837 [main] DEBUG Disconnecting from database: :memory:
17:41:42.839 [main] DEBUG class com.spacey.processor.impl.AProcessor Finished in 338 seconds
17:41:42.840 [main] ERROR Error! javax.ws.rs.ProcessingException: Error reading entity from input stream.
java.lang.RuntimeException: javax.ws.rs.ProcessingException: Error reading entity from input stream.
        at com.spacey.processor.impl.AProcessor.process(AProcessor.java:141)
        at app.Executor.run(Executor.java:52)
        at app.Main.run(Main.java:33)
        at app.Main.main(Main.java:67)
Caused by: javax.ws.rs.ProcessingException: Error reading entity from input stream.
        at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:867)
        at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:785)
        at org.glassfish.jersey.client.InboundJaxrsResponse.readEntity(InboundJaxrsResponse.java:96)
        at org.glassfish.jersey.client.ScopedJaxrsResponse.access$001(ScopedJaxrsResponse.java:56)
        at org.glassfish.jersey.client.ScopedJaxrsResponse$1.call(ScopedJaxrsResponse.java:77)
        at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
        at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
        at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
        at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:397)
        at org.glassfish.jersey.client.ScopedJaxrsResponse.readEntity(ScopedJaxrsResponse.java:74)
        at com.spacey.impl.RestInvoker.readUrl(RestInvoker.java:89)
        at com.spacey.impl.RestInvoker.read(RestInvoker.java:62)
        at com.spacey.impl.RestInvoker.read(RestInvoker.java:71)
        at com.spacey.impl.AProcessor.readObjects(AProcessor.java:157)
        at com.spacey.impl.AProcessor.process(AProcessor.java:130)
        ... 3 more
Caused by: javax.net.ssl.SSLException: SSL peer shut down incorrectly
        at sun.security.ssl.InputRecord.readV3Record(Unknown Source)
        at sun.security.ssl.InputRecord.read(Unknown Source)
        at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
        at sun.security.ssl.SSLSocketImpl.readDataRecord(Unknown Source)
        at sun.security.ssl.AppInputStream.read(Unknown Source)
        at java.io.BufferedInputStream.fill(Unknown Source)
        at java.io.BufferedInputStream.read1(Unknown Source)
        at java.io.BufferedInputStream.read(Unknown Source)
        at sun.net.www.http.ChunkedInputStream.fastRead(Unknown Source)
        at sun.net.www.http.ChunkedInputStream.read(Unknown Source)
        at java.io.FilterInputStream.read(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(Unknown Source)
        at org.glassfish.jersey.client.HttpUrlConnector$1.read(HttpUrlConnector.java:157)
        at org.glassfish.jersey.message.internal.EntityInputStream.read(EntityInputStream.java:101)
        at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
        at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
        at sun.nio.cs.StreamDecoder.read(Unknown Source)
        at java.io.InputStreamReader.read(Unknown Source)
        at java.io.Reader.read(Unknown Source)
        at org.glassfish.jersey.message.internal.ReaderWriter.readFromAsString(ReaderWriter.java:172)
        at org.glassfish.jersey.message.internal.ReaderWriter.readFromAsString(ReaderWriter.java:158)
        at org.glassfish.jersey.message.internal.AbstractMessageReaderWriterProvider.readFromAsString(AbstractMessageReaderWriterProvider.java:115)
        at org.glassfish.jersey.message.internal.StringMessageProvider.readFrom(StringMessageProvider.java:77)
        at org.glassfish.jersey.message.internal.StringMessageProvider.readFrom(StringMessageProvider.java:59)
        at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.invokeReadFrom(ReaderInterceptorExecutor.java:239)
        at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:211)
        at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:139)
        at org.glassfish.jersey.message.internal.MessageBodyFactory.readFrom(MessageBodyFactory.java:1109)
        at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:851)
        ... 17 more
17:41:43.061 [main] INFO  Done in 339202ms

This is what my code looks like:

private List&lt;JsonNode&gt; readUrl(){
  javax.ws.rs.client.Client client = ClientBuilder.newClient();
  String restUrl = restUrl;
  javax.ws.rs.client.WebTarget target = client.target(restUrl);
  javax.ws.rs.core.Response response = target.request(MediaType.APPLICATION_JSON).accept(acceptType).header(HttpHeaders.AUTHORIZATION, &quot;xyz-abc&quot;).get();
  final int statusCode = response.getStatus();
  LOGGER.debug(&quot;Status Code: &quot; + statusCode);
  String responseStr = response.readEntity(String.class); // exception gets thrown here
}

I don't understand what is the mistake here. And this is what my pom.xml looks like:

         &lt;properties&gt;
	       &lt;project.build.sourceEncoding&gt;UTF-8&lt;/project.build.sourceEncoding&gt;
	       &lt;java.version&gt;1.8&lt;/java.version&gt;
       	   &lt;jersey.version&gt;2.3.1&lt;/jersey.version&gt;
	       &lt;jackson.version&gt;2.9.3&lt;/jackson.version&gt;
	       &lt;junit.version&gt;4.12&lt;/junit.version&gt;
        &lt;/properties&gt;
        &lt;!-- Jersey Client --&gt;

		&lt;dependency&gt;
			&lt;groupId&gt;org.glassfish.jersey.core&lt;/groupId&gt;
			&lt;artifactId&gt;jersey-client&lt;/artifactId&gt;
			&lt;version&gt;${jersey.version}&lt;/version&gt;
		&lt;/dependency&gt;
		&lt;dependency&gt;
			&lt;groupId&gt;javax.xml.bind&lt;/groupId&gt;
			&lt;artifactId&gt;jaxb-api&lt;/artifactId&gt;
			&lt;version&gt;${jersey.version}&lt;/version&gt;
		&lt;/dependency&gt;

		&lt;!-- Jackson --&gt;

		&lt;dependency&gt;
			&lt;groupId&gt;com.fasterxml.jackson.core&lt;/groupId&gt;
			&lt;artifactId&gt;jackson-databind&lt;/artifactId&gt;
			&lt;version&gt;${jackson.version}&lt;/version&gt;
		&lt;/dependency&gt;
		&lt;dependency&gt;
			&lt;groupId&gt;com.fasterxml.jackson.jaxrs&lt;/groupId&gt;
			&lt;artifactId&gt;jackson-jaxrs-json-provider&lt;/artifactId&gt;
			&lt;version&gt;${jackson.version}&lt;/version&gt;
		&lt;/dependency&gt;
		&lt;dependency&gt;
			&lt;groupId&gt;com.fasterxml.jackson.dataformat&lt;/groupId&gt;
			&lt;artifactId&gt;jackson-dataformat-xml&lt;/artifactId&gt;
			&lt;version&gt;${jackson.version}&lt;/version&gt;
		&lt;/dependency&gt;
		&lt;dependency&gt;
			&lt;groupId&gt;com.fasterxml.jackson.dataformat&lt;/groupId&gt;
			&lt;artifactId&gt;jackson-dataformat-yaml&lt;/artifactId&gt;
			&lt;version&gt;${jackson.version}&lt;/version&gt;
		&lt;/dependency&gt;
		&lt;dependency&gt;
			&lt;groupId&gt;org.glassfish.jersey.media&lt;/groupId&gt;
			&lt;artifactId&gt;jersey-media-json-jackson&lt;/artifactId&gt;
			&lt;version&gt;${jersey.version}&lt;/version&gt;
		&lt;/dependency&gt;

huangapple
  • 本文由 发表于 2020年4月9日 03:23:21
  • 转载请务必保留本文链接:https://java.coder-hub.com/61108434.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定