路径的 SOAP 注释
SOAP annotation for path
我需要管理 Web 服务 URL 中的不同版本。我在 SOAP 和 REST 的 Web 服务中使用了一个通用方法,当我试图在端点 class 中获取路径时,我得到了正确的 REST 路径,但不是 SOAP(我在这个中得到了一个 null案例),有人如何获得肥皂的路径吗?
url 看起来像: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);
}
我看到了这个 post SOAP and REST Webservice with one implementation in Java EE,但是它没有解决我的问题。
谢谢
SOAP 不像 REST 那样 "path"。根据您使用的服务工具包(CXF、轴等),您可能需要收集请求中的信息,您可以从 soap 消息的传输机制中提取这些信息。这可能对您可用,也可能不可用。
通常,您将 SOAP 服务连接到配置中的路径。例如,在 axis 中,您在 web.xml 中设置 soap servlet 调度程序,对于 cxf 也是如此。然后将实际服务连接到 beans.xml 或 services.wsdd。
SOAP 处理程序通过端点的名称查找服务,然后将调用发送到该端点,该端点将其分派到正确的方法。该方法在传输的 SOAP header 中,而不是在 URI 中。
在 REST 中,目标 service/method 的标识在 URI 中,而不是在 XML 中。
因此,在我看来,对于 SOAP,这是通过声明进行的,并且连接是静态的,而在 REST 中,您可以将版本作为路径参数。
更新:如果你足够努力,一切皆有可能:-)你可以重写调度程序代码以允许在 SOAP 上使用额外的路径参数,也许可用的包允许某种拦截器 class,这允许您重写 SOAP header 以指向另一个端点,具体取决于您发明的 header 属性。
我需要管理 Web 服务 URL 中的不同版本。我在 SOAP 和 REST 的 Web 服务中使用了一个通用方法,当我试图在端点 class 中获取路径时,我得到了正确的 REST 路径,但不是 SOAP(我在这个中得到了一个 null案例),有人如何获得肥皂的路径吗? url 看起来像: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);
}
我看到了这个 post SOAP and REST Webservice with one implementation in Java EE,但是它没有解决我的问题。
谢谢
SOAP 不像 REST 那样 "path"。根据您使用的服务工具包(CXF、轴等),您可能需要收集请求中的信息,您可以从 soap 消息的传输机制中提取这些信息。这可能对您可用,也可能不可用。
通常,您将 SOAP 服务连接到配置中的路径。例如,在 axis 中,您在 web.xml 中设置 soap servlet 调度程序,对于 cxf 也是如此。然后将实际服务连接到 beans.xml 或 services.wsdd。
SOAP 处理程序通过端点的名称查找服务,然后将调用发送到该端点,该端点将其分派到正确的方法。该方法在传输的 SOAP header 中,而不是在 URI 中。
在 REST 中,目标 service/method 的标识在 URI 中,而不是在 XML 中。
因此,在我看来,对于 SOAP,这是通过声明进行的,并且连接是静态的,而在 REST 中,您可以将版本作为路径参数。
更新:如果你足够努力,一切皆有可能:-)你可以重写调度程序代码以允许在 SOAP 上使用额外的路径参数,也许可用的包允许某种拦截器 class,这允许您重写 SOAP header 以指向另一个端点,具体取决于您发明的 header 属性。