как я могу вызвать веб-сервис из другого веб-сервиса

У меня есть две веб-службы A и B. A должен вызвать один из веб-методов в B. Как я могу этого добиться? Я использую плагин maven wsimport для сборки A. Это нужно для создания необходимых заглушек для B и включения их как части веб-сервиса A. Однако, когда я пытаюсь вызвать веб-метод B, я получаю исключение. Кто-нибудь может сказать мне, что происходит? Ниже приведен код и трассировка исключения: Код:


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

У меня тоже была такая же проблема, но я решил ее следующим образом: Если вы используете NetBeans:


person missionE46    schedule 05.05.2010    source источник


Ответы (2)


Создайте проект: web --> webapplication --> etc

  1. вы должны создать клиент вашей веб-службы, которую вы хотите вызвать. Метод: щелкните правой кнопкой мыши свой проект ---> клиент веб-сервиса. Вы должны указать URL-адрес вашего WSDL, и Netbeans проанализирует этот WSDL и создаст клиент.
  2. Создайте вторую веб-службу (веб-службу, которая будет вызывать первую) в том же пакете. Просто щелкните правой кнопкой мыши свой проект ---> webservice.
  3. Эта часть наиболее важна для вашей проблемы Создайте простой стандартный класс Java в своем проекте, но с другим именем пакета. Создайте конструктор по умолчанию (необязательно, но хорошо) Вне конструктора по умолчанию создайте функцию, которой вы дали имя TestService (это простой пример имени). Внутри вашей функции щелкните правой кнопкой мыши и выберите: Вставить код ---> вызвать веб-службу операция. Если кто-то думает, что все в порядке, вы должны увидеть, что служба исходит от другой веб-службы, которую вы хотите вызвать своими операциями. (Это из-за клиента, который вы создали на шаге 2). Выберите операцию, которую вы хотите вызвать.
  4. В вашем веб-сервисе теперь вы можете вызывать свою операцию TestService как стандартную операцию Java (создайте экземпляр своего класса, вызовите операцию, используя нотацию «.»)
  5. Это все, что вам нужно. Пожалуйста, держите меня в курсе вашего прогресса... Если у вас есть какие-либо другие проблемы по этому поводу, мы можем делиться информацией, пока вы не добьетесь успеха... хорошо? Я думаю, что лучше всего использовать Netbeans, если вы хотите работать с веб-сервисами. Смелость и извините за мой английский.... Я франкоговорящий.
  6. Хорошо, я наконец-то заработал. Все, что мне нужно было сделать, это аннотировать метод, который я вызываю (в данном случае invokeService() в WebService BB с «@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)», и все это работает без сучка и задоринки. Я не совсем уверен в причине этого. Кто-нибудь?
person diengsallah    schedule 06.05.2010
comment
Я начинаю подозревать, что эта функция недоступна в Glassfish или это может быть ошибка ?? - person missionE46; 07.05.2010
comment
это также ответ на заголовок stackoverflow.com/questions/2695215/?? - person missionE46; 07.05.2010

@diengsallah: Спасибо за ответ. Ваш метод создает автономный клиент веб-сервиса. Он будет работать до тех пор, пока клиент запускается из netbeans/desktop, но не будет работать после развертывания на Glassfish. Я хочу, чтобы веб-служба (которая развернута в Glassfish) вызывала другую веб-службу внутри страны.

person missionE46    schedule 07.05.2010
comment
Вероятно, вам следует открыть еще один вопрос для запроса, который вы включили в этот ответ. - person vkraemer; 08.05.2010
comment
@vkraemer да, это ответ для stackoverflow.com/questions/2695215/ . - person vkraemer; 08.05.2010
comment
Это трассировка исключения:
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) в com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java: 89) в com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:118) в $Proxy175.getCase(неизвестный источник) в com.kebok.ais.billing.server.ejb.impl.ChargeManagerBean .generateBillDetails(ChargeManagerBean.java:144) в sun.reflect.NativeMethodAccessorImpl.invoke0(собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) в sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java ) в java.lang.reflect.Method.invoke(Method.java:597) в com.sun.enterprise.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1011) в com.sun.enterp Rise.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) в $Proxy173.generateBillDetails(неизвестный источник) в sun.reflect.NativeMethodAccessorImpl.invoke0(собственный метод) в 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.webservice.InvokerImpl. invoke(InvokerImpl.java:78) в com.sun.enterprise.webservice.EjbInvokerImpl.invoke(EjbInvokerImpl.java:82) в com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:146) в com.sun.xml.ws.server.sei.EndpointMethodHandler.invoke(EndpointMethodHandler.java:257) на com.sun.xml.ws.server.sei.SEIInvok erTube.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) на 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.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) в 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) по адресу 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.Ejb3MessageDispatcher.invoke(Ejb3MessageDispatcher.java:87) в 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.Sta ndardPipeline.invoke(StandardPipeline.java:587) в com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:87) в org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:222) в 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.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) в 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.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263) на com.sun.enterprise.web.connect или.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214) по адресу com.sun.enterprise.web.portunif.PortUnificationPipeline$PUTask.doTask(PortUnificationPipeline.java:380) по адресу 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( Волокно.java:55 4) на 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) в 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. веб-сервис. Ejb3MessageDispatcher.handlePost(Ejb3MessageDispatcher.java:113) на com.sun.enterprise.webservice.Ejb3MessageDispatcher.invoke(Ejb3MessageDispatcher.java:87) на 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. - person missionE46; 14.05.2010