Bonjour,

Je suis en train de développer un client java permettant d'invoquer un service web Exchange 2007 pour créer / interroger des rendez-vous dans le calendrier. Je suis contraint de travailler avec un JDK 1.4.02.

Après quelques modifications du WSDL, j'ai finalement réussi à générer un client avec axis 1.4.
Le problème survient lorsque j'essaye d'invoquer le service : le serveur me retourne une erreur HTTP 401 ("You are not authorized to view this page").
Le endpoint du service n'est accessible qu'en SSL après authentification (user et password du compte exchange). J'ai donc essayé d'importer et d'utiliser un certificat pour passer en SSL, sans succès.

Voici le code actuel avec lequel je fais mes tests :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
package test;
 
import ...
 
public class Test1 {
    public Test1() {
    }
 
    public static void main(String[] args) {
        System.out.println ("Hello world !");
 
        //
        System.out.println ("* Connexion SSL *");
        System.out.println ("Activation du debug");
        System.setProperty("javax.net.debug","all");
 
        System.setProperty("UseSunHttpHandler", "true");
 
        System.setProperty("java.protocol.handler.pkgs","javax.net.ssl");
 
        System.out.println ("Definition du keystore");
        /*
        //String keystore = "jssecacerts";
        String keystore = "/home/xav/.keystore";
        System.setProperty("javax.net.ssl.keyStore", keystore);
        System.setProperty("javax.net.ssl.keyStorePassword", "changeit");
        System.setProperty("javax.net.ssl.trustStore", keystore);
        System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
        */
        AxisProperties.setProperty("axis.socketSecureFactory","org.apache.axis.components.net.SunFakeTrustSocketFactory");
 
        System.out.println ("Initialisation SSL");
        com.sun.net.ssl.internal.ssl.Provider.install();
        java.security.Security.insertProviderAt(new com.sun.net.ssl.internal.ssl.Provider(), 1);
        //
 
        URL wsdlURL = null;
        ExchangeServiceBindingStub esb = null;
 
        try {
            System.out.println ("Construction URL");
            //wsdlURL = new URL ("https://MON_SERVEUR_EXCHANGE/EWS/Exchange.asmx");
            wsdlURL = new URL(null, "https://MON_SERVEUR_EXCHANGE/EWS/Exchange.asmx", new com.sun.net.ssl.internal.www.protocol.https.Handler());
 
            System.out.println ("Instantiation du service");
            esb = (ExchangeServiceBindingStub) new ExchangeWebServiceLocator().getExchangeWebPort(wsdlURL);
 
            esb.setUsername("mon_user_exchange");
            esb.setPassword("mon_password");
 
        } catch (MalformedURLException e) {
            // TODO
            e.printStackTrace();
        } catch (ServiceException e) {
            // TODO
            e.printStackTrace();
        }
 
        System.out.println ("Desactivation du debug");
        System.setProperty("javax.net.debug","warn");
 
 
        System.out.println ("Construction de la requete");
        FindItemType requestFindItem = new FindItemType();
        CreateItemType requestCreateItem = new CreateItemType();
 
        // Specify the location of calendar
        DistinguishedFolderIdType agenda = new DistinguishedFolderIdType();
        agenda.setId(DistinguishedFolderIdNameType.calendar);
        requestCreateItem.setSavedItemFolderId(new TargetFolderIdType());
        requestCreateItem.getSavedItemFolderId().setDistinguishedFolderId(agenda);
 
        // Create the array of items.
        requestCreateItem.setItems(new NonEmptyArrayOfAllItemsType());
 
        // Creation du rendez-vous
        CalendarItemType rendezVous = new CalendarItemType();
        rendezVous.setSubject("Test EWS");
        rendezVous.setBody(new BodyType());
        rendezVous.getBody().setBodyType(BodyTypeType.Text);
        rendezVous.getBody().set_value("Corps du texte du rendez-vous");
        rendezVous.setReminderIsSet(new Boolean(false));
        rendezVous.setIsAllDayEvent(new Boolean(false));
        rendezVous.setLegacyFreeBusyStatus(LegacyFreeBusyType.Busy);
 
        // Date de debut
        SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm");
        Date dateDebut = null;
        Calendar dateDebutCal;
        try
        {
          dateDebut = (Date)formatter.parse("30/06/2011 14:00");
        }
        catch (ParseException e)
        {
          e.printStackTrace();
          // TODO
        }
        dateDebutCal = Calendar.getInstance();
        dateDebutCal.setTime(dateDebut);
        rendezVous.setStart(dateDebutCal);
 
        // Date de fin
        Calendar dateFinCal;
        dateFinCal = (Calendar)dateDebutCal.clone();
        dateFinCal.add(Calendar.HOUR_OF_DAY, + 1);
        rendezVous.setEnd(dateFinCal);
 
        // Ajout du rendez-vous a la liste de ceux a creer
        requestCreateItem.getItems().setCalendarItem(rendezVous);
 
        ConnectingSIDType sidt = new ConnectingSIDType();
        SerializedSecurityContextType ssct = new SerializedSecurityContextType();
        RequestServerVersion requestVersion = new RequestServerVersion();
        CreateItemResponseTypeHolder createItemResult = new CreateItemResponseTypeHolder();
        ServerVersionInfoHolder serverVersion = new ServerVersionInfoHolder();
 
        TimeZoneContextType timeZoneContext;
        timeZoneContext = new TimeZoneContextType();
        timeZoneContext.setTimeZoneDefinition(new TimeZoneDefinitionType());
        timeZoneContext.getTimeZoneDefinition().setId("W. Europe Standard Time");
 
        try
        {
            // Send a CreateItem request and get the CreateItem response.
            esb.createItem(
              requestCreateItem,
              requestVersion, 
              timeZoneContext,
              createItemResult, 
              serverVersion);
 
            CreateItemResponseType createItemResponse = new CreateItemResponseType();
            ArrayOfResponseMessagesType responses = createItemResponse.getResponseMessages();
            ResponseMessageType responseMessages = responses.getSendItemResponseMessage();
            System.out.println("rM :: " + responseMessages.getMessageText());
            System.out.println (responseMessages.getMessageText());
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
 
        System.out.println ("Bye !");
    }
}
Quelqu'un aurait une piste sur ce qui ne va pas dans mon code, ou la méthode à suivre ?