所以阅读JBoss管理指南我看到WS-addressing用于创建“有状态端点”。
据我所知,WS-addressing创建了一个标准,用于在Web服务的SOAP头中指定消息传递路由数据......但我不确定它与端点状态的关系。
以下是维基百科的内容:
WS-Addressing支持使用异步交互 指定包含的公共SOAP标头(wsa:ReplyTo) 要将响应发送到的端点引用(EPR)。该 服务提供商通过单独的传输响应消息 连接到wsa:ReplyTo端点。这解耦了生命周期 HTTP生命周期中的SOAP请求/响应交互 请求/响应协议,从而实现长时间运行的交互 可以跨越任意时间段。
因此,wsa:ReplyTo
使您能够异步执行操作,因为即使HTTP请求完成,您也可以将响应放到正确的位置。
我仍然没有看到“州”的位置。
对此有何见解?
答案 0 :(得分: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-addressing功能。
以下代码演示了我们刚刚创建的两个端口的状态:
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的项目。这就是给它状态的原因。