Serveur génère une mauvaise mise en forme de services.wsdl
J'ai un Tomcat 7.0 serveur web que j'utilise pour exécuter un service web. Le service web est le cadre CXF 2.5.2.
Lors du test du service web à partir de l'Éclipse de Service Web Explorer tout fonctionne comme on le suppose. Cependant, lors de la génération d'un Client Java à partir du WSDL (à l'aide d'Eclipse) et en l'exécutant, j'obtiens l'erreur suivante lors de l'appel de super(wsdlLocation, serviceName)
de la mise en œuvre des Services:
Exception in thread "main" javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.ServiceConstructionException: Failed to create service.
at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:150)
at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:91)
at javax.xml.ws.Service.<init>(Service.java:77)
at test.Test_Service.<init>(Test_Service.java:43)
at test.Test_TestSOAP_Client.main(Test_TestSOAP_Client.java:47)
Caused by: org.apache.cxf.service.factory.ServiceConstructionException: Failed to create service.
at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:94)
at org.apache.cxf.jaxws.ServiceImpl.initializePorts(ServiceImpl.java:204)
at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:148)
... 4 more
Caused by: javax.wsdl.WSDLException: WSDLException: faultCode=PARSER_ERROR: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'c' (code 99) in start tag Expected a quote at [row,col,system-id]: [1,208,"http://www.example.com:8081/TestWS/services?wsdl"]
at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:240)
at org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.java:191)
at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:92)
... 6 more
Caused by: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'c' (code 99) in start tag Expected a quote at [row,col,system-id]: [1,208,"http://www.example.com:8081/TestWS/services?wsdl"]
at com.ctc.wstx.sr.StreamScanner.throwUnexpectedChar(StreamScanner.java:639)
at com.ctc.wstx.sr.BasicStreamReader.handleNsAttrs(BasicStreamReader.java:3005)
at com.ctc.wstx.sr.BasicStreamReader.handleStartElem(BasicStreamReader.java:2926)
at com.ctc.wstx.sr.BasicStreamReader.nextFromTree(BasicStreamReader.java:2802)
at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1050)
at org.apache.cxf.staxutils.StaxUtils.readDocElements(StaxUtils.java:1080)
at org.apache.cxf.staxutils.StaxUtils.readDocElements(StaxUtils.java:974)
at org.apache.cxf.staxutils.StaxUtils.read(StaxUtils.java:901)
at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:231)
... 8 more
La partie intéressante devrait être le Unexpected character 'c' (code 99) in start tag Expected a quote
message. Lors de l'inspection des services générés.wsdl, j'ai trouvé que le problème est dans la partie meta:
at [row,col,system-id]: [1,208,"http://www.example.com:8081/TestWS/services?wsdl"]
<meta http-equiv=content-type content="text/html; charset=UTF-8">
content-type
devrait normalement être enveloppé dans des guillemets. Est-ce un bug connu dans l'un des cadres de travail/serveurs? Que puis-je faire pour contourner ce problème? Et pourquoi il n'y a pas de problème lors de l'utilisation de l'Éclipse de Services Web Explorer? Est-il plus tolérant aux pannes (comme mon Firefox semble être comme il également ne pas avoir de problèmes pour afficher une représentation graphique de l'wsdl généré).
OriginalL'auteur ubuntudroid | 2012-03-19
Vous devez vous connecter pour publier un commentaire.
Le service de liste de la page est une page HTML qui liste les services et en fournissant des liens vers le WSDL adaptée documentes pour ces services (ou WADL docs pour le reste en fonction des services). Ce n'est pas un document WSDL. L'analyser en tant qu'WSDL ne fonctionnerait pas.
http://www.example.com:8081/TestWS/services?wsdl
qui doit retourner un WSDL, n'est-ce pas?Trouvé le problème, voir ma réponse.
OriginalL'auteur Daniel Kulp
Cela ressemble à un problème/bug avec le CXF liste des services de génération. Dans
org.apache.cxf.transport.servlet.servicelist.FormattedServiceListWriter
source (autour de la ligne 52):c'est à dire la
http-equiv
valeur est non cotées. Donc il n'y a pas de problème avec les autres outils, car ils sont plus "tolérant" - comme vous l'avez deviné.Je ne suis pas sûr de ce que l'
com.ctc.wstx.*
classes sont comme il semble que c'est là que la validation se passe et le message d'erreur est levée. Si c'est quelque chose que vous avez plus de contrôle, un (temporaire) de travail autour de peut-être exécuter HTMLTidy sur la liste des services page?Peut être utile de mentionner sur le CXF mail-liste ou d'élever un bug?
com.ctc.wstx
semble être le Woodstock processeur XML. Il n'est rien que je la contrôle...Trouvé le problème, voir ma réponse.
OriginalL'auteur kevinjansz
Trouvé le problème. J'ai accidentellement spécifié le WSDL point de terminaison comme
http://www.example.com:8081/TestWS/services
au lieu dehttp://www.example.com:8081/TestWS/services/MyTestWS
. Si l'généré automatiquement le client a essayé de récupérer le fichier WSDL à partir dehttp://www.example.com:8081/TestWS/services?wsdl
qui renvoie une page HTML, au lieu dehttp://www.example.com:8081/TestWS/services/MyTestWS?wsdl
qui renvoie un réel WSDL.OriginalL'auteur ubuntudroid
J'avais même exception une fois et c'était parce que dans un fichier de configuration à un seul endroit qui me manquait doule citations.. exemple
destination-name=closeTaskService
correctif a été
destination-name="closeTaskService"
, l'erreur a été quelque chose comme ci-dessousorg.jboss.deployment.DeploymentException: Unexpected character 'c' (code 99)
dans la balise de début Prévu un devisOriginalL'auteur Sandeep