路径的SOAP注释

时间:2015-04-14 13:18:22

标签: java web-services soap

我需要管理Webservice URL中的不同版本。我在Web服务中使用SOAP和REST中的常用方法,当我尝试在endPoint类中获取路径时,我得到了正确的REST路径,但不是SOAP(在这种情况下我得到了null),任何人如何获得肥皂的路径? 网址如下:http://localhost:8083/webService/v1/test,代码为:

@Stateless
@WebService(endpointInterface = "ItestgEndpoint", serviceName="testService")
@Component("testEndpoint")
@Path("/webService")
@Consumes({MediaType.APPLICATION_XML})
@Produces({MediaType.APPLICATION_XML})
public class TestEndpoint implements ItestgEndpoint{
    @PUT
    @Path("/{version}/test")
    @Consumes({MediaType.APPLICATION_XML })
    @Produces({MediaType.APPLICATION_XML })
    @WebResult(name="testResponse")
    public testResponse testEvent(@WebParam(targetNamespace="http://test/web", name="message") 
            @RequestParam MessageClass message,
            @WebParam(name="version") @PathParam("version") String version
        ) throws TimeoutException, EMSException, ValidationException, AuthenticationException {
         logger.info(version);
  }

我看过这篇文章SOAP and REST Webservice with one implementation in Java EE,但它没有解决我的问题。

由于

1 个答案:

答案 0 :(得分:1)

SOAP没有"路径"像REST一样。根据您使用的服务工具包(CXF,axis,...),您可能需要收集请求中的信息,您可以从soap消息的传输机制中提取该信息。这可能是也可能不适用。

通常,您将SOAP服务连接到配置中的路径。例如,在轴中,您在web.xml中设置soap servlet调度程序,同样适用于cxf。然后将实际服务连接到beans.xml或services.wsdd。

SOAP处理程序通过端点名称查找服务,然后将调用发送到该端点,该端点将调度到正确的方法。该方法位于传输的SOAP头中,而不是URI中。

在REST中,目标服务/方法的标识位于URI中,而不是XML中。

因此,在我看来,对于SOAP,这是通过声明和布线是静态的,而在REST中,您可以将版本作为路径参数。

更新:因为如果你只是努力尝试一切都可能:-)你可以重写调度程序代码以允许SOAP上的额外路径参数,也许可用的包允许某种拦截器类,允许你重写SOAP标头指向另一个端点,具体取决于您创建的标头属性。