我们的 Intranet 必须始终使用 https://,这对于存储在我们自己的服务器上的数据来说很好,但会导致从第三方站点获取的数据出现问题。例如,我们有一个来自第三方网站的货币汇率列表。第三方网站不提供 https 选项。为了避免内容被 IE(甚至是最新版本的 Firefox!)阻止,通过代理获取第三方数据似乎是个好主意。我们的管理员并不热衷于设置 Apache 服务器来充当代理,并要求我调查“通过 Xpages 进行”。我是一个完整的 Java 新手,我很难理解为什么我的 Xagent 不起作用。
以下是我到目前为止所做的: Stephan Wissel 用 Java 编写了一个 HTTPReader 类,我已经设法将它添加到我的 nsf 中。我编写了一个 Xagent,它成功调用了此类的 getURL 方法,并将远程 URL 的内容作为字符串获取。我遇到的问题是读取字符串,以便我可以将其写回。我在 BufferedReader 行上收到“执行 JavaScript 操作表达式时出错”错误。这是我的 Xagent 代码:
<xp:this.beforeRenderResponse><![CDATA[#{javascript:importPackage(org.lotususers.tools);
importPackage(java.io);
var httpReader = org.lotususers.tools.HTTPReader();
var remoteURL = context.getUrlParameter("ru");
var remoteHTML:String = httpReader.getURL(remoteURL);
var bufferedReader:BufferedReader = new BufferedReader(new InputStreamReader(remoteHTML));
var outputString = "";
while(bufferedReader.readLine() != null){
outputString += bufferedReader.readLine();
};
var externalContext = facesContext.getExternalContext();
var writer = facesContext.getResponseWriter();
var response = externalContext.getResponse();
response.setContentType("text/html");
response.setHeader("Cache-Control", "no-cache");
writer.write(outputString);
writer.endDocument();
}]]></xp:this.beforeRenderResponse>
如果我将一行打印remoteHTML
到控制台(即 print(remoteHTML)),那么我可以看到 HTML 已成功获取,所以至少我知道那部分已经工作了。
我花了几个小时阅读有关 BufferedReader 的文档并试图找出我做错了什么。我已经尝试了可以为 BufferedReader 行找到的所有变体,但没有任何效果(.openStream()
或.getInputStream()
)。例如:
var bufferedReader:BufferedReader = new BufferedReader(new InputStreamReader(remoteHTML.getInputStream()));
我也尝试过完全限定路径,但这没有任何区别:
var bufferedReader:java.io.BufferedReader = new java.io.BufferedReader(new java.io.InputStreamReader(remoteHTML.getInputStream()));
如果有人能告诉我那条线有什么问题,我将不胜感激。提前致谢。