2010-05-05 13 views
0

J'ai deux services Web A et B. A doit invoquer l'un des webMethods dans B. Comment puis-je y parvenir? J'utilise le plugin wsimport de maven pour construire A. Ceci pour générer les stubs nécessaires pour B et les inclure dans le Webservice A. Cependant, lorsque j'essaie d'invoquer la méthode web de B, j'obtiens une exception. Quelqu'un peut-il me dire ce qu'il se passe? Ci-dessous, le code et la trace d'exception: code:comment puis-je appeler un service Web à partir d'un autre service Web?


BBeanService bbs = new BBeanService(); 
BBean bb = bbs.getBBeanPort();    
bb.invokeWebService(); // this is throwing exception 

Ceci est la trace d'exception:
java.lang.NullPointerException à com.sun.xml.ws.fault.SOAP11Fault.getProtocolException (SOAP11Fault. java: 188) à com.sun.xml.ws.fault.SOAPFaultBuilder.createException (SOAPFaultBuilder.java:116) à com.sun.xml.ws.client.sei.SyncMethodHandler.invoke (SyncMethodHandler.java:119) at com .sun.xml.ws.client.sei.SyncMethodHandler.invoke (SyncMethodHandler.java:89) à com.sun.xml.ws.client.sei.SEIStub.invoke (SEIStub.java:118) à $ Proxy175.getCase (Source inconnue) à com.kebok.ais.billing.server.ejb.impl.ChargeManagerBean.generateBillDetails (ChargeManagerBean.java:144) à sun.reflect. NativeMethodAccessorImpl.invoke0 (méthode native) à sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) à sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) à java.lang.reflect.Method.invoke (méthode. java: 597) sur com.sun.enterprise.security.application.EJBSecurityManager.runMethod (EJBSecurityManager.java:1011) sur com.sun.enterprise.security.SecurityUtil.invoke (SecurityUtil.java:175) sur com.sun.ejb .containers.BaseContainer.invokeTargetBeanMethod (BaseContainer.java:2920) à l'adresse com.sun.ejb.containers.BaseContainer.intercept (BaseContainer.java:4011) à l'adresse com.sun.ejb.containers.WebServiceInvocationHandler.invoke (WebServiceInvocationHandler.java:190) à $ Proxy173.generateBillDetails (source inconnue) à sun.reflect.NativeMethodAccessorImpl.invoke0 (Méthode native) à sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) à sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java: 25) sur java.la ng.reflect.Method.invoke (Method.java:597) à com.sun.enterprise.webservice.InvokerImpl.invoke (InvokerImpl.java:78) à com.sun.enterprise.webservice.EjbInvokerImpl.invoke (EjbInvokerImpl.java: 82) sur com.sun.xml.ws.server.InvokerTube $ 2.invoke (InvokerTube.java:146) sur com.sun.xml.ws.server.sei.EndpointMethodHandler.invoke (EndpointMethodHandler.java:257) sur com. sun.xml.ws.server.sei.SEIInvokerTube.processRequest (SEIInvokerTube.java:93) à com.sun.xml.ws.api.pipe.Fiber .__ doRun (Fiber.java:595) à com.sun.xml. ws.api.pipe.Fiber._doRun (Fiber.java:554) à com.sun.xml.ws.api.pipe.Fiber.doRun (Fiber.java:539) à com.sun.xml.ws.api. pipe.Fiber.runSync (Fiber.java:436) à com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.process (AbstractTubeImpl.java:106) à com.sun.enterprise.webservice.MonitoringPipe.process (MonitoringPipe.java:147) à l'adresse com.sun.xml.ws.apipe.pipe.helper.PipeAdapter.processRequest (PipeAdapter.java:115) à l'adresse com.sun.xml.ws.api.pipe.Fiber .__ doRun (Fibre. java: 595) à com.sun.xml.ws.api.pipe.Fiber. _doRun (Fiber.java:554) à com.sun.xml.ws.api.pipe.Fiber.doRun (Fiber.java:539) à com.sun.xml.ws.api.pipe.Fiber.runSync (Fibre. java: 436) à com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.process (AbstractTubeImpl.java:106) à com.sun.xml.ws.tx.service.TxServerPipe.process (TxServerPipe.java: 317) sur com.sun.enterprise.webservice.CommonServerSecurityPipe.processRequest (CommonServerSecurityPipe.java:222) sur com.sun.enterprise.webservice.CommonServerSecurityPipe.process (CommonServerSecurityPipe.java:133) sur com.sun.xml.ws.api .pipe.helper.PipeAdapter.processRequest (PipeAdapter.java:115) à com.sun.xml.ws.api.pipe.Fiber .__ doRun (Fiber.java:595) à com.sun.xml.ws.api.pipe .Fiber._doRun (Fiber.java:554) à com.sun.xml.ws.api.pipe.Fiber.doRun (Fiber.java:539) à com.sun.xml.ws.api.pipe.Fiber.runSync (Fiber.java:436) à com.sun.xml.ws.server.WSEndpointImpl $ 2.process (WSEndpointImpl.java:243) à com.sun.xml.ws.transport.http.HttpAdapter $ HttpToolkit.handle (HttpAdapter. java: 444) à l'adresse com.sun.xml.ws.transport. http.HttpAdapter.handle (HttpAdapter.java:244) à com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle (ServletAdapter.java:135) à com.sun.enterprise.webservice.Ejb3MessageDispatcher.handlePost (Ejb3MessageDispatcher.java:113) sur com.sun.enterprise.webservice.Ejb3MessageDispatcher.invoke (Ejb3MessageDispatcher.java:87) sur com.sun.enterprise.webservice.EjbWebServiceServlet.dispatchToEjbEndpoint (EjbWebServiceServlet.java:228) sur com.sun.enterprise.webservice.EjbWebServiceServlet.service (EjbWebServiceServlet.java:157) sur javax.servlet.http.HttpServlet.service (HttpServlet.java:847) sur com.sun.enterprise .web.AdHocContextValve.invoke (AdHocContextValve.java:114) à org.apache.catalina.core.StandardPipeline.doInvoke (StandardPipeline.java:648) à org.apache.catalina.core.StandardPipeline.doInvoke (StandardPipeline.java:593) à org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:587) à com.sun.enterprise.web.WebPipeline.invoke (WebPipeline.java:87) à org.apache.catalina.core.StandardHostValve. invoke (StandardHostValve.java:222) sur org.apache.catalina.core.StandardPipeline.doInvoke (StandardPipeline.java:648) sur org.apache.catalina.core.StandardPipeline.doInvoke (StandardPipeline.java:593) sur org.apache .catalina.core.StandardPipeline.invoke (StandardPipeline.java:587) sur org.apache.catalina.core.ContainerBase.invoke (ContainerBase.java:1096) sur org.a pache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:166) à org.apache.catalina.core.StandardPipeline.doInvoke (StandardPipeline.java:648) à org.apache.catalina.core.StandardPipeline.doInvoke (StandardPipeline. java: 593) à org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:587) à org.apache.catalina.core.ContainerBase.invoke (ContainerBase.java:1096) à org.apache.coyote.tomcat5 .CoyoteAdapter.service (CoyoteAdapter.java:288) sur com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter (DefaultProcessorTask.java:647) sur com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess (DefaultProcessorTask.java:579) sur com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process (DefaultProcessorTask.java:831) sur com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask (DefaultReadTask.java) : 341) sur com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask (DefaultReadTask.java:263) sur com.sun.en terprise.web.connector.grizzly.DefaultReadTask.doTask (DefaultReadTask.java:214) sur com.sun.enterprise.web.portunif.PortUnificationPipeline $ PUTask.doTask (PortUnificationPipeline.java:380) sur com.sun.enterprise.web. connector.grizzly.TaskBase.run (TaskBase.java:265) sur com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run (SSLWorkerThread.java:106) Causé par: javax.xml.ws.WebServiceException: java.lang.NullPointerException à com.sun.enterprise.security.jmac.config.PipeHelper.makeFaultResponse (PipeHelper.java:328) à com.sun.enterprise.security.jmac.config.PipeHelper.getFaultResponse (PipeHelper.java:366) à com.sun.enterprise.webservice.CommonServerSecurityPipe.processRequest (CommonServerSecurityPipe.java:227) à com.sun.enterprise.webservice.CommonServerSecurityPipe.process (CommonServerSecurityPipe.java:133) à com.sun.xml.ws.api. pipe.helper.PipeAdapter.processRequest (PipeAdapter.java:115) à com.sun.xml.ws.api.pipe.Fiber .__ doRun (Fiber.java:595) à com.sun.xml.ws.api.pipe. Fibre. _doRun (Fiber.java:554) à com.sun.xml.ws.api.pipe.Fiber.doRun (Fiber.java:539) à com.sun.xml.ws.api.pipe.Fiber.runSync (Fibre. java: 436) à com.sun.xml.ws.server.WSEndpointImpl $ 2.process (WSEndpointImpl.java:243) à com.sun.xml.ws.transport.http.HttpAdapter $ HttpToolkit.handle (HttpAdapter.java:444) à com.sun.xml.ws.transport.httpAdapter.handle (HttpAdapter.java:244) à com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle (ServletAdapter.java:135) à com.sun.enterprise.webservice.Ejb3MessageDispatcher.handlePost (Ejb3MessageDispatcher.java:113) sur com.sun.enterprise.webservice.Ejb3MessageDispatcher.invoke (Ejb3MessageDispatcher.java:87) sur com.sun.enterprise.webservice.EjbWebService.dispatchToEjbEndpoint (EjbWebServiceServlet.java:228) sur com.sun.enterprise.webservice.EjbWebServiceServlet.service (EjbWebServiceServlet.java:157) sur javax.servlet.http.HttpServlet.service (HttpServlet.java:847) sur com.sun.enterprise.web .AdHocContextValve.invoke (AdHocContextValve.java:114) at org.a pache.catalina.core.StandardPipeline.doInvoke (StandardPipeline.java:648) sur org.apache.catalina.

