【发布时间】:2009-05-26 07:22:38
【问题描述】:
我遇到了一个实际问题,这个问题可以描述如下。
我们正在开发一个组件(比如一个插件),以便在使用它们提供的 API 在外部 CMS 中触发事件时执行某些任务。他们提供了一些jar库,所以我们正在做的是实现他们提供的接口。然后在触发事件时调用内部方法。 (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)。但是 1.4 的 HttpsURLConnection 从 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.setProperty 和 -Djava.protocol.handler/pkgs ?你的问题不是很清楚......
-
如果我使用 System.setProperty,那么属性将设置为 VM,从而导致 CMS(外部方)出现故障。我们只是将上述类保留在 CMS 安装中。我们不会手动执行它。 CMS会自动创建实例所以我们无法设置VM参数
-
清除它:您在 CMS 中调用返回“HttpsURLConnection”的内容。但是,CMS 尝试从 com.sun.net.ssl.* 创建一些东西,而不是 javax.net.*。如果您强制 CMS 使用 javax.net.*,那么它将在 CMS 代码的深处抛出 ClassCastException。如果你不这样做,那么你的代码中有一个 ClassCastException。对吗?