首页 > 解决方案 > 来自 xPage 的 API 调用

问题描述

我有一个 xPage,它使用服务器端 Javascript beforePageLoad 调用从远程 JSON REST 服务填充一些字段。

得到这个错误.....在java类'java.net.URL'上调用方法'openConnection()'时出错 ECL权限被拒绝(“java.lang.RuntimePermission”“accessClassInPackage.sun.net.www.protocol.https” )

这适用于网络浏览器。我是否需要更改任何客户端设置,或者是否有更好的方法来执行此操作,以便我也可以在 Notes XPiNC 环境中使用它?

代码如下...在此先感谢

var url = "https://api.companieshouse.gov.uk/company/" + CompanyNo;

var url:java.net.URL = new java.net.URL(url);
var urlconn:java.net.URLConnection = url.openConnection();
urlconn.setRequestProperty("Authorization", "Basic xxxxxxxx==");
if (urlconn.getResponseCode() < 400) {
 var reader:java.io.BufferedReader = new java.io.BufferedReader(
                                            new java.io.InputStreamReader(
                                            urlconn.getInputStream())
                                        );
 var inputLine;
    var jsonTxt = "";
    while ((inputLine = reader.readLine()) != null){
        jsonTxt += inputLine;
    }
    reader.close();

    viewScope.Response = fromJson(jsonTxt);
} else {
       /* error from server */

    viewScope.Response = "Error " + urlconn.getResponseCode() + url;
    }

标签: xpageslotus-dominoxpinchcl-notes

解决方案


在这种方法中,您需要更改一些内容:

  • 不要使用来自 SSJS 的 Java 类。将整个逻辑包装到一个 Java bean 中。它给你更好的开发体验,更容易测试
  • UrlConnection 级别太低了,对 https 来说很头疼。使用Apache HTTP 客户端库(在 Domino 服务器上可用的 AFAIK)

一些示例代码应该可以帮助您从以下几方面着手:

 HttpClient httpclient = new HttpClient();
 HttpMethod httpMethod = new GetMethod( this.targetURL );
 int statusCode = httpclient.executeMethod(httpMethod);
 // TODO Check for statusCode 200
 String result = httpMethod.getResponseBodyAsString();

还可以查看这个Baeldung 教程


推荐阅读