Bonjour,
Mon programme a pour but d'envoye un flux XML par la méthode post à une servlet, puis de récupérer les informations contenue dans la page (Flux XML aussi) en retour.
En utilisant un connexion URL, il n'y a pas de probleme, ça marche.
Mais puisque je veux que le SSL soit possible, il a fallu que je passe par un socket.
Hors le socket ne connait que l'adresse de l'host (ici localhost), mais pas l'adresse exact de ma servlet.
J'ai teste de la maniere ci-dessous mais ça ne marche pas.
Code Client :
Code :
- public class Test {
-
- public static final int PORT = 443;
- public static final String HOST = "localhost";
- public static final String KEYSTORE_FILE = "C:/Dev/Tomcat/conf/keystore.ssl";
- public static final String ALGORITHM = "sunx509";
- public static final String PASSWORD = "xxx";
- /**
- * @param args
- */
- public static void main(String[] args) {
- try {
- SSLSocket socket = null;
- KeyManagerFactory kmf;
- KeyStore ks;
- TrustManagerFactory tmf;
- SSLContext sslc;
- String pathSave="c:\\sauv\\";
- kmf = KeyManagerFactory.getInstance(ALGORITHM);
- ks = KeyStore.getInstance("JKS" );
- ks.load(new FileInputStream(KEYSTORE_FILE), PASSWORD.toCharArray());
- kmf.init(ks, PASSWORD.toCharArray());
- tmf = TrustManagerFactory.getInstance(ALGORITHM);
- tmf.init(ks);
- sslc = SSLContext.getInstance("TLS" );
- sslc.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
- SSLSocketFactory sf = sslc.getSocketFactory();
- socket = (SSLSocket) sf.createSocket(HOST, PORT);
- System.out.println("Client connecte\n" );
-
- OutputStreamWriter writer = null;
- /**
- * ENVOI D'UN DOCUMENT XML A LA SERVLET
- */
- String donnees = "GET Dialexc/DialexcServlet";
- /*
- String donnees = "GET /Dialexc/DialexcServlet?"+ URLEncoder.encode("XML", "UTF-8" )+
- "="+URLEncoder.encode(FileToString(new File("c:\\test.xml" )), "UTF-8" )+ " HTTP/1.1"
- */
- System.out.println(donnees);
- //envoi de la requête
- writer = new OutputStreamWriter(socket.getOutputStream());
- writer.write(donnees);
- writer.flush();
-
- /**
- * RECUPERATION DU DOCUMENT EN RETOUR
- */
-
- // création d'une fabrique de documents
- DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance();
- // création d'un constructeur de documents
- DocumentBuilder constructeur = fabrique.newDocumentBuilder();
- System.out.print(socket.getInputStream());
- [...]
|
La console me ressort cela :
Code :
- Client connecte
- GET Dialexc/DialexcServlet
- com.sun.net.ssl.internal.ssl.AppInputStream@1a16869
|
Au niveau serveur, j'ai mis un out lors de l'entre dans la servlet afin de vérifier si cela passe bien dedans. Apparemment ça ne passe pas!
Une idee ??