Bonjour à tous,

Je suis en train de créer un moteur qui s'occupe d'envoyer des requêtes Soap. Pour faire ça, j'ai un moteur qui a une visibilité sur un objet SoapClient que j'ai créé qui va se charger d'envoyer les requêtes.

Voici le code de SoapClient :

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
public class SoapClient implements ISoapClient {
	private SOAPMessage  message;
	private SOAPConnection myCon;
 
	public SoapClient(){
		SOAPConnectionFactory myFct;
 
			try {
				myFct = SOAPConnectionFactory.newInstance();
				myCon = myFct.createConnection();
			} catch (UnsupportedOperationException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (SOAPException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	}
 
	public void createRequest(List<String> params){
		SOAPPart mySPart = message.getSOAPPart();
		SOAPEnvelope myEnvp;
		try {
			myEnvp = mySPart.getEnvelope();
			SOAPBody body = myEnvp.getBody();
			Name bodyName = myEnvp.createName("requestSafir");
			SOAPBodyElement gltp = body.addBodyElement(bodyName);
		} catch (SOAPException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
 
	@Override
	public SOAPMessage sendRequest(String endpoint) {
		SOAPMessage reply=null;
		try {
			message.saveChanges();
			URLEndpoint endPt = new URLEndpoint("http://localhost:8080/Venus/services/ScannerSOAP?wsdl");
			reply = myCon.call(message, endPt);
		} catch (SOAPException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
 
		return reply;
	}
 
	@Override
	public void setRequest(SOAPMessage s) {
		System.out.println("met le message");
		this.message=s;
	}
 
}
Et voici comment il est appelé :

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
public class SupervisorSoap implements ISupervisorSoap {
	private SOAPMessage message;
	private ISoapClient client;
 
	public SupervisorSoap (SOAPMessage messageDeBase){
		message=messageDeBase;
		client=new SoapClient();
		request();
		SOAPMessage reply=client.sendRequest("http://xxxxxx");
		traiterReponse(reply);
	}
 
	@Override
	public void request() {
		client.setRequest(message);
	}
 
	@Override
	public void sentReponse() {
		// TODO Auto-generated method stub
 
	}
 
	@Override
	public void traiterReponse(SOAPMessage s) {
		OutputStream out = new ByteArrayOutputStream();
		try {
			s.writeTo(out);
		} catch (SOAPException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
 
	}
 
 
 
}
Et lorsque j'instancie mon superviseur Soap qui lui même est un objet d'une classe qui tourne dans un thread, j'ai cette erreur là :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
javax.xml.soap.SOAPException: Unable to create SOAP connection factory: Provider com.sun.xml.messaging.saaj.client.p2p.HttpSOAPConnectionFactory not found
	at javax.xml.soap.SOAPConnectionFactory.newInstance(SOAPConnectionFactory.java:86)
	at fr.venus.impl.SoapClient.<init>(SoapClient.java:28)
	at fr.venus.impl.SupervisorSoap.<init>(SupervisorSoap.java:19)
	at fr.venus.resources.Engine.run(Engine.java:34)
	at java.lang.Thread.run(Unknown Source)
Exception in thread "Thread-2" java.lang.NullPointerException
	at fr.venus.impl.SoapClient.sendRequest(SoapClient.java:59)
	at fr.venus.impl.SupervisorSoap.<init>(SupervisorSoap.java:21)
	at fr.venus.resources.Engine.run(Engine.java:34)
	at java.lang.Thread.run(Unknown Source)
Et pourtant, j'ai créé un petit main qui s'occupe d'envoyer une requête et qui utilise SoapConnectionFactory et tout fonctionne bien, donc il a bien chargé le jar qu'il faut, du coup je vois pas trop d'où vient le problème.

Merci