Je rencontre un problème pratique et le problème peut être décrit comme suit.Est-ce que j'ai une méthode pour remplacer les propriétés système en Java?
Nous développons un composant (Dites un plugin) pour effectuer certaines tâches lorsqu'un événement est déclenché dans un CMS externe en utilisant l'API fournie par celui-ci. Ils ont fourni des bibliothèques de jar, donc ce que nous faisons est la mise en œuvre d'une interface fournie par eux. Ensuite, une méthode interne est appelée lorsqu'un événement est déclenché. (Le CMS crée une seule instance de classe lorsque le premier événement déclenche, il exécute simplement la méthode avec chaque événement déclencheur)
La fonction peut se résumer comme suit,
import com.external.ProvidedInterface;
public class MonitorProgram implements ProvidedInterface{
public void process(){
//This method is called when an event is triggered in CMS
}
}
Au sein de notre classe, nous utilisent "javax.net.ssl.HttpsURLConnection" (JAVA 1.5). Mais HttpsURLConnection a migré vers javax.net.ssl à partir de com.sun.net.ssl pour 1.4. Mais il semble que le CMS je me réfère à (Nous ne savons pas leur mise en œuvre fait) utilise quelque chose comme ça
System.setProperty("java.protocol.handler.pkgs","com.sun.net.ssl.internal.www.protocol");
conduisant à une ClassCastException dans notre code.
Je pense que ma question est claire. Dans notre cas, nous ne pouvons pas régler les paramètres VM,
-Djava.protocol.handler.pkgs=
Aussi, nous il ne peut pas en retrait à l'aide,
System.setProperty("")
car l'instance VM est le même pour les CMS et notre programme.
Que puis-je faire pour résoudre ce problème? Et une idée ou des expériences?
Pourquoi ne pas utiliser System.setProperty et -Djava.protocol.handler/pkgs? Ce n'est pas très clair dans votre question ... –
Si j'ai utilisé System.setProperty alors les propriétés seront définies sur VM provoquant un dysfonctionnement du CMS (External party). Et nous gardons juste la classe ci-dessus dans l'installation de CMS. Nous n'allons pas l'exécuter manuellement. Le CMS crée automatiquement une instance Nous n'avons donc aucun moyen de définir les paramètres de la machine virtuelle –
Pour l'effacer: Vous appelez quelque chose dans le CMS qui renvoie "HttpsURLConnection". Mais au lieu d'un javax.net. *, Le CMS essaie de créer quelque chose à partir de com.sun.net.ssl. *. Si vous forcez le CMS à utiliser javax.net. *, Il lancera une exception ClassCastException quelque part dans le code du CMS. Si vous ne le faites pas, vous avez une exception ClassCastException dans votre code. Est-ce exact? –