2010-07-16 5 views
3

L'architecture actuelle comporte une application Web (dans une distribution WAR), utilisée pour fournir des informations au client Web via une servlet. Cette servlet récupère ces informations auprès d'un service externe via Glassfish Metro (SOAP), puis les met en forme en conséquence pour le client (JavaScript). Un composant proxy (JAR) a été développé pour gérer l'accès à ce service externe (via Glassfish Metro), et le service externe est complètement accessible et utilisable par ce composant via la ligne de commande, les tests JUnit, et même le projet Web, lorsqu'il est exécuté en tant qu'application de ligne de commande. Une fois ce projet Web exécuté via Glassfish, le servlet rencontre des problèmes lors de la tentative d'appel de ce service (via le composant proxy).Appel du service Web externe via une servlet

est inférieure à la trace de la pile:

java.lang.ClassCastException: org.apache.xerces.parsers.XML11Configuration cannot be cast to org.apache.xerces.xni.parser.XMLParserConfiguration 
    at org.apache.xerces.parsers.SAXParser.<init>(Unknown Source) 
    at org.apache.xerces.parsers.SAXParser.<init>(Unknown Source) 
    at org.apache.xerces.jaxp.SAXParserImpl.<init>(Unknown Source) 
    at org.apache.xerces.jaxp.SAXParserFactoryImpl.newSAXParser(Unknown Source) 
    at com.sun.org.apache.xml.internal.resolver.readers.SAXCatalogReader.readCatalog(SAXCatalogReader.java:238) 
    at com.sun.org.apache.xml.internal.resolver.Catalog.parseCatalog(Catalog.java:680) 
    at com.sun.xml.ws.util.xml.XmlUtil.createDefaultCatalogResolver(XmlUtil.java:299) 
    at com.sun.xml.ws.client.WSServiceDelegate.parseWSDL(WSServiceDelegate.java:267) 
    at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:230) 
    at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:178) 
    at com.sun.xml.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:106) 
    at javax.xml.ws.Service.<init>(Service.java:57) 
    at com.acme.MLSWebServicesInterface.<init>(MLSWebServicesInterface.java:48) 
    at com.adomain.acme.MLSManager.getDeviceRecords(MLSManager.java:42) 
    at com.adomain.app.service.StatusManager.getDeviceRecords(StatusManager.java:22) 
    at com.adomain.app.service.StatusServlet.processRequest(StatusServlet.java:44) 
    at com.adomain.app.service.StatusServlet.doGet(StatusServlet.java:87) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:734) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) 
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188) 
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641) 
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97) 
    at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185) 
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:233) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165) 
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791) 
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693) 
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954) 
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170) 
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88) 
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76) 
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53) 
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57) 
    at com.sun.grizzly.ContextTask.run(ContextTask.java:69) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309) 
    at java.lang.Thread.run(Thread.java:619) 
+0

+1 pour l'utilisation du mot "garners" – skaffman

Répondre

4

qui ressemble à un problème avec des classes en conflit chargées de plusieurs classloaders. Plus précisément, il semble que votre application possède sa propre copie interne de Xerces dans son répertoire lib, et ceci est en conflit avec la copie de Glassfish.

Si cela est vrai, supprimez la copie de votre application, ce n'est pas nécessaire.

+1

C'était exactement cela. Une fois qu'il est exclu du répertoire lib, le problème disparaît. –

Questions connexes