2015-01-30 4 views
3

Struts 2 프레임 워크를 배우고 있습니다. 재미 있습니다. :) 그리고 스프링 데이터 프레임 워크를 사용하여 MongoDB 백엔드에 내 웹 앱을 연결하고 싶습니다. 이제는 대개 MongoRepository를 확장하는 저장소를 만든 다음 응용 프로그램에 Autowire로 저장합니다.Struts2에서 스프링 데이터 MongoRepository를 시도하는 중

그러나 이번에는 너무 잘 작동하지 않습니다. 내 저장소가 자동 실행되지 않음을 의미하는 NullPointerExceptions이 계속 나타납니다. 누구가 잘못 될지 생각하고 있습니까?

편집 :

<dependency> 
    <groupId>org.apache.struts</groupId> 
    <artifactId>struts2-spring-plugin</artifactId> 
    <version>2.3.4.1</version> 
</dependency> 

내가 applicationContext.xml을 추가하고 여기에 언급 된 나는 스트럿 - 봄 - 플러그인을 추가 내 pom.xml 파일에서 생각 https://github.com/jseminck/starter-kits/tree/master/struts2.spring

을 설명하는 간단한 GitHub의 예를 생성 내 web.xml 파일에서

의 Web.xml

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath:applicationContext.xml</param-value> 
</context-param> 
<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
,

applicationContext.xml

<context:component-scan base-package="com.jseminck.hello.world" /> 

<!-- Register Mongo Instance --> 
<mongo:mongo id="mongo" host="localhost" port="27017" /> 
<!-- for defining mongo template --> 

<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> 
    <constructor-arg ref="mongo" /> 
    <constructor-arg name="databaseName" value="nortal" /> 
</bean> 

<!-- For defining mongo repository --> 
<mongo:repositories base-package="com.jseminck.hello.world.repository" /> 

@Repository 
public interface HelloWorldRepository extends MongoRepository<HelloWorld, String> { 

} 

내가이 작업을 얻기 위해 아무것도 실종 HelloWorldRepository? 인스턴스화 될 것으로 예상되는 Bean에서 메소드를 호출 할 때 NullPointerException이 발생합니다.

java.lang.NullPointerException 
    com.jseminck.struts2.HelloAction.execute(HelloAction.java:20) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:606) 
    com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:453) 
    com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:292) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:255) 
    org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
    com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176) 
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
    com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265) 
    org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) 
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
    com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:236) 
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:236) 
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
    com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
    org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
    org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:90) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
    org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
    com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
    com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
    com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
    com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171) 
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
    com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
    org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
    com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:192) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
    com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
    org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54) 
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:511) 
    org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) 
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) 

감사합니다, 요아킴

+0

조치 또는 다른 bean을 자동 응답 하시겠습니까? –

+0

다른 bean을 Autowire합니다 (이 경우, MongoRepository - 그러나, applicationContext에 정의 된 bean을 얻지 못합니다). –

+0

일한다는 것은 무엇을 의미합니까? –

답변

0

당신은 Struts2를 지시하는 것을 잊었다 대한 ObjectFactory를로 Spring을 사용 :

<constant name="struts.objectFactory" value="spring" /> 

<package ...> 

:

이 struts.xml 구성에서 다음과 같은 상수를 넣어 this answer에 대한 추가 정보, 내가 이미 알고 있기는하지만, 나머지 구성은 괜찮아 보입니다.

+0

그래, 나는 이미이 옵션을 가지고 있었다. (그러나 나의 가치 org.apache.struts2.spring.StrutsSpringObjectFactory). 내 applicationContext에서 콩이 인식되고 있다고 확신합니다 (잘못된 패키지/클래스 이름을 주면 ClassNotFoundError가됩니다). 나는 단지 응용 프로그램에서 @Autowire를 관리 할 수 ​​없습니다. –

+0

당신은 당신이 무엇을 대답하는지 모른다. –

+1

당신은 * 당신이 대답하고 있다는 것을 모릅니다. BTW는 applicationContext에 정의 된 bean을 Action (또는 Interceptor)에 autowire하려고하지 않습니까? –

관련 문제