IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Services Web Java Discussion :

JAX-WS logger les flux volumineux


Sujet :

Services Web Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 33
    Points : 35
    Points
    35
    Par défaut JAX-WS logger les flux volumineux
    Bonjour,

    J'utilise GlassFish V2, JAX-WS 2.1 et le JDK 1.6.0u5.
    J'aimerais logger les méthodes de web-services qui renvoient des flux volumineux (actuellement jusqu'à 30M). J'utilise un reverse-proxy Apache qui lui logge la taille des flux mais je n'ai que l'URL du web-service en info pas la web-method.

    Est-ce qu'il y a une solution pour logger quelle web-method renvoie des flux volumineux sur la partie client ou Web-service?
    J'ai déjà vu comment logger tous les messages :
    https://metro.dev.java.net/guide/Logging.html
    http://blogs.sun.com/binublog/entry/..._soap_messages


    Merci
    Laurent

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 33
    Points : 35
    Points
    35
    Par défaut
    J'ai trouvé une solution, on peut rajouter un Handler à chaque web service:

    Dans la classe WS:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @WebService()
    @HandlerChain(file="/conf/handlerfile.xml")
    public class WsBusiness
    {....
    Le fichier src/conf/handlerfile.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version="1.0" encoding="UTF-8"?>
    <handler-chains xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:cfg="http://cxf.apache.org/configuration/cfg"
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee">
        <handler-chain>
    	<handler>
    		<handler-name>LoggingLargeMessageHandler</handler-name>
    		<handler-class>com.test.ws.server.utils.TestSoapHandler</handler-class>
    	</handler>
        </handler-chain>
    </handler-chains>
    Le handler:
    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
    public class TestSoapHandler  implements SOAPHandler<SOAPMessageContext> {
     
        @Override
        public Set<QName> getHeaders() {
            return null;
        }
        @Override
        public boolean handleMessage(SOAPMessageContext smc) {
            logToSystemOut(smc);
            return true;
        }
        @Override
        public boolean handleFault(SOAPMessageContext smc) {
            logToSystemOut(smc);
            return true;
        }
     
        // nothing to clean up
        @Override
        public void close(MessageContext messageContext) {
        }
     
        /*
         * Check the MESSAGE_OUTBOUND_PROPERTY in the context
         * to see if this is an outgoing or incoming message.
         * Write a brief message to the print stream and
         * output the message. The writeTo() method can throw
         * SOAPException or IOException
         */
        private void logToSystemOut(SOAPMessageContext smc) {
            try {
                Boolean outboundProperty = (Boolean) smc.get (MessageContext.MESSAGE_OUTBOUND_PROPERTY);
                String sens = "";
                if (outboundProperty.booleanValue()) {
                    sens ="sortante";
                } else {
                    sens = "entrante";
                }
                SOAPMessage message = smc.getMessage();
     
                SAAJMessage saaj = new SAAJMessage(message);
                if(saaj!=null && saaj.getPayloadLocalPart()!=null){
     
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    message.writeTo(baos);
                    if(baos.size()>1000000){
     
                        String msg = "Attention Taille importante pour la méthode "+sens+": " + saaj.getPayloadLocalPart() + "<br>taille du flux : " + baos.size() + "<br>Flux XML:" + baos.toString();
                        //envoyer par mail ou logger...
                    }
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. maitriser les flux rss
    Par molesqualeux dans le forum Général Conception Web
    Réponses: 3
    Dernier message: 21/02/2006, 05h17
  2. [iBatis] Logger les requètes SQL
    Par bslota dans le forum Persistance des données
    Réponses: 2
    Dernier message: 25/11/2005, 14h29
  3. Les flux non standard
    Par Philippe299 dans le forum C++
    Réponses: 14
    Dernier message: 29/07/2005, 23h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo