2010-05-05 103 views
0

我有两个webservices A和B.需要调用b中的webMethods之一。 如何实现此目的? 我正在使用Maven的wsimport插件来构建A.这是为B生成必要的存根,并将它们作为Webservice A的一部分。但是,当我尝试调用b方法时,我得到一个异常。任何人都可以告诉我发生了什么事? 下面是代码和异常跟踪: 代码:如何从另一个webservice调用webservice


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

这是异常跟踪:在com.sun.xml.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault
显示java.lang.NullPointerException。 java:188)at com.sun.xml.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:116)at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:119)at com .sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:89)at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:118)at $ Proxy175.getCase(未知源)在sun.reflect的com.kebok.ais.billing.server.ejb.impl.ChargeManagerBean.generateBillDetails(ChargeManagerBean.java:144)。在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)上的NativeMethodAccessorImpl.invoke0(Native方法)位于java.lang.reflect.Method.invoke(Method。 java:597)at com.sun.enterprise.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1011)at com.sun.enterprise.security.SecurityUtil.invoke(SecurityUtil.java:175)at com.sun.ejb .containers.BaseContainer.invokeTargetBeanMethod(BaseContainer.java:2920)at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:4011)at com.sun.ejb.containers.WebServiceInvocationHandler.invoke(WebServiceInvocationHandler.java:190 )at $ proxy173.generateBillDetails(Unknown Source)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 25)在java.la ng.reflect.Method.invoke(Method.java:597)at com.sun.enterprise.webservice.InvokerImpl.invoke(InvokerImpl.java:78)at com.sun.enterprise.webservice.EjbInvokerImpl.invoke(EjbInvokerImpl.java: 82)在com.sun.xml.ws.server.InvokerTube $ 2.invoke(InvokerTube.java:146)at com.sun.xml.ws.server.sei.EndpointMethodHandler.invoke(EndpointMethodHandler.java:257)at com。在com.sun.xml的com.sun.xml.ws.api.pipe.Fiber .__ doRun(Fiber.java:595)处提供sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:93)。 ws.api.pipe.Fiber._doRun(Fiber.java:554)位于com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:539)位于com.sun.xml.ws.api。在com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.process(AbstractTubeImpl.java:106)上的pipe.Fiber.runSync(Fiber.java:436)at com.sun.enterprise.webservice.MonitoringPipe.process(可以在com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:115)at com.sun.xml.ws.api.pipe.Fiber .__ doRun(Fiber。 java:595)at com.sun.xml.ws.api.pipe.Fiber。 _doRun(Fiber.java:554)at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:539)at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber。 java:436)at com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.process(AbstractTubeImpl.java:106)at com.sun.xml.ws.tx.service.TxServerPipe.process(TxServerPipe.java: 317)at com.sun.enterprise.webservice.CommonServerSecurityPipe.processRequest(CommonServerSecurityPipe.java:222)at com.sun.enterprise.webservice.CommonServerSecurityPipe.process(CommonServerSecurityPipe.java:133)at com.sun.xml.ws.api .pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:115)at com.sun.xml.ws.api.pipe.Fiber .__ doRun(Fiber.java:595)at com.sun.xml.ws.api.pipe .Fiber._doRun(Fiber.java:554)at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:539)at com.sun.xml.ws.api.pipe.Fiber.runSync (Fiber.java:436)at com.sun.xml.ws.server.WSEndpointImpl $ 2.process(WSEndpointImpl.java:243)at com.sun.xml.ws.transport.http.HttpAdapter $ HttpToolkit.handle(HttpAdapter。 java:444)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.enterprise.webservice.Ejb3MessageDispatcher.handlePost( Ejb3MessageDispatcher.java:113)com.sun.enterprise.webservice.Ejb3MessageDispatcher.invoke(Ejb3MessageDispatcher.java:87)at com.sun.enterprise.webservice.EjbWebServiceServlet。dispatchToEjbEndpoint(EjbWebServiceServlet.java:228)在com.sun.enterprise.webservice.EjbWebServiceServlet.service(EjbWebServiceServlet.java:157)在javax.servlet.http.HttpServlet.service(HttpServlet.java:847)在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.StandardHostValve处的com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:87)处的org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587)处。在org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)处调用(StandardHostValve.java:222)org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648) .catalina.core.StandardPipeline.invoke(StandardPipeline.java:587)位于org.a的org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1096) 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)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)在com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:647)在com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess (DefaultProcessorTask.java:579)在com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:831)在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.en在com.sun.enterprise.web.portunif.PortUnificationPipeline上的terprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214):com.sun.enterprise.web上的$ PUTask.doTask(PortUnificationPipeline.java:380)。 connector.grizzly.TaskBase.run(TaskBase.java:265)at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)导致:javax.xml.ws.WebServiceException: java.lang.NullPointerException在com.sun.enterprise.security.jmac.config.PipeHelper.makeFaultResponse(PipeHelper.java:328)at com.sun.enterprise.security.jmac.config.PipeHelper.getFaultResponse(PipeHelper.java:366 )at com.sun.enterprise.webservice.CommonServerSecurityPipe.processRequest(CommonServerSecurityPipe.java:227)at com.sun.enterprise.webservice.CommonServerSecurityPipe.process(CommonServerSecurityPipe.java:133)at com.sun.xml.ws.api。 pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:115)at com.sun.xml.ws.api.pipe.Fiber .__ doRun(Fiber.java:595)at com.sun.xml.ws.api.pipe。纤维。 _doRun(Fiber.java:554)at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:539)at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber。 java:436)at com.sun.xml.ws.server.WSEndpointImpl $ 2.process(WSEndpointImpl.java:243)at com.sun.xml.ws.transport.http.HttpAdapter $ HttpToolkit.handle(HttpAdapter.java:444 )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.enterprise.webservice.Ejb3MessageDispatcher.handlePost(Ejb3MessageDispatcher.java:113)at com.sun.enterprise.webservice.Ejb3MessageDispatcher.invoke(Ejb3MessageDispatcher.java:87)at com.sun.enterprise.webservice.EjbWebServiceServlet.dispatchToEjbEndpoint( EjbWebServiceServlet.java:228)在com.sun.enterprise.webservice.EjbWebServiceServlet.service(EjbWebServiceServlet.java:157)在javax.servlet.http.HttpServlet.service(HttpServlet.java:847)在com.sun.enterprise.web .AdHocContextValve.invoke(AdHocContextValve.java:114)at org.a位于org.apache.catalina的pache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)。

