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 :

Echec d'un web-service avec attachement en 2-ways SSL


Sujet :

Services Web Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut Echec d'un web-service avec attachement en 2-ways SSL
    Hello,

    Voici mon problème. J'ai deux applications web, l'une fournissant un web-service (appellons-la ws-provider), l'autre consommant ce web-service (on va l'appeller ws-client).
    La communication entre ces deux systèmes est sécurisée par une connection SSL bidirectionnelle (2-ways SSL). La configuration des deux serveurs est normalement correctement réalisée (installation des certificats, configuration des propriétés système, paramétrage des Tomcat, etc.)

    Les deux serveurs tournent sur du Tomcat (5.5 pour ws-provider, 6 pour l'autre), Java 6 et du Jax-WS comme librairie de web-service.

    Quand l'utilisateur se connecte à l'application ws-client et réalise les opérations lançant l'appel au web-service, cet appel va généralement échouer avec l'erreur suivante :

    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
        com.sun.xml.ws.client.ClientTransportException: The server sent HTTP status code 400: No client certificate chain in this request
                at com.sun.xml.ws.transport.http.client.HttpClientTransport.checkResponseCode(HttpClientTransport.java:218)
                at com.sun.xml.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:137)
                at com.sun.xml.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:74)
                at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:559)
                at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:518)
                at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:503)
                at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:400)
                at com.sun.xml.ws.client.Stub.process(Stub.java:234)
                at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:120)
                at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:230)
                at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:210)
                at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:103)
                at $Proxy33.createOrRenewRequest(Unknown Source)
                at my.app.MyPushRequest.sendXMLRequest(MyPushRequest.java:29)
                at my.app.MyRequestCreation.sendRequestForDraftApproval(MyRequestCreation.java:284)
    Du côté du ws-provider j'ai cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        WARNING: Exception getting SSL attributes
        java.net.SocketException: SSL Cert handshake timeout
                at org.apache.tomcat.util.net.jsse.JSSE14Support.synchronousHandshake(JSSE14Support.java:101)
                at org.apache.tomcat.util.net.jsse.JSSE14Support.handShake(JSSE14Support.java:67)
                at org.apache.tomcat.util.net.jsse.JSSESupport.getPeerCertificateChain(JSSESupport.java:121)
                at org.apache.coyote.http11.Http11Processor.action(Http11Processor.java:1127)
                at org.apache.coyote.Request.action(Request.java:349)
                ...
    Ce qui est très étrange également, comme je viens de le dire, c'est que cet appel web-service va généralement échouer, mais il arrive dans certains cas que tout se passe bien ! J'ai du mal à bien comprendre pourquoi des fois ça passe, des fois non. Visiblement, quand l'utilisateur met moins d'une minute après son login pour exécuter l'appel web-service, alors il va s'exécuter correctement (!)

    Le web-service que j'utilise dispose d'un attachement. Il s'agit d'un fichier PDF qui n'est généralement pas très volumineux (environ 10Ko).

    En testant mon web-service sans attacher de fichier PDF, je ne réussis pas à reproduire l'erreur précédente, et cela fonctionne !
    De même, si je désactive les contraintes de sécurité (donc que je me passe du 2-ways SSL), là aussi, je n'ai pas de soucis...

    Donc j'imagine que quelque chose doit encore être configuré, au niveau du WS, du Tomcat ou ailleurs. Mais quoi ??


    Code Java

    Voici l'interface Java qui fournit la méthode d'appel, côté ws-client (comme on peut le voir, ce sont des classes générées par JAX-WS.

    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
        /**
         * This class was generated by the JAX-WS RI.
         * JAX-WS RI 2.1.3-b02-
         * Generated source version: 2.1
         * 
         */
        @WebService(name = "PushServicePortType", targetNamespace = "http://my.app.ws/PushService")
        @XmlSeeAlso({
            ObjectFactory.class
        })
        public interface PushServicePortType {
     
     
            @WebMethod
            @WebResult(name = "response", targetNamespace = "")
            @RequestWrapper(localName = "createOrRenewRequest", targetNamespace = "http://my.app.ws/PushService", className = "my.app.CreateOrRenewRequest")
            @ResponseWrapper(localName = "createOrRenewRequestResponse", targetNamespace = "http://my.app.ws/PushService", className = "my.app.CreateOrRenewRequestResponse")
            public String createOrRenewRequest(
                @WebParam(name = "xmlMessageContent", targetNamespace = "")
                String xmlMessageContent,
                @WebParam(name = "version", targetNamespace = "")
                String version,
                @WebParam(name = "attachments", targetNamespace = "")
                List<DataHandler> attachments);
     
        }
    L'appel se réalise de cette façon (xmlFile contient le XML de la requête, datahandler est du type javax.activation.DataHandler qui contient le fichier PDF).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        PushServicePortType pushServicePort = new PushService(new URL("url/to/wsdl"), new QName("http://my.app.ws/PushService", "PushService")).getPushServiceSOAP(new MTOMFeature());
        PushRequest push = new PushRequest();
        responseXML = push.sendXMLRequest(pushServicePort, xmlFile, datahandler);
    Il y a beaucoup de configuration, de logs ou de classes Java, donc n'hésitez pas à demander plus d'infos...


    ps : J'ai essayé de forcer l'intégration du fichier PDF au sein du message SOAP directement, en définissant le seuil (threshold du MTOM) à 2 Mo (voir ici) :

    Côté ws-client:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        PushServicePortType pushServicePort = new PushService(new URL("url/to/wsdl"), new QName("http://my.app.ws/PushService", "PushService")).getPushServiceSOAP(new MTOMFeature(2097152));
    Côté ws-provider, j'ai défini l'annotation MTOM avec @MTOM(threshold=2097152)

    Cette modification n'a malheureusement rien résolu...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  2. #2
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Nouvelle précision. En supprimant l'attachement (en gros en fournissant une List<DataHandler> vide à mon appel web-service), mon appel va tout de même planter régulièrement, mais pas toujours. L'erreur est cette fois-ci différente :

    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
    javax.xml.ws.soap.SOAPFaultException: Failed to read a response: javax.xml.bind.UnmarshalException
     - with linked exception:
    [javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,3834]
    Message: XML document structures must start and end within the same entity.]
            at com.sun.xml.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:173)
            at com.sun.xml.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:102)
            at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:240)
            at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:210)
            at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:103)
            at $Proxy33.createOrRenewRequest(Unknown Source)
            at my.app.PushRequest.sendXMLRequest(PushRequest.java:29)
            at my.app.ation.RequestCreation.sendRequestForDraftApproval(RequestCreation.java:284)
            at my.app.RequestCreation.createRequest(RequestCreation.java:207)
            at my.app.InputManagementAction.SendDraftApproval(InputManagementAction.java:556)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
            at java.lang.reflect.Method.invoke(Method.java:597)
            at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:276)
            at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:196)
            at my.app.struts.action.DispatchAction.execute(DispatchAction.java:63)
            at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
            at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
            at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
            at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
            at my.app..struts.filter.HibernateFilter.doFilter(HibernateFilter.java:46)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
            at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:567)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
            at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
            at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
            at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
            at java.lang.Thread.run(Thread.java:619)
    Caused by: com.sun.xml.ws.encoding.soap.DeserializationException: Failed to read a response: javax.xml.bind.UnmarshalException
     - with linked exception:
    [javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,3834]
    Message: XML document structures must start and end within the same entity.]
            at com.sun.xml.ws.server.sei.EndpointMethodHandler.invoke(EndpointMethodHandler.java:235)
            at com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:74)
            at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:559)
            at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:518)
            at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:503)
            at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:400)
            at com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:229)
            at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:430)
            at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:230)
            at com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:121)
            at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doGet(WSServletDelegate.java:115)
            at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doPost(WSServletDelegate.java:146)
            at com.sun.xml.ws.transport.http.servlet.WSSpringServlet.doPost(WSSpringServlet.java:52)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
            at sun.reflect.GeneratedMethodAccessor330.invoke(Unknown Source)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
            at java.lang.reflect.Method.invoke(Method.java:597)
            at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
            at java.security.AccessController.doPrivileged(Native Method)
            at javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
            at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
            at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:262)
            at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:52)
            at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:171)
            at java.security.AccessController.doPrivileged(Native Method)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:167)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
            at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
            at org.apache.catalina.valves.FastCommonAccessLogValve.invoke(FastCommonAccessLogValve.java:482)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
            at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
            at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
            at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
            at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
            at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
            ... 1 more
    Caused by: javax.xml.bind.UnmarshalException
            at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(UnmarshallerImpl.java:397)
            at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:335)
            at com.sun.xml.bind.v2.runtime.BridgeImpl.unmarshal(BridgeImpl.java:84)
            at com.sun.xml.bind.api.Bridge.unmarshal(Bridge.java:197)
            at com.sun.xml.ws.server.sei.EndpointArgumentsBuilder$DocLit.readRequest(EndpointArgumentsBuilder.java:492)
            at com.sun.xml.ws.server.sei.EndpointMethodHandler.invoke(EndpointMethodHandler.java:233)
            ... 41 more
    Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,3834]
    Message: XML document structures must start and end within the same entity.
            at com.sun.xml.stream.XMLReaderImpl.next(XMLReaderImpl.java:563)
            at com.sun.xml.ws.encoding.MtomCodec$MtomXMLStreamReaderEx.next(MtomCodec.java:413)
            at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:188)
            at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:333)
            ... 45 more

    Autre chose : le web-service publié contient 2 méthodes. La première est ma principale source de problèmes ces derniers temps La seconde est une méthode plus simple (i.e. sans attachement, requête SOAP "basique"). Cette méthode fonctionne toujours. C'est pour cela que je m'accroche à l'idée que l'attachement à quelque chose à voir de près ou de loin avec mon problème.

    La signature de cette méthode est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        @WebMethod
        @WebResult(name = "response", targetNamespace = "")
        @RequestWrapper(localName = "findValidationResult", targetNamespace = "http://my.app.ws/PushService", className = "my.app.FindValidationResult")
        @ResponseWrapper(localName = "findValidationResultResponse", targetNamespace = "http://my.app.ws/PushService", className = "my.app.FindValidationResultResponse")
        public String findValidationResult(
            @WebParam(name = "requestCode", targetNamespace = "")
            String requestCode,
            @WebParam(name = "version", targetNamespace = "")
            String version);
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  3. #3
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Bon, après avoir lutté plusieurs jours comme un diable (de Tasmanie), je pense avoir trouvé une solution...

    Comme je l'ai indiqué, le provider du WS me loggue une erreur. Du coup, j'ai jeté un oeil dans le code source de Tomcat (5.5.23) pour voir ceci :

    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
    private void synchronousHandshake(SSLSocket socket) throws IOException {
        InputStream in = socket.getInputStream();
        int oldTimeout = socket.getSoTimeout();
        socket.setSoTimeout(1000);
        byte[] b = new byte[0];
        listener.reset();
        socket.startHandshake();
        int maxTries = 60; // 60 * 1000 = example 1 minute time out
        for (int i = 0; i < maxTries; i++) {
            if (logger.isTraceEnabled())
                logger.trace("Reading for try #" + i);
            try {
                int x = in.read(b);
            } catch (SSLException sslex) {
                logger.info("SSL Error getting client Certs", sslex);
                throw sslex;
            } catch (IOException e) {
                // ignore - presumably the timeout
            }
            if (listener.completed) {
                break;
            }
        }
        socket.setSoTimeout(oldTimeout);
        if (listener.completed == false) {
            throw new SocketException("SSL Cert handshake timeout");
        }
    }
    L'idée d'un vrai timeout me parait du coup moins probable. L'erreur apparaissant lors de mes tests sans le fichier PDF attaché me laisse penser que pour une raison donnée, les informations lues depuis la socket SSL sont tronquées.

    Je suis par la suite tombé sur un paramétrage intéressant sur les connecteurs Tomcat, à savoir le maxSavePostSize :

    The maximum size in bytes of the POST which will be saved/buffered by the container during FORM or CLIENT-CERT authentication. For both types of authentication, the POST will be saved/buffered before the user is authenticated. For CLIENT-CERT authentication, the POST is buffered for the duration of the SSL handshake and the buffer emptied when the request is processed. For FORM authentication the POST is saved whilst the user is re-directed to the login form and is retained until the user successfully authenticates or the session associated with the authentication request expires. The limit can be disabled by setting this attribute to -1. Setting the attribute to zero will disable the saving of POST data during authentication. If not specified, this attribute is set to 4096 (4 kilobytes).
    En gros, il serait possible que le provider du WS ait un problème avec son buffer lorsqu'il tente de lire le message SOAP avec l'authentification SSL...

    J'ai donc changé la configuration de mon connector afin de lui définir un maxSavePostSize="-1" et pour l'instant, tous les tests que j'ai pû réaliser se sont terminés avec succès...

    Donc sans être tout à faire sûr que ce soit la bonne solution, ça me parait pas mal.

    Si vous avez plus d'infos sur cet attribut, n'hésitez pas à m'en faire part !
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

Discussions similaires

  1. .Net client avec java Web Service (MIME Attachment).
    Par habibdu70 dans le forum Services Web
    Réponses: 2
    Dernier message: 06/11/2012, 16h53
  2. Appeler un web service avec pl/sql
    Par squalito dans le forum PL/SQL
    Réponses: 5
    Dernier message: 17/09/2012, 15h21
  3. [ERROR] Web Service avec attachement de fichier par MTOM
    Par caballero dans le forum Services Web
    Réponses: 3
    Dernier message: 25/03/2008, 14h31
  4. Déploiement de Web Service avec InstallShield
    Par _beber85 dans le forum Services Web
    Réponses: 7
    Dernier message: 12/07/2006, 13h28
  5. [Web Service][avec Struts]un tuto? un lien?
    Par javazer dans le forum Struts 1
    Réponses: 3
    Dernier message: 28/03/2006, 18h32

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