Web services 如何从另一个Web服务调用Web服务

Web services 如何从另一个Web服务调用Web服务,web-services,jakarta-ee,glassfish,ejb-3.0,jax-ws,Web Services,Jakarta Ee,Glassfish,Ejb 3.0,Jax Ws,我有两个Web服务A和B。A需要调用B中的一个webMethods。 我怎样才能做到这一点? 我正在使用maven的wsimport插件来构建A。这是为了为B生成必要的存根,并将它们作为Web服务A的一部分。 然而,当我试图调用webmethod of B时,我得到了一个异常。谁能告诉我发生了什么事? 以下是代码和异常跟踪: 代码: 这是异常跟踪: com.sun.xml.ws.fault.SOAP11Fault.getProtocolExceptionSOAP11Fault.java:188在

我有两个Web服务A和B。A需要调用B中的一个webMethods。 我怎样才能做到这一点? 我正在使用maven的wsimport插件来构建A。这是为了为B生成必要的存根,并将它们作为Web服务A的一部分。 然而,当我试图调用webmethod of B时,我得到了一个异常。谁能告诉我发生了什么事? 以下是代码和异常跟踪: 代码:

这是异常跟踪: com.sun.xml.ws.fault.SOAP11Fault.getProtocolExceptionSOAP11Fault.java:188在com.sun.xml.ws.fault.SOAPFaultBuilder.createExceptionSOAPFaultBuilder.java:116在com.sun.xml.ws.client.sei.SyncMethodHandler.invokeSyncMethodHandler.java:119在com.sun.xml.ws.client.sei.SyncMethodHandler.invokeSyncMethodHandler.InvokesynchMethodHandler.java:89在com.sun.xml.ws.client.sei.SEIStub.invokeSEIStub.java:118在$Proxy175.getcase未知源在com.kebok.ais.billing.server.ejb.impl.ChargeManagerBean.generateBillDetailsChargeManagerBean.java:144在sun.reflect.NativeMethodAccessorImpl.invoke0NativeMethodAccessorimpl.invokeNativeMethodAccessorImpl在sun.reflect.NativeMethodAccessorImpl.InvokeMathodAccessorimpl.InvokeMathodAccesssun.reflect.DelegatingMethodAccessorImpl.invokeDelegatingMethodAccessorImpl.java:25 at java.lang.reflect.Method.invokeMethod.java:597 at com.sun.enterprise.security.application.EJBSecurityManager.runMethodEJBSecurityManager.java:1011 at com.sun.enterprise.security.SecurityUtil.invokeSecurityUtil.java:175 atcom.sun.ejb.containers.BaseContainer.invokeTargetBeanMethodBaseContainer.java:2920在com.sun.ejb.containers.BaseContainer.interceptBaseContainer.java:4011在com.sun.ejb.containers.WebServiceInLocationHandler.InvokeWebServiceInLocationHandler.java:190在$Proxy173.generateBillDetails未知源代码在sun.reflect.NativeMethodAccessorImpl.invoke0Native方法sun.reflect.NativeMethodAccessorImpl.invokeNativeMethodAccessorImpl.java:39在sun.reflect.DelegatingMethodAccessorImpl.invokeDelegatingMethodAccessorImpl.java:25在java.lang.reflect.Method.invokeMethod.invokeMethod.java:597在com.sun.enterprise.webservice.invokeInvokerImpl.java:78在java:82位于com.sun.xml.ws.server.InvokerTube$2.invokeInvokerTube.java:146位于com.sun.xml.ws.server.sei.EndpointMethodHandler.invokeEndpointMethodHandler.java:257位于com.sun.xml.ws.server.sei.sei InvokerTube.ProcessRequestSeInvokerTube.java:93位于com.sun.xml.ws.api.pipe.Fiber.uu dornufber.java:595在com.sun.xml.ws.api.Fiber._dornufber.java:554在com.sun.xml.ws.api.pipe.Fiber.dornufber.java:539在com.sun.xml.ws.api.pipe.Fiber.runSyncFiber.java:436在com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.processAbstractTubeImpl.java:106在com.sun.enterprise.webservice.MonitoringPipe.processMonitoringPipe.java:147在com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequestPipeAdapter.java:115在com.sun.xml.api.pipe.Fiber.java:595在com.sun.xml.ws.api.pipe.Fiber.在com.sun.xml.ws.api.pipe.Fiber.doRunFiber.java:554在com.sun.xml.ws.api.pipe.Fiber.runSyncFiber.java:436在com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.processAbstractTubeImpl.java:106在com.sun.xml.ws.tx.service.TxServerPipe.java:317在com.sun.enterprise.webservice.CommonServerSecurityType.ProcessRequestCommonServerSecurityType.java:222在com.sun.enterprise.webservice.commonServerSecurityType.ProcessCommonServerSecurityType.java:133位于com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequestPipeAdapter.java:115位于com.sun.xml.api.pipe.Fiber.java:595位于com.sun.xml.ws.api.pipe.Fiber.\u doRunFiber.java:554位于com.sun.xml.ws.api.pipe.Fiber.doRunFiber.java:539位于java:436在com.sun.xml.ws.server.WSEndpointImpl$2.processWSEndpointImpl.java:243在com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handleHttpAdapter.java:444在com.sun.xml.ws.transport.http.HttpAdapter.handleHttpAdapter.java:244在java:135位于com.sun.enterprise.webservice.Ejb3MessageDispatcher.handlePostEjb3MessageDispatcher.java:113位于com.sun.enterprise.webservice.Ejb3MessageDispatcher.invokeEjb3MessageDispatcher.java:87位于com.sun.enterprise.webservice.EjbWebServiceServlet.dispatchToEjbEndpointEjbWebServiceServlet.java:228在com.sun.enterprise.webservice.EjbWebServiceServlet.servicejbwebserviceservlet.java:157在javax.servlet.http.HttpServlet.serviceHttpServlet.java:847在com.sun.enterprise.web.AdHocContextValve.invokeAdHocContextValve.java:114在org.apache.catalina.core.StandardPipeline.doInvokeStandardPipeline.java:648在org.apache.catalina.core.StandardPipeline.doInvokeStandardPipeline.java:593在org.apache.catalina.core.StandardPipeline.invokeStandardPipeline.java:587在com.sun.enterprise.web.WebPipeline.invokeWebPipeline.java:87在org.apache.catalina.core.StandardHostValve.invokeStandardHostValve
java:648在org.apache.catalina.core.StandardPipeline.java:593在org.apache.catalina.core.StandardPipeline.java:593在org.apache.catalina.core.StandardPipeline.invokeStandardPipeline.java:587在org.apache.catalina.core.ContainerBase.invokeContainerBase.java:1096在org.apache.catalina.core.StandardEngineValve.InvokeStandardenginielve.java:166在org.apache.catalina.core.StandardPipeline.doInvokeStandardPipeline.java:648在org.apache.catalina.core.StandardPipeline.doInvokeStandardPipeline.java:593在org.apache.catalina.core.StandardPipeline.invokeStandardPipeline.java:587在org.apache.catalina.core.ContainerBase.invokeContainerBase.java:1096在org.apache.coyote.tomcat5.CoyoteAdapter.serviceCooteadapter.java:288在com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeApterDefaultProcessorTask.java:647在com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcessDefaultProcessorTask.java:579在com.sun.enterprise.web.connector.grizzly.java:831在com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTaskDefaultReadTask.java:341在com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTaskDefaultReadTask.java:263位于com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTaskDefaultReadTask.java:214位于com.sun.enterprise.web.portunif.PortUnificationPipeline$PUTask.doTaskPortUnificationPipeline.java:380 atcom.sun.enterprise.web.connector.grizzly.TaskBase.runTaskBase.java:265在com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.runSSLWorkerThread.java:106由以下原因引起:javax.xml.ws.webserviceception:java.lang.NullPointerException在com.sun.enterprise.security.jmac.config.PipeHelper.makefaultresponseHelper.java:328在com.sun.enterprise.security.jmac.config.PipeHelper.getFaultResponsePeHelper.java:366在com.sun.enterprise.webservice.commonServerSecurityType.ProcessRequestCommonServerSecurityType.java:227在com.sun.enterprise.webservice.commonServerSecurityType.ProcessCommonServerSecurityType.java:133在com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequestPipeAdapter.java:115位于com.sun.xml.ws.api.pipe.Fiber.java:595位于com.sun.xml.ws.api.pipe.Fiber.java:554位于com.sun.xml.ws.api.pipe.Fiber.dornfiber.java:539位于com.sun.xml.ws.api.pipe.Fiber.runSyncFiber.java:436位于com.sun.xml.ws.server.WSEndpointImpl$2.processWSEndpointImpl.java:243在com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handleHttpAdapter.java:444在com.sun.xml.ws.transport.HttpAdapter.handleHttpAdapter.java:244在com.sun.xml.ws.transport.http.servlet.ServletAdapter.handleServletAdapter.java:135在java:113位于com.sun.enterprise.webservice.Ejb3MessageDispatcher.java:113位于com.sun.enterprise.webservice.Ejb3MessageDispatcher.invokeEjb3MessageDispatcher.java:87位于com.sun.enterprise.webservice.EjbWebServiceServlet.dispatchtoejbendpointejbwserviceservlet.java:228位于com.sun.enterprise.webservice.EjbWebServiceServlet.servicejbwebserviceservlet.java:157在javax.servlet.http.HttpServlet.serviceHttpServlet.java:847在com.sun.enterprise.web.AdHocContextValve.invokeAdHocContextValve.java:114在org.apache.catalina.core.StandardPipeline.doInvokeStandardPipeline.java:648在org.apache.catalina,我也遇到了同样的问题,但我已经这样解决了: 如果您使用NetBeans:

