>
> Hantsy Bai-2 wrote:
>>
>> δΊ 2010/5/22 1:05, rocks ει:
>>> Dear,
>>>
>>> Apologize the posting same subject, but I did not find any solution so
>>> far.
>>> I am developing a web application based on struts 2.1.8.1+ spring 2+
>>> hibernate 3 + tomcat 5.5. There is requisite library like
>>> struts2-convention-plugin-2.1.8.1.jar in my classpath.
>>>
>>> For authentication I am using struts interceptor.
>>> Below are my configuration files.
>>>
>>> struts.xml :=
>>>
>>> <?xml version="1.0" encoding="UTF-8" ?>
>>> <!DOCTYPE struts PUBLIC
>>> "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
>>> "http://struts.apache.org/dtds/struts-2.0.dtd">
>>>
>>>
>>> <struts>
>>> <constant name="struts.objectFactory" value="spring" />
>>> <constant name="struts.devMode" value="false" />
>>> <constant name="struts.action.extension" value="do"/>
>>> <constant name="struts.objectFactory.spring.autoWire"
>>> value="AUTOWIRE_BY_NAME"/>
>>>
>>> <!-- Add packages here -->
>>> <package name="dafault" extends="struts-default">
>>>
>>> <result-types>
>>> <result-type name="tiles"
>>> class="org.apache.struts2.views.tiles.TilesResult" />
>>> </result-types>
>>>
>>> <interceptors>
>>> <interceptor name="loginInterceptor"
>>> class="com.ncr.framework.interceptor.LoginInterceptor"/>
>>>
>>> <interceptor-stack name="capabilityStack">
>>> <interceptor-ref name="defaultStack"/>
>>> <interceptor-ref name="loginInterceptor"/>
>>> </interceptor-stack>
>>>
>>> </interceptors>
>>>
>>> <default-interceptor-ref name="capabilityStack"/>
>>>
>>> <action name="logon" class="loginAction" method="execute">
>>> <result name="success" type="tiles">page.Login</result>
>>> </action>
>>> </package>
>>> </struts>
>>>
>>> applicationContext.xml :-
>>>
>>> <?xml version="1.0" encoding="UTF-8"?>
>>> <!DOCTYPE beans SYSTEM "WEB-INF/spring-beans-2.0.dtd">
>>> <beans>
>>> <bean id="loginAction" scope="prototype"
>>> class="com.ncr.user.actions.LoginAction">
>>> <constructor-arg ref="adminService" />
>>> </bean>
>>> </beans>
>>>
>>> LoginInterceptor.java
>>>
>>> public class LoginInterceptor extends AbstractInterceptor {
>>> public String intercept(ActionInvocation invocation) throws Exception {
>>> ActionContext context = invocation.getInvocationContext();
>>> Map<String, Object> contextMap = context.getContextMap();
>>> HttpServletRequestWrapper request = (HttpServletRequestWrapper)
>>> contextMap
>>> .get(HTTP_REQUEST);
>>> synchronized (request) {
>>> ThreadContext.setRequest(request);
>>> UserInfo userInfo = UserContext.getCurrentUserInfo();
>>>
>>> if (userInfo == null
>>> &&
>>> !"authenticate".equals(contextMap.get(ACTION_NAME))) {
>>> return "logon";
>>> }
>>> return invocation.invoke();
>>> }
>>> }}
>>>
>>> When I hit url http://localhost:8080/mytest/logon.do it throws an error.
>>>
>>> java.lang.RuntimeException: Invalid action class configuration that
>>> references an unknown class named [loginAction]
>>>
>>> org.apache.struts2.convention.ConventionsServiceImpl.determineResultPath(ConventionsServiceImpl.java:100)
>>>
>>> org.apache.struts2.convention.ConventionUnknownHandler.determinePath(ConventionUnknownHandler.java:385)
>>>
>>> org.apache.struts2.convention.ConventionUnknownHandler.handleUnknownResult(ConventionUnknownHandler.java:274)
>>>
>>> com.opensymphony.xwork2.DefaultUnknownHandlerManager.handleUnknownResult(DefaultUnknownHandlerManager.java:76)
>>>
>>> com.opensymphony.xwork2.DefaultActionInvocation.createResult(DefaultActionInvocation.java:215)
>>>
>>> com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:356)
>>>
>>> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:266)
>>>
>>> com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)
>>>
>>>
>>> As per my investigation, I found that ClassLoaderUtils's below method
>>> could
>>> not return class name for 'loginAction'. There should be some way for to
>>> map
>>> 'loginAction' to the class com.ncr.user.actions.LoginAction.
>>>
>>> public static Class loadClass(String className, Class callingClass)
>>> throws ClassNotFoundException {
>>> try {
>>>
>>> return
>>> Thread.currentThread().getContextClassLoader().loadClass(
>>> className);
>>> } catch (ClassNotFoundException e) {
>>> try {
>>> return Class.forName(className);
>>> } catch (ClassNotFoundException ex) {
>>> try {
>>> return
>>> ClassLoaderUtils.class.getClassLoader().loadClass(
>>> className);
>>> } catch (ClassNotFoundException exc) {
>>> return
>>> callingClass.getClassLoader().loadClass(className);
>>> }
>>> }
>>> }
>>> }
>>>
>>> When I remove the entry '<default-interceptor-ref
>>> name="capabilityStack"/>'
>>> from struts.xml then it's working perfectly fine i.e desired page is
>>> coming.
>>>
>>> I also noticed that in the classes variable of
>>> Thread.currentThread().getContextClassLoader()(WebappClassLoader) which
>>> is
>>> private contains class com.ncr.user.actions.LoginAction but i did not
>>> find
>>> any way to get it.
>>>
>>> Your kind guesture is appreciated.
>>>
>>> -Dev
>>>
>> Convention plugin provide annotation configration for struts2 instead of
>> the XML configuration.
>> But it is optional, if you do not use it, there is no need add it to
>> your project. From you provided, I do not know the content of
>> LoginAction.
>>
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
>> For additional commands, e-mail: user-h...@struts.apache.org
>>
>>
>>
>
> Thanks Hantsy for quick reply. Right now I want to work with XML, may be
> switch to annotations later. FYI, when I don't use interceptor it's workly
> perfectly. so it seems there is disconnect with spring object factory and
> ClassLoaderUtils.
>
> Here is content of LoginAction.
>
> package com.ncr.user.actions;
>
> import com.ncr.ncr.module.IAdminModule;
> import com.ncr.user.forms.UserForm;
> import com.opensymphony.xwork2.ActionSupport;
>
> public class LoginAction extends ActionSupport {
> public LoginAction(IAdminModule adminModule) {
> this.adminModule = adminModule;
> userForm = new UserForm();
> }
>
> private UserForm userForm = null;
>
> private IAdminModule adminModule = null;
>
> public UserForm getUserForm() {
> return userForm;
> }
>
> public String execute() throws Exception {
> System.out.println("hello execute");
> return SUCCESS;
> }
> }
>
--
View this message in context:
http://old.nabble.com/Struts2%2BSpring2%2BInterceptor%2BInvalid-action-class-configuration-that-references-an-unknown-class-named-tp28636590p28640776.html
Sent from the Struts - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org