【Axis2】Axis2 を使ったWebサービスで SSL 通信を行う

大まかな手順

 [1] 証明書を用意する
 [2] TomcatSSL通信を実現(server.xmlの修正)
 [3] Axis2HTTPSに対応する(axis2.xmlの修正)

前提

 * 以下で「JDK+Eclipse+Tomcat+Axis2」の設定を行っておくこと
http://blogs.yahoo.co.jp/dk521123/31944955.html

手順

[1] & [2]

 [1] 証明書を用意する
 [2] TomcatSSL通信を実現(server.xmlの修正)

については、以下の記事に記載。
http://blogs.yahoo.co.jp/dk521123/31967584.html

[3] Axis2HTTPSに対応する(axis2.xmlの修正)

 * 「[自分の環境]\axis2-X.X.X\conf」内にある「axis2.xml」を以下のように修正する

修正前

    <!-- ================================================= -->
    <!-- Transport Ins -->
    <!-- ================================================= -->
    <transportReceiver name="http"
                       class="org.apache.axis2.transport.http.SimpleHTTPServer">
        <parameter name="port">8080</parameter>
        <!-- 途中略
        -->
        <!-- <parameter name="threadKeepAliveTimeUnit">MILLISECONDS</parameter>            -->
    </transportReceiver>

修正後

    <!-- ================================================= -->
    <!-- Transport Ins -->
    <!-- ================================================= -->
    <transportReceiver name="http" class= "org.apache.axis2.transport.http.AxisServletListener">  
       <parameter name="port">8080</parameter>
    </transportReceiver>
    <transportReceiver name="https" class= "org.apache.axis2.transport.http.AxisServletListener">  
       <parameter name="port">8443</parameter>
    </transportReceiver>

確認

http://blogs.yahoo.co.jp/dk521123/31944955.html
と同じモジュールを作成し、以下にアクセスしたところ、問題なく表示される。
(ただし、プロジェクト名は「Axis2HelloWorld」にして新規作成)
[http://localhost:8080/Axis2HelloWorld/services/HelloWorld/SayHello?name=Mike]
[https://localhost:8443/Axis2HelloWorld/services/HelloWorld/SayHello?name=Mike]

出力結果

<ns:SayHelloResponse xmlns:ns="">http://axis2.demo">
<ns:return>Hello Mike</ns:return>
</ns:SayHelloResponse>

参考文献

http://all-amit-thinks.blogspot.jp/2012/07/enabling-ssl-for-axis2-web-services.html
http://axis.apache.org/axis2/java/core/docs/servlet-transport.html

トラブルシューティング

上記の設定したにも関わらず「Internal server error」が表示される

概要

 * 上記・手順[3]の設定したにも関わらず、
  以下のURL[1]で、リンク「Services」を押下した際(URL[2])に「Internal server error」が表示される
 * Tomcat のログ「localhost.yyyy-MM-dd.log」を確認したところ、
  例外「ServletException: https is forbidden」が発生している(下記の「例外内容」を参照のこと)
[1] : [https://localhost:8443/axis2/]
[2] : [https://localhost:8443/axis2/services/listServices]

例外内容

* Tomcat log「localhost.yyyy-MM-dd.log」より
SEVERE: サーブレット AxisServlet のServlet.service()が例外を投げました
javax.servlet.ServletException: https is forbidden
	at org.apache.axis2.transport.http.AxisServlet.preprocessRequest(AxisServlet.java:637)
	at org.apache.axis2.transport.http.AxisServlet.doGet(AxisServlet.java:247)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
        ... 略 ...
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Unknown Source)

原因

 * [Tomcatを設定しているパス]\webapps\axis2\WEB-INF\conf(例「C:\tomcat6\webapps\axis2\WEB-INF\conf」)
 の配下にある「axis2.xml」が、上記・手順[3]の設定を行っていないため

解決策[1]

 * [Tomcatを設定しているパス]\webapps\axis2\WEB-INF\conf(例「C:\tomcat6\webapps\axis2\WEB-INF\conf」)
 の配下にある「axis2.xml」を、上記・手順[3]の通りに設定する

解決策[2]

 * [Tomcatを設定しているパス]\webapps\axis2\WEB-INF\(例「C:\tomcat6\webapps\axis2\WEB-INF\」)
 の配下にある「web.xml」の「init-param」の「axis2.xml.path」の「param-value」の値を
 手順[3]で修正した「axis2.xml」に合わせる

解決策[2]のweb.xml

■修正前
<display-name>Apache-Axis2</display-name>
<servlet>
    <servlet-name>AxisServlet</servlet-name>
    <display-name>Apache-Axis Servlet</display-name>
    <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
    <!--<init-param>-->
    <!--<param-name>axis2.xml.path</param-name>-->
    <!--<param-value>/WEB-INF/conf/axis2.xml</param-value>-->
    <!--略-->
    <!--</init-param>-->
    <load-on-startup>1</load-on-startup>
</servlet>

■修正後
<display-name>Apache-Axis2</display-name>
<servlet>
    <servlet-name>AxisServlet</servlet-name>
    <display-name>Apache-Axis Servlet</display-name>
    <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
    <init-param><!--★コメント外した★-->
    <param-name>axis2.xml.path</param-name><!--★コメント外した★-->
    <param-value>C:/pg/axis2-1.6.2/conf/axis2.xml</param-value><!--★コメント外し、パスを修正★-->
    <!--略-->
    </init-param><!--★コメント外した★-->
    <load-on-startup>1</load-on-startup>
</servlet>