Hi there,
I was wondering if anyone could help me with spring annotations, I seem to
have having some problems.

I'm trying to inject my UserService into a CustomAuthenticatedWebSession I
wrote to do validation for my pages.

I get a NPE when I hit any page because my bean does not seem to have been
injected.

Here's my AuthenticatedWebSession Class:

public class CustomAuthenticatedWebSession extends AuthenticatedWebSession{
    private static final long serialVersionUID = 4713195500103052768L;

    @SpringBean(name="userService")
    transient private UserService userService;
    public void setUserService(final UserService userService){
        this.userService = userService;
    }

    transient private String currentUser = null;

    public CustomAuthenticatedWebSession(final Request request){
        super(request);
    }

    @Override
    public boolean authenticate(final String username, final String
password){
        currentUser = username;
        return userService.authenticate(username, password);
    }

    @Override
    public Roles getRoles(){
        return userService.getRoles(currentUser, isSignedIn());
    }
}


my applicationContext.xml file:

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans";
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
    xmlns:aop="http://www.springframework.org/schema/aop";
    xmlns:tx="http://www.springframework.org/schema/tx";
    xmlns:context="http://www.springframework.org/schema/context";
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
        http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
        http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
        http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
    "
>
    <bean id="wicketApplication"
class="uk.co.company.product.presentation.wicket.app.WicketApplication" />

    <bean id="placeholderConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="ignoreUnresolvablePlaceholders" value="false" />
        <property name="systemPropertiesModeName"
value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
        <property name="ignoreResourceNotFound" value="false" />
        <property name="locations">
            <list>
                <value>classpath*:/application.properties</value>
            </list>
        </property>
    </bean>

    <bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property
name="driverClassName"><value>${jdbc.driver}</value></property>
        <property name="url"><value>${jdbc.url}</value></property>
        <property name="username"><value>${jdbc.username}</value></property>
        <property name="password"><value>${jdbc.password}</value></property>
    </bean>

    <tx:annotation-driven transaction-manager="txManager" />

    <bean id="txManager"

class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory">
            <ref bean="sessionFactory" />
        </property>
    </bean>

<!--
    <bean id="interceptor"
class="org.springframework.orm.hibernate3.HibernateInterceptor">

    </bean>
-->

    <bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="hibernateProperties">
            <props>
                <!-- <prop key="hibernate.hbm2ddl.auto">create</prop> -->
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <prop key="hibernate.connection.pool_size">5</prop>
                <prop
key="hibernate.current_session_context_class">thread</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop
key="hibernate.cglib.use_reflection_optimizer">true</prop>
                <prop
key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
                <prop
key="hibernate.hibernate.cache.use_query_cache">true</prop>
            </props>
        </property>
        <!-- <property name="entityInterceptor"><ref bean="interceptor"
/></property> -->
        <property name="packagesToScan"><list>
            <value>uk.co.company.product.persistance.hibernate</value>
        </list></property>
    </bean>
    <context:component-scan base-package="uk.co.company.product" />

</beans>


and web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app
    xmlns="http://java.sun.com/xml/ns/j2ee";
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
    xsi:schemaLocation="
        http://java.sun.com/xml/ns/j2ee
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd
    "
    version="2.4"
>
    <display-name>ZenTemplate</display-name>
    <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>
    <filter>
        <filter-name>opensessioninview</filter-name>

<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
    </filter>
    <filter>
        <filter-name>wicket-spring-hibernate</filter-name>

<filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
        <init-param>
            <param-name>applicationFactoryClassName</param-name>

<param-value>org.apache.wicket.spring.SpringWebApplicationFactory</param-value>
        </init-param>
        <init-param>
            <param-name>applicationClassName</param-name>

<param-value>uk.co.company.product.presentation.wicket.app.WicketApplication</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>opensessioninview</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>wicket-spring-hibernate</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

Also here is my simple service:

@Service("userService")
public class UserService{

    final private TestUserService testUserService = new TestUserService();

    public UserService(){
        super();
    }

    @Transactional
    final public boolean authenticate(final String userName, final String
password){
        return testUserService.authenticate(userName, password);
    }

    @Transactional
    final public Roles getRoles(final String userName, final boolean
signedIn){
        return testUserService.getRoles(userName, signedIn);
    }
}


If anyone has any ideas please let me know!

Cheers,
Adam

Reply via email to