手順
[1] & [2]
[1] 証明書を用意する [2] Tomcat で SSL通信を実現(server.xmlの修正) については、以下の記事に記載。http://blogs.yahoo.co.jp/dk521123/31967584.html
[3] Axis2 で HTTPSに対応する(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.htmlhttp://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>