创建一个项目:web->webapplication->etc 您应该创建要调用的web服务的客户端。 方法是:右键单击您的项目-->webservice客户端。 您应该给出WSDL的url,Netbeans将解析此WSDL并创建客户端。 创建第二个web服务—将调用同一包中第一个web服务的web服务。只需右键单击您的项目-->Web服务。 这部分对你的问题来说是最重要的 请在项目中创建一个简单的标准Java类,但使用另一个包名。 创建一个默认构造函数可选但很好 在默认构造函数之外,创建一个名为testservices的函数这是一个简单的name示例 在函数内部,右键单击并选择:插入代码-->调用web服务操作。 如果任何想法都是正确的,那么您必须看到来自您想要调用其操作的另一个web服务的服务 选择要调用的操作。 在您的Web服务中,您现在可以将TestService操作作为标准Java操作调用。符号 这就是你所需要的。 请让我知道你的进展。。。 如果您对此有任何其他问题,我们可以共享信息,直到您获得成功。。。好啊 我认为,如果您想使用Web服务,最好的方法是使用Netbeans。 勇气和抱歉,我的英语。。。。 我是一个讲法语的人。
好的,我终于让它工作了。我所有的
要做的是使用@TransactionattributetTransactionationAttributeType.NOT_来注释我在本例中调用的WebService BB中的invokeService方法,它可以顺利运行。我不太清楚这背后的原因。有人吗?

@diengsallah:谢谢你的回复。您的方法是创建一个独立的webservice客户端。只要客户端从netbeans/desktop运行,它就可以工作,但一旦部署到glassfish上,它就无法工作。我想要一个部署在glassfish中的Web服务在内部调用另一个Web服务。我开始怀疑glassfish中没有此功能,或者它可能是一个bug??这也是问题的答案??您可能应该为嵌入此答案中的查询打开另一个问题。@vkraemer是的,这也是问题的答案。

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