Некоторые фона:Как передать AxisConfiguration к AxisServlet при встраивании в Jetty
Я пытаюсь использовать взаимную проверку подлинности SSL для некоторых Axis2 услуг мы обнажая. Проблема в том, что встроенный сервер 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();
Проблема с этим подходом является то, что метод Init (ServletConfig) из AxisServlet никогда не называют, так что я получаю исключение NullPointer всякий раз, когда я пытаюсь для вызова службы на 8080:
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 paremeters и не вызывает метод init (ServletConfig config) на сервлет? Я подтвердил с помощью отладчика, что он никогда не вызывается.
Я хорошо с загрузкой ConfigurationContext, он отлично работает. Проблема в том, что, как только я это сделаю, у меня нет способа установить его в AxisServlet. –
Добавлена часть конфигурации AxisServlet для ответа. – jayalalk
Есть ли способ сделать это программно? Я не использую no2.xml и web.xml. Просто встроенный Jetty и код начальной загрузки.Я попытаюсь передать эти 2 параметра в Jetty ServletHolder и сообщить вам, как это происходит. –