Servlets URL.openConnection()方法不适用于WebSphere Liberty概要文件

Servlets URL.openConnection()方法不适用于WebSphere Liberty概要文件,servlets,jax-rs,httpurlconnection,httpserver,websphere-liberty,Servlets,Jax Rs,Httpurlconnection,Httpserver,Websphere Liberty,我正在使用javax.servlet.http.HttpServlet创建和初始化我的服务器 我正在IBMWebSphereLiberty服务器上部署servlet 当我尝试执行任何REST调用时,我收到401未经授权的错误 HttpURLConnection conn = null; String url = "https://someurl/getdata"; try { conn = (HttpURLConnection) url.openConnection

我正在使用
javax.servlet.http.HttpServlet
创建和初始化我的服务器

我正在IBMWebSphereLiberty服务器上部署servlet

当我尝试执行任何REST调用时,我收到
401未经授权的
错误

 HttpURLConnection conn = null;
 String url = "https://someurl/getdata";

    try {
        conn = (HttpURLConnection) url.openConnection();
        conn.setDoOutput(true);
        String accessToken = this.token;
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Content-Type",
                "application/x-www-form-urlencoded;charset=utf-8");
        conn.setRequestProperty("Accept", "application/json;charset=utf-8");
        conn.setRequestProperty("X-Auth-Token", "bmXaj83sgo4"); } catch (Exception e) {
        e.printStackTrace();
    }
抛出
NullPointerException
,或在以下行返回
401未授权
错误:

conn = (HttpURLConnection) url.openConnection();
但我可以通过RestClient或使用简单的Java项目访问相同的URL

我的
web.xml
如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">

    <display-name>SampleTesting</display-name>

    <servlet>
        <servlet-name>Monkey Server</servlet-name>
        <servlet-class>com.sample.testing.basic.BasicMonkeyServer</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
</web-app>

抽样测试
猴子服务器
com.sample.testing.basic.BasicMonkeyServer
1.

值得一提的是,这段代码(修改后可以正常工作)运行良好,并在8557上的servlet中验证为基本的受身份验证保护的资源


您的代码或服务可能会有所不同。张贴完整的代码

值得一提的是,这段代码(修改后可以正常工作)运行良好,并在8557上的servlet中验证为基本的受身份验证保护的资源


您的代码或服务可能会有所不同。张贴完整的代码

问题在于我试图访问的URL和我使用的凭据。
尝试使用不同的凭据,效果良好。

问题在于我尝试访问的URL和使用的凭据。 使用不同的凭据进行了尝试,效果良好。

编译错误 编译代码时必须有编译错误,因为
url
是一个,并且没有
openConnection()
方法:

String url = "https://someurl/getdata";
conn = (HttpURLConnection) url.openConnection();
尝试使用,而不是:

如果您有权访问您试图请求的资源,并且您的访问令牌有效,那么您的代码应该可以正常工作

JAX-RS客户端API 我建议您不要使用,而是使用,这是在Java中使用REST API的标准方式:

Client client = ClientBuilder.newClient();
String data = client.target("https://someurl/getdata")
        .request(MediaType.APPLICATION_FORM_URLENCODED)
        .get(String.class);
要执行身份验证,请创建:

并将其注册到您的:

从长远来看,使用JAX-RS客户端API将为您提供更大的灵活性。

编译错误 编译代码时必须有编译错误,因为
url
是一个,并且没有
openConnection()
方法:

String url = "https://someurl/getdata";
conn = (HttpURLConnection) url.openConnection();
尝试使用,而不是:

如果您有权访问您试图请求的资源,并且您的访问令牌有效,那么您的代码应该可以正常工作

JAX-RS客户端API 我建议您不要使用,而是使用,这是在Java中使用REST API的标准方式:

Client client = ClientBuilder.newClient();
String data = client.target("https://someurl/getdata")
        .request(MediaType.APPLICATION_FORM_URLENCODED)
        .get(String.class);
要执行身份验证,请创建:

并将其注册到您的:


从长远来看,使用JAX-RS客户端API将给您带来更大的灵活性。

问题中的代码不会编译给定的url,因为url是字符串而不是java.net.url。如果您提供了实际的代码和异常,可能会有所帮助。当你拿到401时,你有没有检查过你是否有权限?访问的资源是否受到保护?您是否提供了任何凭据?@Alasdair:谢谢您的回复。是的,你说得对。我正在将URL从字符串转换为java.net.URL。问题中的代码不会编译给定的URL是字符串而不是java.net.URL。如果您提供了实际的代码和异常,可能会有所帮助。当你拿到401时,你有没有检查过你是否有权限?访问的资源是否受到保护?您是否提供了任何凭据?@Alasdair:谢谢您的回复。是的,你说得对。我正在将URL从字符串转换为java.net.URL。谢谢。是的,代码运行良好。我尝试了不同的凭据和URL,它正在工作。谢谢。是的,代码运行良好。我尝试了不同的凭据和URL,它正在工作。
Client client = ClientBuilder.newClient().register(new Authenticator("your-token"));