Java Domino代理在Notes客户机中运行时出现问题-在服务器上工作正常

Java Domino代理在Notes客户机中运行时出现问题-在服务器上工作正常,java,security,xpages,lotus-domino,agent,Java,Security,Xpages,Lotus Domino,Agent,我有一个java代理,它使用jsoup发出http请求,当我从服务器控制台手动触发它时,这个代理可以正常工作。但当我在客户端上运行它时,会给出一个错误(右键单击代理并运行) 代理设置为选项2。允许受限操作,并设置为“操作菜单选择”和目标“数据库中的所有文档” 我在服务器和客户端的java.policy文件中设置了相同的安全设置。 我还尝试在带有“标准”java.policy文件的服务器上运行代理,这也起到了作用,因此问题似乎与java.policy文件无关 这是我在notes客户端(v9.0

我有一个java代理,它使用jsoup发出http请求,当我从服务器控制台手动触发它时,这个代理可以正常工作。但当我在客户端上运行它时,会给出一个错误(右键单击代理并运行)

  • 代理设置为选项2。允许受限操作,并设置为“操作菜单选择”和目标“数据库中的所有文档”
  • 我在服务器和客户端的java.policy文件中设置了相同的安全设置。 我还尝试在带有“标准”java.policy文件的服务器上运行代理,这也起到了作用,因此问题似乎与java.policy文件无关
这是我在notes客户端(v9.0.1)中运行代理时在Java调试控制台中遇到的错误

这是我在Notes客户端(以及某些服务器)中使用的java.policy设置

授予{权限java.util.PropertyPermission“http.keepAlive”, “读,写”;}

授予{permission java.security.AllPermission;}

这是代理代码

public class JavaAgent extends AgentBase {

public void NotesMain() {

  try {
      Session session = getSession();
      AgentContext agentContext = session.getAgentContext();
      Database db = session.getCurrentDatabase();
      lotus.domino.Document d = db.getView("inbox").getFirstDocument();

      String url = d.getItemValueString("Subject"); 
      Document x = Jsoup.connect(url).userAgent("Mozilla").get();
      Elements p = x.select("p");
      RichTextItem rt = (RichTextItem) d.getFirstItem("Body");
      rt.appendText(p.text());
      d.replaceItemValue("Processed", "1");
      d.save();

  } catch(Exception e) {
      e.printStackTrace();
   }
} }

如何让代理在本地Notes客户端上运行?

请阅读:
这为我解决了问题

在多次重新启动和切换设置,以及多次拉扯头发之后,我能够找到一组可以导致问题或防止问题的步骤。要使代码正常工作,请执行以下操作:

  • 打开Notes客户端
  • 运行Java代理
  • HTTP连接工作正常
  • 要获取错误,请执行以下操作:

  • 打开Notes客户端
  • 打开Java调试控制台
  • 运行Java代理
  • HTTP连接失败
  • 在运行代理之前打开Java调试控制台会导致Notes使用COM.ibm.JEmpower.applet.http.HttpURLConnection来建立连接,而不是sun.net.www.protocol.http.HttpURLConnection,并且类的JEmpower版本是被破坏的(根据前面提到的实验和APAR)

    奇怪的是,如果我运行代理,然后打开调试控制台,然后再次运行代理,一切都很好。这是在我做任何导致问题的事情之前打开调试控制台


    我知道不是服务器上的所有库都可以从客户端获得。我的Xpage webservice hack可以从服务器获得,但不能从客户端获得。您可以检查响应是否正常(使用.method和.response而不是.get())。似乎它没有有效的响应,但它有响应代码。有时这是代理问题,它返回302,但没有响应(您是否支持代理?)谢谢Serdar,我的网络中没有代理。我不知道如何获得响应,我只知道org.jsoup.helper.HttpConnection$Response@13491349Does本地计算机安装了防火墙或任何可能干扰代理连接能力的安全软件?您是否尝试过使用java.net.HttpUrlConnection类directly?虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能会无效。这似乎是对问题和解决方法的描述,而不是对原问题中描述的问题的程序修复@beresfordt这个问题提出了症状。我发现这个问题是因为我也有症状,不知道这个UI行为,因此我找到了一个解决方案。这似乎也是唯一可用的解决方案。答案不必在所有情况下都是编程的。这个问题是Domino Designer中的UI问题,IBM必须重新发布e解决该问题的修复方法。
    public class JavaAgent extends AgentBase {
    
    public void NotesMain() {
    
      try {
          Session session = getSession();
          AgentContext agentContext = session.getAgentContext();
          Database db = session.getCurrentDatabase();
          lotus.domino.Document d = db.getView("inbox").getFirstDocument();
    
          String url = d.getItemValueString("Subject"); 
          Document x = Jsoup.connect(url).userAgent("Mozilla").get();
          Elements p = x.select("p");
          RichTextItem rt = (RichTextItem) d.getFirstItem("Body");
          rt.appendText(p.text());
          d.replaceItemValue("Processed", "1");
          d.save();
    
      } catch(Exception e) {
          e.printStackTrace();
       }