【问题标题】:how can I invoke a webservice from another webservice如何从另一个 Web 服务调用 Web 服务
【发布时间】:2011-02-16 03:44:18
【问题描述】:

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


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

这是异常跟踪:
com.sun.xml.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:116) 处 com.sun.xml.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:188) 处的 java.lang.NullPointerException。 sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:119) 在 com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:89) 在 com.sun.xml。 ws.client.sei.SEIStub.invoke(SEIStub.java:118) at $Proxy175.getCase(Unknown Source) at com.kebok.ais.billing.server.ejb.impl.ChargeManagerBean.generateBillDetails(ChargeManagerBean.java:144)在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method .invoke(Method.java:597) 在 com.sun.enterprise.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1011) 在 com.sun.enterprise.security.SecurityUtil.invoke (SecurityUtil.java:175) 在 com.sun.ejb.containers.BaseContainer.invokeTargetBeanMethod(BaseContainer.java:2920) 在 com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:4011) 在 com.sun。 ejb.containers.WebServiceInvocationHandler.invoke(WebServiceInvocationHandler.java:190) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 的 $Proxy173.generateBillDetails(Unknown Source)在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 com.sun.enterprise.webservice.InvokerImpl.invoke(InvokerImpl.java:78 ) 在 com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:146) 在 com.sun.xml.ws 的 com.sun.enterprise.webservice.EjbInvokerImpl.invoke(EjbInvokerImpl.java:82) .server.sei.EndpointMethodHandler.invoke(EndpointMethodHandler.java:257) 在 com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerT ube.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) 在 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.api.pipe.helper.AbstractTubeImpl.process(AbstractTubeImpl.java:106) 在 com.sun.xml.ws.tx.service.TxServerPipe.process (TxServerPipe.java:317) 在 com.sun.enterprise.webservice.CommonServerSecurityPipe.processRequest(CommonServerSecurityPipe.java:222) 在 com.sun.enterpris e.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.Fiber._doRun(Fiber.java:554) 在 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) 在 com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:444) 在 com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:244 ) 在 com.sun.enterprise.webservice.Ejb3MessageDispatcher.handlePost(Ejb3MessageDispatcher.java:113) 在 com.sun.com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:135)。 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.StandardPipeline.invoke(StandardPipeline.java:587) 在 com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:87) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve. java:222) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593) at org.apache.catalina.core .StandardPipeline.invoke(StandardPipeline.java:587) 在 org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1096) 在 org.apache.catalina.core.StandardEngineValve.inv oke(StandardEngineValve.java:166) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593) at 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) 在 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) 在 com.sun。 com.sun.enterprise.web.connector.grizzly.DefaultReadT 上的 enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263) ask.doTask(DefaultReadTask.java:214) at com.sun.enterprise.web.portunif.PortUnificationPipeline$PUTask.doTask(PortUnificationPipeline.java:380) at com.sun.enterprise.web.connector.grizzly.TaskBase.run( TaskBase.java:265) 在 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) 在 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.Fiber._doRun(Fiber.java:第554章) i.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) 在 com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:444) 在 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) ) 在 com.sun.enterprise.webservice.EjbWebServiceServlet.dispatchToEjbEndpoint(EjbWebServiceServlet.java:228) 在 com.sun.enterprise.webservice.EjbWebServiceServlet 的 com.sun.enterprise.webservice.Ejb3MessageDispatcher.invoke(Ejb3MessageDispatcher.java:87)。服务(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.doInvo ke(StandardPipeline.java:648) 在 org.apache.catalina。

【问题讨论】:

    标签: web-services jakarta-ee glassfish ejb-3.0 jax-ws


    【解决方案1】:

    我也是,我遇到了同样的问题,但我已经解决了这个问题: 如果您使用 NetBeans

    1. 创建项目:web --> webapplication --> 等
    2. 您应该创建一个您想要调用的 Web 服务客户端。 方法是:右键单击您的项目---> webservice 客户端。 您应该提供 WSDL 的 url,Netbeans 将解析此 WSDL 并创建客户端。
    3. 在同一个包中创建您的第二个 Web 服务(将调用第一个 Web 服务)。只需右键单击您的项目 ---> webservice。
    4. 这部分对您的问题最重要 请在您的项目中创建一个简单的标准 Java 类,但使用另一个包名。 创建一个默认构造函数(可选但很好) 在您的默认构造函数之外,创建一个您命名为 TestService 的函数(这是一个简单的名称示例) 在您的函数中,右键单击并选择:插入代码 ---> 调用 Web 服务操作。 如果任何想法都可以,您必须看到来自您想要调用其操作的其他 Web 服务的服务。(这是因为您在步骤 2 中创建的客户端) 选择您要调用的操作。
    5. 在您的 Web 服务中,您现在可以将 TestService 操作作为标准 Java 操作调用(实例化您的类,使用“.”表示法调用该操作)
    6. 这就是您所需要的。 请告诉我你的进展... 如果您对此有任何其他问题,我们可以共享信息,直到您成功... 好吗? 我认为如果您想使用 Web 服务,最好的方法是使用 Netbeans。 勇气和对不起我的英语...... 我是一个法语演讲者。

    【讨论】:

    • @diengsallah:感谢您的回复。您的方法是创建一个独立的 Web 服务客户端。只要客户端从 netbeans/desktop 运行,它就可以工作,但一旦部署在 glassfish 上就不能工作。我想要一个 web 服务(部署在 glassfish 中)在内部调用另一个 web 服务。
    • 我开始怀疑 Glassfish 中没有此功能,或者它可能是一个错误??
    【解决方案2】:

    好的,我终于让它工作了。我所要做的就是用“@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)”对我正在调用的方法进行注释(在这种情况下,WebService BB 中的 invokeService() 可以顺利运行。我不太确定这背后的原因。有人吗?

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    相关资源
    最近更新 更多