Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取错误:从输入流读取实体时出错_Java_Rest_Ssl_Jersey_Jax Rs - Fatal编程技术网

Java 获取错误:从输入流读取实体时出错

Java 获取错误:从输入流读取实体时出错,java,rest,ssl,jersey,jax-rs,Java,Rest,Ssl,Jersey,Jax Rs,我有一个Jersey REST客户端正在与PagerDuty(一种RESTful https服务)交谈(或至少尝试交谈)。我有我的客户机配置为SSL的,似乎做的东西正确。但当我尝试连接并访问URI时,我得到了一条消息:从输入流读取实体时出错,我认为这是我的错误,而不是PagerDuty的错误 这是我的密码: import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; imp

我有一个Jersey REST客户端正在与PagerDuty(一种RESTful https服务)交谈(或至少尝试交谈)。我有我的客户机配置为SSL的,似乎做的东西正确。但当我尝试连接并访问URI时,我得到了一条消息:从输入流读取实体时出错,我认为这是我的错误,而不是PagerDuty的错误

这是我的密码:

import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Invocation;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;

import org.glassfish.jersey.client.ClientResponse;




public class Harvest {

    public static void main(String[] args) throws KeyManagementException, 
        NoSuchAlgorithmException, NullPointerException {

        SSLContext sslContext = SSLContext.getInstance("SSL");
        HostnameVerifier
           hostnameVerifier=HttpsURLConnection.getDefaultHostnameVerifier();

        SecureRandom random = new SecureRandom();
        byte bytes[] = new byte[20];
        random.nextBytes(bytes);

        sslContext.init(null, null, random);

        Client client = ClientBuilder.newBuilder()
                .sslContext(sslContext)
                .hostnameVerifier(hostnameVerifier)
                .build();


        WebTarget target = client.target("https://peakhosting.pagerduty.com/api/v1/schedules");
        Invocation.Builder builder;
        builder = target.request();
        builder.header("Authorization", "Token token=<secret>");
        builder.accept(MediaType.APPLICATION_JSON);  

-->     ClientResponse response = builder.accept("application/json").get(ClientResponse.class);
        System.out.println(response.getStatus());

        if (response.getStatus() != 200) {
            throw new RuntimeException("Failed : HTTP error code : "
                    + response.getStatus());
        }


    }
}
导入java.security.KeyManagementException;
导入java.security.NoSuchAlgorithmException;
导入java.security.SecureRandom;
导入javax.net.ssl.HostnameVerifier;
导入javax.net.ssl.HttpsURLConnection;
导入javax.net.ssl.SSLContext;
导入javax.ws.rs.client.client;
导入javax.ws.rs.client.ClientBuilder;
导入javax.ws.rs.client.Invocation;
导入javax.ws.rs.client.WebTarget;
导入javax.ws.rs.core.MediaType;
导入org.glassfish.jersey.client.ClientResponse;
公开课收获{
公共静态void main(字符串[]args)引发KeyManagementException,
NoSuchAlgorithmException,NullPointerException{
SSLContext SSLContext=SSLContext.getInstance(“SSL”);
主机名验证程序
hostnameVerifier=HttpsURLConnection.getDefaultHostnameVerifier();
SecureRandom=新的SecureRandom();
字节字节[]=新字节[20];
随机。下一个字节(字节);
init(null,null,random);
Client Client=ClientBuilder.newBuilder()
.sslContext(sslContext)
.hostnameVerifier(hostnameVerifier)
.build();
WebTarget=client.target(“https://peakhosting.pagerduty.com/api/v1/schedules");
调用生成器;
builder=target.request();
builder.header(“授权”,“令牌=”);
accept(MediaType.APPLICATION_JSON);
-->ClientResponse-response=builder.accept(“application/json”).get(ClientResponse.class);
System.out.println(response.getStatus());
if(response.getStatus()!=200){
抛出新的RuntimeException(“失败:HTTP错误代码:”
+response.getStatus());
}
}
}
知道发生了什么吗。也许SSL出错了,这就是问题的原因?在任何情况下,我都在生成异常的行上放置了一个箭头。我们将非常感谢您的帮助

谢谢,
Rob

您的问题可能是试图获取
ClientResponse
的实例,这是不正确的。对于Jersey-/JAX-RS-2.x,您应该在返回类型中使用
Response

Response response = builder.accept("application/json").get();
如果要读取实体,可以使用

MyPojo pojo = response.readEntity(MyPojo.class);
如果您不需要
响应中的任何信息
,那么您可以简单地执行此操作

MyPojo pojo = builder.accept(...).get(MyPojo.class);
另一件事,对于JSON到POJO,反之亦然,请确保您有


org.glassfish.jersey.media
泽西媒体公司
${jersey2.version}

多一点细节。stacktrace中有两行“原因”可能有助于了解发生了什么(可能缺少依赖项?):原因:java.lang.IllegalArgumentException:找不到非具体映射类型的反序列化程序[Map type;class javax.ws.rs.core.MultivaluedMap,[simple type,class java.lang.String]->[集合类型;类java.util.List,包含[简单类型,类java.lang.String]]
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>${jersey2.version}</version>
</dependency>