2014-01-16 1 views
0

일부 배경 삽입 할 때 AxisServlet에 AxisConfiguration을 전달하는 방법 : 우리는 노출하고 일부 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의 초기화 (ServletConfig를) 방법은 내가 시도 할 때마다 나는 nullPointer 예외를 얻을 수 있도록 호출하지 않습니다이다 8080에서 서비스를 호출하려면 다음과 같이 설정 컨텍스트가 AxisServlet에 설정하지 않기 때문에

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는 소스 코드에 따르면이 발생합니다. 이제 큰 질문은 다음과 같습니다 :

1) AxisServlet에서 직접 설정 컨텍스트를 설정할 수 있습니까?

2) Jetty가 init 매개 변수를 보내지 않고 서블릿에서 init (ServletConfig config) 메소드를 호출하지 않는 이유는 무엇입니까? 나는 결코 호출되지 않는다는 것을 디버거로 확인했다.

답변

1

구성 컨텍스트를로드하려면 다음과 같이 파일 시스템에서 직접 컨텍스트를로드 할 수 있습니다.

ConfigurationContext myConfigContext = ConfigurationContextFactory.createConfigurationContextFromFileSystem ("", "axis2.xml의 절대 경로");

더 자세히 : http://wso2.com/library/585/

나는 당신의 질문의 일부를 대답했다 생각합니다. 또한

는 AxisServlet에 축 2의 설정을로드 당신이 WebAppContext를 사용해야합니다 간단한 부두를 상황를 사용하는

<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> 
+0

나는 그것이 잘 작동의 ConfigurationContext 로딩 좋은입니다. 문제는 일단 AxisServlet에서 설정할 수 없다는 것입니다. –

+1

AxisServlet 구성 부분을 응답에 추가했습니다. – jayalalk

+0

프로그래밍 방식으로이 작업을 수행 할 수있는 방법이 있습니까? 나는 axis2.xml이나 web.xml을 사용하지 않는다. 방금 내장 된 부두 및 부트 스트랩 코드.Jetty ServletHolder에이 두 매개 변수를 전달하고 이것이 어떻게 진행되는지 알려 드리겠습니다. –

0

대신에 당신의 web.xml에 설정 아래에 추가 할 수 있습니다. 이를 통해 축 2 ConfigurationContext을 부두 문맥에 추가 할 수 있습니다. 이처럼

는 :

Server server = new Server(1111); 
WebAppContext root = new WebAppContext(); 
root.setAttribute(AxisServlet.CONFIGURATION_CONTEXT, context); 
AxisServlet s = new AxisServlet(); 
ServletHolder holder = new ServletHolder(s); 
root.addServlet(holder, "/axis2/*"); 
관련 문제