2010-04-22 4 views
0

2 개의 별도 서버 A와 B에 두 개의 컨테이너에 배포 된 웹 서비스가 있습니다. 'Server A'의 webMethod가 'Server B'의 webmethod를 호출해야합니다.glassfish의 다른 컨테이너에있는 하나의 컨테이너에서 webservice를 호출하는 방법

나는 '서버 A'가이 클라이언트 스텁을 사용하고 서버 B와 통신하려고 시도하는 동안 클라이언트 스텁을 만들었습니다. : service.getABCBeanPort에서 포트 객체를 인스턴스화하는 동안 예외가 발생합니다.();

(JAX-WS 라이브러리 사용)

내 접근 방식이 맞습니까? 원격 서버에서 webservice를 호출하는 더 좋은 방법이 있습니까?

이 여기 내 예제 코드
public void autoPostRoomCharge() {
try {
BedHistoryManagerBeanService bs = new BedHistoryManagerBeanService(); BedHistoryManagerBean bb = bs.getBedHistoryManagerBeanPort(); //bombs here
} catch (Exception e) { System.out.println("Exception:" + e.getMessage()); }
}


있는 예외 스택 추적
at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:3794) at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:3596) at com.sun.ejb.containers.WebServiceInvocationHandler.invoke(WebServiceInvocationHandler.java:201) at $Proxy170.autoPostRoomCharges(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) at java.lang.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) at 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.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:93) 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.enterprise.webservice.MonitoringPipe.process(MonitoringPipe.java:147) 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.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) at com.sun.enterprise.webservice.Ejb3MessageDispatcher.invoke(Ejb3MessageDispatcher.java:87) at com.sun.enterprise.webservice.EjbWebServiceServlet.dispatchToEjbEndpoint(EjbWebServiceServlet.java:228) at com.sun.enterprise.webservice.EjbWebServiceServlet.service(EjbWebServiceServlet.java:157) at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) at com.sun.enterprise.web.AdHocContextValve.invoke(AdHocContextValve.java:114) 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) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:87) at 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) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1096) at org.apache.catalina.core.StandardEngineValve.invoke(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) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1096) at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:288) at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:647) at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:579) at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:831) at 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.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214) at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265) at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106) Caused by: java.lang.IllegalArgumentException: interface com.sun.xml.ws.developer.WSBindingProvider is not visible from class loader at java.lang.reflect.Proxy.getProxyClass(Proxy.java:353) at java.lang.reflect.Proxy.newProxyInstance(Proxy.java:581) at com.sun.xml.ws.client.WSServiceDelegate.createEndpointIFBaseProxy(WSServiceDelegate.java:591) at com.sun.xml.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:329) at com.sun.xml.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:311) at com.sun.xml.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:304) at javax.xml.ws.Service.getPort(Service.java:92) at com.kebok.ais.bedmanagement.ejb.BedHistoryManagerBeanService.getBedHistoryManagerBeanPort(BedHistoryManagerBeanService.java:56) at com.kebok.ais.billing.server.ejb.impl.ChargeManagerBean.autoPostRoomCharges(ChargeManagerBean.java:108) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at 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) ... 63 more

+1

당신의 접근 방식은 유효하지만 예외를 제공하는 ... 프로젝트 A로부터 프로젝트 B를 참조 에 의해 에게 웹 서비스 참조를 생성 (그리고하지 마십시오 추적) 문제를 진단하는 데 도움이됩니다. –

+0

파스칼은 맞습니다 ... 스택 추적 정보는 진단에 정말로 유용합니다. – vkraemer

답변

1

당신의 접근 방식이 올바른 소리를합니다.

사전 배포 된 원격 서비스 tutorial about creating a web service client을 읽을 수 있습니다.

  1. 가 (프로젝트 B에, 내 생각 ) 서비스를 개발 : 일어날 수

    한 것은 당신이 제대로 클라이언트 참조 ... 난 것

    을 만든 것입니다. 호스트 B. 위에

  2. (프로젝트 B에서) 서비스를 배포

  3. , 당신은 호스트에서 검색 WSDL을 사용하여 B에 배포 서비스에 프로젝트 A의 웹 서비스 참조를 만들 B.는

+0

@vkraemer wsdl을 사용하여 B에 대한 참조를 만들었습니다. 그렇지 않으면 A와 B간에 종속성이 없습니다. 튜토리얼을 사용하여 웹 서비스에 액세스 할 수 있습니다. 나는 서블릿 대신 EJB를 사용하기 위해 그것을 수정해야한다. 나는 그것에게 시도를주고, 그것이가는 방법을 말할 것이다. 건배 – missionE46

+0

이 질문에 대한 해결책은 http://stackoverflow.com/questions/2777147/how-can-i-invoke-a-webservice-from-another-webservice와 같습니다. – missionE46

관련 문제