2011-05-12 3 views
2

J'écris un client webservice fonctionnant sous Linux JBoss 5.0.1/JBossWS Native 3.1.1 qui appelle un service s'exécutant sur Windows Tomcat 6.0.29/Metro Stack."org.xml.sax.SAXParseException: fin prématurée du fichier." lors de l'analyse du schéma

Les fichiers WSDL et les fichiers XSD référencés sont accessibles via le navigateur et les tests JUnit que j'ai écrits fonctionnent très bien. Mais lorsque le client est en cours d'exécution dans JBoss, je reçois le stacktrace suivant:

Caused by: org.jboss.ws.metadata.wsdl.WSDLException: javax.wsdl.WSDLException: WSDLException (at /definitions/types/xsd:schema): faultCode=PARSER_ERROR: Problem parsing 'http://server:8280/ValueListService/?xsd=1'.: org.xml.sax.SAXParseException: Premature end of file. 
at org.jboss.ws.tools.wsdl.WSDLDefinitionsFactory.parse(WSDLDefinitionsFactory.java:152) 
at org.jboss.ws.metadata.umdm.ServiceMetaData.getWsdlDefinitions(ServiceMetaData.java:293) 
at org.jboss.ws.metadata.builder.jaxws.JAXWSClientMetaDataBuilder.buildMetaData(JAXWSClientMetaDataBuilder.java:84) 
at org.jboss.ws.core.jaxws.spi.ServiceDelegateImpl.<init>(ServiceDelegateImpl.java:138) 
at org.jboss.ws.core.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:63) 
at javax.xml.ws.Service.<init>(Service.java:79) 
at javax.xml.ws.Service.create(Service.java:96) 
at ... 

Par la mise en œuvre de débogage JBossWS WSDL je trouve que le InputStream qui est créée à partir du XSD référencé est nul. Cela me conduit normalement à l'hypothèse qu'il existe une sorte de problème de réseau (ou pare-feu) entre le client et le serveur. Tout cela est très déroutant, car les tests unitaires s'exécutent sur la même machine, donc ça ne peut pas être à cause de ça.

+0

Etes-vous capable de 'wget' le WSDL sur la machine Linux? – artbristol

+0

Oui. Je reçois un schéma XML valide en conséquence. – bohnenquark

+0

voir le résultat ici: http://pastie.org/1892168 – bohnenquark

Répondre

0

Il m'a fallu du temps pour comprendre le fonctionnement interne de l'implémentation WS, mais j'ai trouvé une solution maintenant.

Le problème réside dans le langage JBoss natif, qui ne peut pas gérer les URL générées par Metro. Mon soucis pour le moment est de charger les WSDL et les XSD de mes ressources locales et de changer l'adresse du point de terminaison pour l'adresse du serveur réel manuellement.

@artbristol, merci pour votre aide.

Questions connexes