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 :

Problème communication WebService avec GlassFish


Sujet :

Services Web Java

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Août 2012
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Problème communication WebService avec GlassFish
    Bonjour,

    j'ai un probleme de communication de web-service uniquement sur glassfish (sous tomcat ca passe).

    Lorsque je configure mon web-service en soap 1.1, mon client envoie du soap 1.2, et vice-versa.

    Voila l'erreur que j'obtiens coté serveur :

    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
    GRAVE: Unsupported Content-Type: text/xml; charset="utf-8" Supported ones are: [application/soap+xml]
    com.sun.xml.ws.server.UnsupportedMediaException: Unsupported Content-Type: text/xml; charset="utf-8" Supported ones are: [application/soap+xml]
    	at com.sun.xml.ws.encoding.StreamSOAPCodec.decode(StreamSOAPCodec.java:291)
    	at com.sun.xml.ws.encoding.StreamSOAPCodec.decode(StreamSOAPCodec.java:128)
    	at com.sun.xml.ws.encoding.SOAPBindingCodec.decode(SOAPBindingCodec.java:287)
    	at com.sun.xml.ws.transport.http.HttpAdapter.decodePacket(HttpAdapter.java:276)
    	at com.sun.xml.ws.transport.http.HttpAdapter.access$500(HttpAdapter.java:93)
    	at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:432)
    	at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:244)
    	at com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:135)
    	at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doGet(WSServletDelegate.java:129)
    	at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doPost(WSServletDelegate.java:160)
    	at com.sun.xml.ws.transport.http.servlet.WSServlet.doPost(WSServlet.java:75)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
    	at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:427)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:315)
    	at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:287)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:218)
    	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
    	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
    	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
    	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:98)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:222)
    	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
    	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587)
    	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1096)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:166)
    	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
    	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587)
    	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1096)
    	at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:288)
    	at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:647)
    	at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:579)
    	at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:831)
    	at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
    	at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
    	at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
    	at com.sun.enterprise.web.portunif.PortUnificationPipeline$PUTask.doTask(PortUnificationPipeline.java:380)
    	at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
    	at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
    Coté serveur, mon wsdl est bien configuré en soap 1.2 :
    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
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.7-b01-. -->
    <definitions targetNamespace="http://impl.webservice..../" name="WSQTLicensingImplService" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://impl.webservice..../" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/">
      <import namespace="http://webservice..../" location="WSQTLicensing.wsdl"/>
      <binding name="WSQTLicensingImplPortBinding" type="ns1:WSQTLicensing" xmlns:ns1="http://webservice..../">
        <soap12:binding transport="http://www.w3.org/2003/05/soap/bindings/HTTP/" style="document"/>
        <operation name="removeEntite">
          <soap12:operation soapAction=""/>
          <input>
            <soap12:body use="literal"/>
          </input>
          <output>
            <soap12:body use="literal"/>
          </output>
        </operation>
        <operation name="addEntite">
          <soap12:operation soapAction=""/>
          <input>
            <soap12:body use="literal"/>
          </input>
          <output>
            <soap12:body use="literal"/>
          </output>
        </operation>
        <operation name="getAllEntites">
          <soap12:operation soapAction=""/>
          <input>
            <soap12:body use="literal"/>
          </input>
          <output>
            <soap12:body use="literal"/>
          </output>
        </operation>
        <operation name="getEntite">
          <soap12:operation soapAction=""/>
          <input>
            <soap12:body use="literal"/>
          </input>
          <output>
            <soap12:body use="literal"/>
          </output>
        </operation>
        <operation name="updateEntite">
          <soap12:operation soapAction=""/>
          <input>
            <soap12:body use="literal"/>
          </input>
          <output>
            <soap12:body use="literal"/>
          </output>
        </operation>
      </binding>
      <service name="WSQTLicensingImplService">
        <port name="WSQTLicensingImplPort" binding="tns:WSQTLicensingImplPortBinding">
          <soap12:address location="REPLACE_WITH_ACTUAL_URL"/>
        </port>
      </service>
    </definitions>
    Et dans l'implémentation du web-service coté serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @WebService(endpointInterface = "...WSQTLicensing")
    @BindingType(value = "http://java.sun.com/xml/ns/jaxws/2003/05/soap/bindings/HTTP/")
    @Transactional
    public class WSQTLicensingImpl implements WSQTLicensing {

    Tout le code coté client est généré via jaxws-maven-plugin via wsimport :
    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
     
    <build>
    		<plugins>
    			<plugin>
    				<groupId>org.jvnet.jax-ws-commons</groupId>
    				<artifactId>jaxws-maven-plugin</artifactId>
    				<version>2.1</version>
    				<dependencies>
    					<dependency>
    						<groupId>org.andromda.thirdparty.jaxb2_commons</groupId>
    						<artifactId>collection-setter-injector</artifactId>
    						<version>1.0</version>
    					</dependency>
    				</dependencies>
    				<executions>
    					<execution>
    						<goals>
    							<goal>wsimport</goal>
    						</goals>
    						<configuration>
    							<wsdlDirectory>${basedir}/src/wsdl</wsdlDirectory>
    							<wsdlLocation>http://localhost:8080/web-service-1.0.2/WSQTLicensingImplService?wsdl</wsdlLocation>
    							<genWsdl>true</genWsdl>
    							<keep>true</keep>
    							<packageName>monpackage</packageName>
    							<xjcArgs>
    								<xjcArg>-Xcollection-setter-injector</xjcArg>
    							</xjcArgs>
    							<extension>true</extension>
    						</configuration>
    					</execution>
    				</executions>
    			</plugin>
    		</plugins>
    		<pluginManagement>
    			<plugins>
     
    				<plugin>
    					<groupId>org.eclipse.m2e</groupId>
    					<artifactId>lifecycle-mapping</artifactId>
    					<version>1.0.0</version>
    					<configuration>
    						<lifecycleMappingMetadata>
    							<pluginExecutions>
    								<pluginExecution>
    									<pluginExecutionFilter>
    										<groupId>
    											org.jvnet.jax-ws-commons
    										</groupId>
    										<artifactId>
    											jaxws-maven-plugin
    										</artifactId>
    										<versionRange>
    											[2.1,)
    										</versionRange>
    										<goals>
    											<goal>wsimport</goal>
    										</goals>
    									</pluginExecutionFilter>
    									<action>
    										<ignore></ignore>
    									</action>
    								</pluginExecution>
    							</pluginExecutions>
    						</lifecycleMappingMetadata>
    					</configuration>
    				</plugin>
    			</plugins>
    		</pluginManagement>
    	</build>
    J'ai déjà effectué pas mal de recherches, mais sans trouver de solutions.

    C'est assez incompréhensible comme erreur, pourquoi ça passe sous tomcat ? Et pourquoi le protocole soap est inversé coté client ?

    Toute aide serait la bienvenue.

    Merci.

  2. #2
    Nouveau Candidat au Club
    Inscrit en
    Août 2012
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Après avoir debbugger (méthode decode de la classe StreamSOAPCodec) coté service pour vérifier le content-type que le web-service récupère, voila ce que j'obtiens :

    - Avec Tomcat : 1 appel avec comme content-type "application/soap+xml; charset=utf-8;action=""

    - Avec Glassfish, chose étrange, j'ai 3 appels :
    1 "application/soap+xml"
    1 "text/xml; charset="utf-8"" => Celui qui m'envoie l'erreur
    1 "application/soap+xml; charset=utf-8;action="""

    Du coup je pense que ça viendrait peut être d'un probleme de config de glassfish.
    Mais c'est quand meme bizarre qu'avec glassfish le serveur est appelé 3 fois.

    Quelqu'un aurait une idée ?

  3. #3
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 504
    Points : 7 843
    Points
    7 843
    Par défaut
    Citation Envoyé par roronoa59 Voir le message
    1 "text/xml; charset="utf-8"" => Celui qui m'envoie l'erreur

    Quelqu'un aurait une idée ?
    Le problème d'encodage utf-8 du serveur GlassFish (versions récentes sous 64 bits) est un bug bien connu et j'en ai fait les frais. Il paraît qu'il y a actuellement un sorte d'encodage ISOxxxx pour une raison que tous les utilisateurs ignorent.

    Une solution est disponible ici: http://stackoverflow.com/questions/2...sfish-encoding

    Après l'avoir essayée sans succès j'ai dû carrément générer le projet (NetBeans) sur un système 32 bits (même version de NetBeans et de GlassFish que sous 64 bits), remplacer le code par celui développé sur 64 bits, le deployer sur 64 bits et... miracle!

    Essaie d'abord la première sollution car tout le monde n'a pas forcément les moyens pour la deuxième. (Si jamais je peux t'aider avec ma vieille casserole Vista fais-moi signe en message privé ).

    Bonne chance!

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Août 2012
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Mishulyna Voir le message
    Le problème d'encodage utf-8 du serveur GlassFish (versions récentes sous 64 bits) est un bug bien connu et j'en ai fait les frais. Il paraît qu'il y a actuellement un sorte d'encodage ISOxxxx pour une raison que tous les utilisateurs ignorent.
    Je ne pense pas que ce soit une erreur d'encodage, puisque c'est sur le text/xml que ca plante, pas sur le UTF-8.

    J'ai essayé la solution avec le fichier sun-web.xml mais sans succès. Du coup on est passé sur du tomcat et pas de problème.

Discussions similaires

  1. Problème de droits avec GlassFish + application tierce
    Par aznur dans le forum Glassfish et Payara
    Réponses: 1
    Dernier message: 06/12/2012, 14h05
  2. Problème de déploiement avec glassfish V3
    Par Tsimplice dans le forum Glassfish et Payara
    Réponses: 0
    Dernier message: 11/01/2011, 16h13
  3. Réponses: 4
    Dernier message: 28/03/2010, 18h53
  4. [DisplayTag] problème d'utilisation avec glassfish dans un projet EJB
    Par wl1979 dans le forum Taglibs
    Réponses: 0
    Dernier message: 14/04/2009, 12h35
  5. Problème d'affichage avec glassfish
    Par lekonquerant dans le forum Glassfish et Payara
    Réponses: 5
    Dernier message: 07/04/2009, 12h26

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