0

背景:

公開している一部の Axis2 サービスに SSL 相互認証を使用しようとしています。問題は、Axis2 組み込みサーバーがそれをサポートしていないことです。そのため、組み込みの Jetty を使用してそれを実現し、それに AxisServlet をデプロイしたいと考えています。

問題:

AxisConfiguration (利用可能なすべてのサービスの定義を含む) をサーブレットに直接渡す方法はないようです。

私がそれをやろうとしている方法:

ConfigurationContext context = ConfigurationContextFactory.createDefaultConfigurationContext();

File serviceArchiveFile = new File("<path to my aar file which is loaded properly>");
AxisServiceGroup serviceGroup = DeploymentEngine.loadServiceGroup(serviceArchiveFile, context);

AxisConfiguration axiConfiguration = context.getAxisConfiguration();
axiConfiguration.addServiceGroup(serviceGroup);

AxisServlet axisServlet = new AxisServlet();

Server server = new Server(8080);
org.mortbay.jetty.servlet.Context root = new org.mortbay.jetty.servlet.Context(server,"/",org.mortbay.jetty.servlet.Context.SESSIONS);
ServletHolder holder=new ServletHolder(axisServlet);

// Trying to pass the Config context via the parameters map
Map parameters = new HashMap();
parameters.put(AxisServlet.CONFIGURATION_CONTEXT, context);
holder.setInitParameters(parameters);

root.addServlet(holder,"/services/*");

server.start();

このアプローチの問題は、AxisServlet の init(ServletConfig) メソッドが呼び出されないため、8080 でサービスを呼び出そうとするたびに nullPointer 例外が発生することです。

java.lang.NullPointerException
  at org.apache.axis2.transport.http.AxisServlet.initContextRoot(AxisServlet.java:586)
  at org.apache.axis2.transport.http.AxisServlet.preprocessRequest(AxisServlet.java:605)
  at org.apache.axis2.transport.http.AxisServlet.doGet(AxisServlet.java:241)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
  at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:442)
  at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:356)
  at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:226)
  at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:615)
  at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:141)
  at org.mortbay.jetty.Server.handle(Server.java:265)
  at org.mortbay.jetty.HttpConnection.handlerRequest(HttpConnection.java:420)
  at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:666)
  at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:487)
  at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:197)
  at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:336)
  at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:183)
  at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:475)

Axis2 ソース コードによると、これは、構成コンテキストが AxisServlet に設定されていないために発生します。したがって、大きな問題は次のとおりです。

1) AxisServlet で構成コンテキストを直接設定することは可能ですか? 私はそうする方法を見つけられませんでした

2) Jetty が init パラメータを送信せず、サーブレットで init(ServletConfig config) メソッドを呼び出さないのはなぜですか? 呼び出されないことをデバッガーで確認しました。

4

2 に答える 2

1

構成コンテキストをロードする場合は、以下のようにファイル システムから構成コンテキストを直接ロードしてみてください。

ConfigurationContext myConfigContext = ConfigurationContextFactory.createConfigurationContextFromFileSystem("", "axis2.xml への絶対パス");

詳細: http ://wso2.com/library/585/

私はあなたの質問の一部に答えたと思います。

また、axis2 構成を AxisServlet にロードするには、以下の構成を web.xml に追加します。

<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.url</param-name>
<param-value>path to you axis2.xml</param-value>
<param-name>axis2.repository.url</param-name>
<param-value>path to your repo</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
于 2014-01-16T17:14:47.737 に答える