Bonjour,
J'ai créé un filter sur ma servlet d'Axis pour l'entrée des requêtes Soap de manière à récupérer la requête Soap pour la traiter ailleurs.
Donc j'ai une ServletFilter qui est mappé à ma servlet axis "/services/*" et donc pour chaque appel à un web service elle va rentrer dans le filtre.
Voici le code du DoFilter :
Donc je cherche uniquement à afficher ma requête entrante sauf que le problème c'est lorsque je fais appel à mon Web Service via SOAPUI, j'ai ça en réponse :
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 @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { try { InputStream in=request.getInputStream(); StringBuffer xmlStr=new StringBuffer(); int d; while((d=in.read()) != -1){ xmlStr.append((char)d); } System.out.println("Requête SOAP : "+xmlStr.toString()); chain.doFilter(request,response); } catch (IOException io) { System.out.println ("IOException raised in SimpleFilter"); } catch (ServletException se) { System.out.println ("ServletException raised in SimpleFilter"); } }
J'ai regardé pas mal sur google et malheureusement, je n'ai rien trouvé de convaincant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Server.userException</faultcode> <faultstring>org.xml.sax.SAXParseException: Premature end of file.</faultstring> <detail> <ns1:hostname xmlns:ns1="http://xml.apache.org/axis/">EQ-300523178</ns1:hostname> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope>
Et je précise que si je commente ma boucle qui écrit dans mon buffer, j'ai pas de problème, comme ci il avait pas le temps de tout écrire ou je ne sais quoi.
Merci d'avance
Partager