gpt4 book ai didi

java - 我有什么方法可以覆盖 Java 中的系统属性吗?

转载 作者:行者123 更新时间:2023-12-02 00:55:24 26 4
gpt4 key购买 nike

我遇到一个实际问题,该问题可以描述如下。

我们正在开发一个组件(例如插件),以便在外部 CMS 中使用外部 CMS 提供的 API 触发事件时执行某些任务。他们提供了一些jar库,所以我们要做的就是实现他们提供的接口(interface)。然后当事件被触发时调用内部方法。 (当第一个事件触发时,CMS 仅创建一个类实例,然后它只执行每个事件触发的方法)

该功能可概括如下,

import com.external.ProvidedInterface;


public class MonitorProgram implements ProvidedInterface{

public void process(){
//This method is called when an event is triggered in CMS
}

}

在我们的类中,我们使用“javax.net.ssl.HttpsURLConnection”(JAVA 1.5)。但是 HttpsURLConnection 在 1.4 版本中从 com.sun.net.ssl 迁移到了 javax.net.ssl。但我提到的 CMS 似乎(我们实际上不知道他们的实现)使用了类似的东西

System.setProperty("java.protocol.handler.pkgs","com.sun.net.ssl.internal.www.protocol");

导致我们的代码中出现 ClassCastException。

我想我的问题已经很清楚了。在我们的例子中,我们无法设置VM参数,

-Djava.protocol.handler.pkgs=

我们也无法使用以下方法将其恢复,

System.setProperty("")

因为 CMS 和我们的程序的 VM 实例是相同的。

我该怎么做才能解决这个问题?还有想法或经验吗?

最佳答案

这对我来说不太清楚。

您想覆盖系统属性吗?你可以做到这一点。

在调用外部库方法之前覆盖 System.property,当方法返回时,您可以设置旧的 System.property

    final String propertyName = "Property";
String oldProperty = System.getProperty(propertyName);
System.setProperty(propertyName,"NEW_VALUE");
monitorProgram.process();
System.setProperty(propertyName,oldProperty);

或者您想防止被调用的进程覆盖 system.property?为什么不能手动设置系统属性?

关于java - 我有什么方法可以覆盖 Java 中的系统属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/909357/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com