デフォルトでJAX-WS
は、Webサービスとクライアントはステートレスです。クライアントが要求を行うと、サーバーは応答し、セッションに参加している場合は接続にCookieを設定します。ただし、JAX-WS
クライアントはそのCookieを無視し、サーバーは後続のリクエストを新しいインタラクションとして扱います。セッションが有効になっている場合、JAX-WS
サーバーがクライアントセッションを追跡できるように、クライアントは後続の各要求で同じCookieを送信します。
したがって、WebサービスでCookieまたはHTTPセッションを使用しないでください。応答の一部としてトークンIDを返します。その後、クライアントはそれを次のリクエストと一緒に送信できます。
ともかく:
JAX-WS Webサービスクライアントは、プロパティを使用してセッション情報(Cookieなど)を維持するように構成する必要がありますjavax.xml.ws.session.maintain
。他のWebサービススタックにも同様のメカニズムがある場合があります。
サーバー側
JAX-WSは、Javaプラットフォームの共通アノテーション(JSR 250)で定義されたいくつかの便利なアノテーションを使用して、Webサービスコンテキストを挿入し、ライフサイクルメソッドを宣言します。
WebServiceContext
提供されているリクエストに関連するコンテキスト情報を保持します。
を実装する必要はありませんjavax.xml.rpc.server.ServiceLifecycle
。WebサービスでJAX-WS
は、フィールドまたはメソッドに。でマークを付けるだけです@Resource
。type要素はまたはのいずれjava.lang.Object
かでなければなりませんjavax.xml.ws.WebServiceContext
。
@WebService
public class HelloWorld {
@Resource
private WebServiceContext wsContext;
public void sayHello(){
MessageContext mc = wsContext.getMessageContext();
HttpSession session = ((javax.servlet.http.HttpServletRequest)mc.get(MessageContext.SERVLET_REQUEST)).getSession();
}
}