Répondre

0

Ok, j'ai finalement réussi à le faire fonctionner. Tout ce que je devais faire était d'annoncer la méthode que j'appelle (dans ce cas, invokeService() dans WebService BB avec "@TransactionAttribute (TransactionAttributeType.NOT_SUPPORTED)" et tout fonctionne sans accroc Je ne suis pas tout à fait sûr de la raison.

+0

est-ce aussi la réponse à http://stackoverflow.com/questions/2695215/how-to-invoke-a-webservice-from-one-container-in-another-container-in-glassfish – vkraemer

+0

Vous devriez probablement ouvrir un autre question pour la requête que vous avez incorporée dans cette réponse. – vkraemer

+0

@vkraemer Oui, il est la réponse pour http://stackoverflow.com/questions/2695215/how-to-invoke-a-webservice-from-one-container-in-another-container-in-glassfish ainsi. – missionE46

0

Moi aussi, je l'avais obtenu le même Probleme mais je l'ai résolu comme ceci: Si vous utilisez NetBeans:

  1. Créer un projet: web -> webapplication -> etc
  2. vous devez créer un client de votre service Web que vous souhaitez appeler. La méthode est: faites un clic droit sur votre projet ---> webservice client. Vous devez donner l'URL de votre WSDL et Netbeans analysera ce WSDL et créera le client.
  3. Créez votre deuxième service Web (le service Web qui appellera le premier) dans le même package. Juste faites un clic droit sur votre projet ---> webservice.
  4. Cette partie est la plus importante pour votre problème. Veuillez créer une classe Java standard simple dans votre projet mais avec un autre nom de paquet. Créer un constructeur par défaut (facultatif mais bon) En dehors de votre constructeur par défaut, créez une fonction que vous donnez le nom TestService (c'est un simple exemple de nom) Dans votre fonction, faites un clic droit et choisissez: Insérer le code ---> appelez le service Web. Si vous pensez que cela fonctionne, vous devez voir le service provenant de l'autre service Web que vous souhaitez appeler (en raison du client que vous avez créé à l'étape 2) Choisissez l'opération que vous souhaitez appeler.
  5. Dans votre service Web, vous pouvez maintenant appeler votre opération TestService comme une opération Java standard (instanciez votre classe, appelez l'opération en utilisant la notation ".")
  6. C'est tout ce dont vous avez besoin. S'il vous plaît, gardez-moi informer de vos progrès ... Si vous avez d'autres problèmes à ce sujet, nous pouvons partager des informations jusqu'à ce que vous avez du succès ... ok? Je pense que le meilleur moyen est d'utiliser Netbeans si vous voulez travailler avec des webservices. Courage et désolé pour mon anglais .... Je suis un speeker frensh.
+0

@diengsallah: Merci pour la réponse.Votre méthode crée un client webservice autonome.Cela fonctionnera tant que le client est exécuté à partir de netbeans/desktop mais ne fonctionnera pas une fois déployé sur glassfish.Je veux un webservice (qui est déployé dans glassfish) appelle un autre webservice en interne – missionE46

+0

Je commence à suspecter cette fonctionnalité n'est pas disponible dans Glassfish ou il peut être un bogue ?? – missionE46