2009-04-29 9 views
4

J'ai récemment migré mes services Web d'Axis vers CXF (2.1). Il semble qu'alors que Axis avait besoin de l'ensemble "axis.socketSecureFactory", CXF saisissait la valeur par défaut. Comment définir la SocketFactory par défaut dans Java pour ma propre implémentation (telle qu'une propriété)?Définition du paramètre par défaut SocketFactory

Ce que je suis pas cherche à faire est de définir les propriétés SocketFactory par défaut comme la définition de la propriété pour mon fichier de clés certifiées, keystore et mots de passe.

+0

Il ya une solution assez cool ici http://stackoverflow.com/a/11696077 – PierluigiVernetto

Répondre

5

Selon le code source OpenJDK7 pour javax.net.SocketFactory, la machine virtuelle Java Sun est codé en dur pour retourner un javax.net.DefaultSocketFactory pour getDefault();

Edit: Cependant, le SSLSocketFactory par défaut peut être défini par la propriété de sécurité ssl.SocketFactory.provider

+0

Dans le code, vous pouvez voir que ne renvoie que si vous n'en définissez pas un autre. – ssedano

+0

@ssedano La propriété est inaccessible depuis n'importe où, et le code définit un getter d'instanciation paresseux standard. Powerlord a raison de dire que la valeur est donc effectivement codée en dur. – KomodoDave

7

Si nous parlent des sockets standard puis Socket.setSocketImplFactory(SocketImplFactory) est utilisé pour changer d'usine pour les sockets ordinaires et ServerSocket.setSocketFactory(SocketImplFactory) pour les sockets de serveur.

Si vous les utilisez, prenez en compte le fait que vous ne pouvez définir ces usines qu'une seule fois. Notez que l'implémentation du socket Java utilise par défaut SocksSocketImpl (classe visible du package dans java.net) si elle découvre que l'usine est null si vous voulez une fabrique qui peut basculer pack vers l'implémentation java standard.

Questions connexes