わかった。コード例を見ると意味があります。ここでは、JBoss管理ガイドから抽出したStatefulEndpointWebServiceの例を示します。
@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サービスクライアントは2つの別々のポートを作成します
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機能が有効になります。
作成した2つのポートのステートフル性を示すコードは次のとおりです。
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からのアイテムは取得しないことに注意してください。これが状態を与えるものです。