【Axis2】Axis2 で、クライアント・スタブから、Cookie を設定する

はじめに

http://blogs.yahoo.co.jp/dk521123/33096209.html
で、Axis2での Cookie の値を取得することはできたが、
Axis2 で、Cookie を設定する方法が不明だったため、調べた。

構文

http://mail-archives.apache.org/mod_mbox/axis-java-user/200704.mbox/%3C6c029ec80704231718v15f74fdfrb1a041b166b88415@mail.gmail.com%3E
より抜粋

Here's one for writing a cookie.

/*
 * This is how to add a custom header, such as a cookie
 */

Header hdr = new Header("Cookie","my_cookie=xyz;");
ArrayList headers = new ArrayList();
headers.add(hdr);
opts = outMsgCtx.getOptions();
opts.setProperty(HTTPConstants.HTTP_HEADERS,headers);

サンプル

http://blogs.yahoo.co.jp/dk521123/32003685.html
のサンプルをベースにしている。
(設定などについては、上記の記事を参照のこと)

Main.java

import java.util.ArrayList;
import java.util.List;

import org.apache.axis2.transport.http.HTTPConstants;
import org.apache.commons.httpclient.Header;

public class Main {
     public static void main(String[] args) {
          try {
               HelloWorldStub stub =
                         new HelloWorldStub("http://localhost:8080/Axis2Sample/services/HelloWorld");
               HelloWorldStub.SayHello request = new HelloWorldStub.SayHello();
               
               // ここ注目
               List<Header> headers = new ArrayList<Header>();
               Header header = new Header(HTTPConstants.HEADER_COOKIE, "CookieKey=Value0001;");
               headers.add(header);

               stub._getServiceClient().getOptions().setProperty(
                         HTTPConstants.HTTP_HEADERS, headers);
               
               request.setName("Bob");
               HelloWorldStub.SayHelloResponse response = stub.sayHello(request);
               System.out.println(response.get_return());
          } catch (Exception ex) {
               ex.printStackTrace();
               System.err.println("\n\n");
          } finally {
          }
     }
}

補足:HTTPConstantsの実際の定数値

 * 以下のサイトを参照のこと
http://axis.apache.org/axis2/java/core/api/constant-values.html#org.apache.axis2.transport.http.HTTPConstants.HEADER_COOKIE

属性の付与には...

 * まだちゃんと試していないが、「secure属性」「HttpOnly属性」などを付与するにはどうすれべきか?

方法1

 * コードで明示的に書く?

Header header = new Header(HTTPConstants.HEADER_COOKIE, "CookieKey=Value0001; HttpOnly; secure");

方法2

 * Tomcatであれば、server.xmlで設定する?

<session-config>
  <cookie-config>
    <http-only>true</http-only>
    <secure>true</secure>
  </cookie-config>
</session-config>
Tomcat のセッション ID に HttpOnly 属性と secure 属性を付与する
http://www.websec-room.com/2013/03/01/306

自分へのメモ

 * クッキーだけでなく、ヘッダーを修正するのに使えそう

関連記事

Axis2 のクライアント・スタブで、タイムアウト時間を変更するには...

本記事を調べていたおかげで、タイムアウト時間変更にも役立った
http://blogs.yahoo.co.jp/dk521123/33139822.html

クッキー(Cookie

 * クッキーについては、以下の関連記事を参照のこと
http://blogs.yahoo.co.jp/dk521123/28437833.html