回答

0

好的,我终于搞定了。我所要做的只是声明我调用的方法(在这种情况下,在WebService BB中使用“@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)”调用invokeService(),并且它一切正常,我不太确定背后的原因。任何人?

+0

这也是对http://stackoverflow.com/questions/2695215的回答/ how-to-invoke-a-webservice-from-one-container-in-another-container-in-glassfish ?? – vkraemer 2010-05-07 22:14:02

+0

你应该打开一个您在此答案中嵌入的查询的其他问题。 – vkraemer 2010-05-07 22:22:18

+0

@vkraemer是这是它的答案http://stackoverflow.com/questions/2695215/how-to-invoke-a-webservice-from-one-container-in-another-container-in-glassfish 以及。 – missionE46 2010-05-13 21:23:34

0

我也是,我已经得到了相同的probleme,但我已经解决了这样的: 如果您使用NetBeans

  1. 创建一个项目:网络 - > web应用 - >等
  2. 您应该创建您想要调用的Web服务的客户端。方法是:右键单击你的项目---> webservice客户端。 您应该提供您的WSDL的URL,Netbeans将解析此WSDL并创建客户端。
  3. 在同一个包中创建第二个Web服务(将调用第一个的Web服务)。 Juste右键单击您的项目---> webservice。
  4. 这部分对于您的问题最重要 请在您的项目中创建一个简单的标准Java类,但使用另一个包名称。 创建一个默认的构造函数(可选但不错) 在你的默认构造函数外部,创建一个函数,你可以给出名称TestService(这是一个简单的名字例子) 在函数内部,右键单击并选择:Insert code --->调用Web服务操作。 如果有任何想法,您必须看到来自其他网络服务的服务,并且您想要调用它的操作(这是因为您在步骤2中创建的客户端) 选择您要调用的操作。
  5. 在您的web服务中,您现在可以将您的TestService操作作为标准的Java操作(instanciate您的类,使用“。”符号调用操作)
  6. 这就是您所需要的。 请让我通知您的进度... 如果您有任何其他问题,我们可以共享信息,直到您成功...好吗? 我认为最好的方法是使用Netbeans,如果你想使用webservices。 勇气和对不起我的英语.... 我是一个frensh speeker。
+0

@diengsallah:感谢您的回应。您的方法是创建一个独立的Web服务客户端。它将工作,只要客户端运行netbeans /桌面,但不会工作一旦部署在glassfish。我想要一个Web服务在glassfish中部署)在内部调用另一个webservice – missionE46 2010-05-07 00:03:09

+0

我开始怀疑这个功能在Glassfish中不可用,或者它可能是一个bug? – missionE46 2010-05-07 00:06:12

相关问题