0

所以阅读 JBoss 管理指南,我看到 WS-addressing 用于创建“有状态端点”。

我知道 WS-addressing 创建了一个标准,用于在 Web 服务的 SOAP 标头中指定消息传递路由数据……但我不确定这与端点状态有何关系。

以下是来自维基百科的内容:

WS-Addressing 通过指定一个公共 SOAP 标头 (wsa:ReplyTo) 来支持异步交互的使用,该标头包含要向其发送响应的端点引用 (EPR)。服务提供者通过单独的连接将响应消息传输到 wsa:ReplyTo 端点。这将 SOAP 请求/响应交互的生命周期与 HTTP 请求/响应协议的生命周期分离,从而实现可以跨越任意时间段的长时间运行的交互。

因此wsa:ReplyTo,您可以异步执行操作,因为即使 HTTP 请求已完成,您也有办法将响应发送到正确的位置。

我仍然看不到“状态”的来源。

对此有何见解?

4

1 回答 1

0

我现在明白了。当您查看代码示例时,这是有道理的。以下是从 JBoss Admin 指南中提取的 StatefulEndpoint WebService 示例:

@WebService(name = "StatefulEndpoint", targetNamespace = "http://org.jboss.ws/sam ples/wsaddressing", serviceName = "TestService")
@Addressing(enabled=true, required=true)
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class StatefulEndpoint implements StatefulEndpoint, ServiceLifecycle
{
@WebMethod
public void addItem (String item )
{ ... }
@WebMethod
public String getItemsInCart()
{ ... }
}

然后 Web 服务客户端创建两个单独的端口

port1 = (StatefulEndpoint)service.getPort(StatefulEndpoint.class, new
javax.xml.ws.soap.AddressingFeature());
port2 = (StatefulEndpoint)service.getPort(StatefulEndpoint.class, new
javax.xml.ws.soap.AddressingFeature());

将新的 AddressingFeature 传入 getPort 函数将启用 WS 寻址功能。

这是演示我们刚刚创建的两个端口的状态的代码:

public class AddressingStatefulTestCase extends JBossWSTest
{
...
public void testAddItem() throws Exception
{
port1.addItem ("Ice Cream ");
port1.addItem ("Ferrari");
port2.addItem ("Mars Bar");
port2.addItem ("Porsche");
}
public void testGetItems() throws Exception
{
String items1 = port1.getItems();
assertEquals("[Ice Cream , Ferrari]", item s1);
String items2 = port2.getItems();
assertEquals("[Mars Bar, Porsche]", item s2);
}
}

请注意,port1 添加的项目与 port2 不同,但是当 port1 调用 getItems... 时,它只获取它添加的项目,而不是来自 port2 的项目。这就是赋予它状态的原因。

于 2012-09-10T14:20:21.873 回答