Java 如何从另一个web服务调用一个web服务(在同一场战争中)

Java 如何从另一个web服务调用一个web服务(在同一场战争中),java,web-services,glassfish,jax-ws,Java,Web Services,Glassfish,Jax Ws,上下文:应用服务器是Glassfish 3.1.2。技术是javaeejax-WS。IDE是Netbeans 7.1.1 我使用wsimport从WSDL开始创建了两个web服务。EJB也不是。它们都使用@WebService注释。他们都生活在同一场战争中(不确定这是否相关,但可能相关)。使用SOAP-UI作为客户端,我可以非常愉快地单独部署和测试这两个服务 现在我想让WebService1在运行时调用WebService2。我不想仅仅使用java(可以说是本地的)调用webservice2的i

上下文:应用服务器是Glassfish 3.1.2。技术是javaeejax-WS。IDE是Netbeans 7.1.1

我使用wsimport从WSDL开始创建了两个web服务。EJB也不是。它们都使用@WebService注释。他们都生活在同一场战争中(不确定这是否相关,但可能相关)。使用SOAP-UI作为客户端,我可以非常愉快地单独部署和测试这两个服务

现在我想让WebService1在运行时调用WebService2。我不想仅仅使用java(可以说是本地的)调用webservice2的impl——我想将webservice2作为一个webservice正确地调用,以便创建一个更松散的耦合

在IDE中,我可以使用提供的“生成代码:web服务调用操作”功能生成web服务调用所需的代码。这添加了一个@webservicef(wsdlLocation=“WEB-INF/wsdl/servicename.wsdl”)和一些代码来创建端口并调用目标webservice操作

    // Call Web Service Operation
   Identity port = service.getIdentityPort();
   String req = "";
   javax.xml.ws.Holder<StructureMessageHeader> idHeader = new javax.xml.ws.Holder<StructureMessageHeader>();
   String result = port.getIdentifier(req, idHeader);
//调用Web服务操作
标识端口=service.getIdentityPort();
字符串req=“”;
javax.xml.ws.Holder idHeader=new javax.xml.ws.Holder();
字符串结果=port.getIdentifier(req,idHeader);
这可以很好地编译,但在运行时失败。部署是成功的,各个服务都已启动并且总体上都很满意(只要您不调用此代码),但是当一个Web服务尝试调用另一个Web服务时,我会得到一个

ClientTransportException:服务器发送了HTTP状态代码404:未找到。

详情如下

有人知道为什么会这样吗?我哪里出错了?我忽略了什么

任何帮助,非常感谢

------------------------例外情况---------------------


com.sun.xml.ws.client.ClientTransportException:服务器在com.sun.xml.ws.transport.HTTP.client.HttpTransportPipe.checkStatusCode(HttpTransportPipe.java:321)的com.sun.xml.ws.transport.HTTP.client.HttpTransportPipe.createResponsePacket(HttpTransportPipe.java:270)上发送了HTTP状态代码404:找不到在com.sun.xml.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:228)在com.sun.xml.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:143)在com.sun.xml.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:110)在com.sun.xml.ws.api.pipe.Fiber.\uu doRun(Fiber.java:961)com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:910)com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:873)com.sun.xml.api.pipe.Fiber.runSync(Fiber.java:775)com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.process(AbstractTubeImpl.java:116)com.sun.enterprise.security.webservices.ClientSecurityType.ProcessSecurityRequestcom.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:119)com.sun.xml.ws.api.pipe.Fiber.\uu-doRun(Fiber.java:961)com.sun.xml.api.pipe.Fiber.\u-doRun(Fiber.java:961)com.sun.xml.ws.api.pipe.Fiber.\u-doRun(Fiber.java:910)com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:873)com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:775)com.sun.xml.ws.client.Stub.process(Stub.java:429)com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:168)com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:119)调用com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:102)com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:151)com.soagrowers.r20121231.product.master.services.ProductsEntityService.createProduct(ProductsEntityService.java:138)的$Proxy219.getIdentifier(未知源)位于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)位于org.glassfish.webservices.InstanceResolverImpl$1.invokecom.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:149)com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:94)com.sun.xml.ws.api.pipe.Fiber.u doRun(Fiber.java:961)com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:910)com.sun.xml.xml.ws.ws.api.pipe.Fiber.doRun(Fiber.java:873)com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:775)com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.process(AbstractTubeImpl.java:116)org.glassfish.webservices.MonitoringPipe.process(MonitoringPipe.java:142)com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:119)com.sun.xml.ws.api.api.pipe.Fiber.\uu doRun(Fiber.java:961)在com.sun.xml.ws.api.pipe.Fiber._-doRun(Fiber.java:910)在com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:873)在com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.process(AbstractTubeImpl.java:116)上com.sun.enterprise.security.webservices.commonServerSecurityType.processRequest(commonServerSecurityType.java:212)com.sun.enterprise.security.webservices.commonServerSecurityType.process(commonServerSecurityType.java:144)com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:119)com.sun.xml.ws.api.pipe.Fiber.u-doRun(Fiber.java:961)com.sun.xml.ws.api.pipe.Fiber.u-doRun(Fiber.java:910)com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:873)com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:775)com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:386)com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:640)com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:263)com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:163)org.g
public static void main(String[] args) {
    /* Create the service instance */
    CalculatorService service = new CalculatorService();
    CalculatorDelegate delegate = service.getCalculatorPort();

    /* Using the web service, perform the 4 calculations */
    System.out.println("1. 3+7=" + delegate.add(3, 7));
    System.out.println("2. 12-2=" + delegate.subtract(12, 2));
    System.out.println("3. 9*9=" + delegate.multiply(9, 9));
    System.out.println("4. 40/2=" + delegate.divide(40, 2));
}