tags:

views:

86

answers:

2

I'm trying out my first Spring project and must be doing something really stupid because I can't figure out how to get the following simple snippet of code to work:

Here is my definition 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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"&gt;

    <bean id="AWSProperties" class="com.addy.server.queue.AWSProperties" scope="singleton">
      <property name="awsAccessKey" value="test1"/>
      <property name="awsSecretKey" value="test2"/>
      <property name="awsSQSQueueName" value="testqueue"/>
    </bean>

    <bean id="QueueService" class="com.addy.server.queue.QueueService">
     <constructor-arg ref="AWSProperties"/>
    </bean>

</beans>

And my two simple beans:

public class AWSProperties {

    private String awsAccessKey;
    private String awsSecretKey;
    private String awsSQSQueueName;


    public void setAwsAccessKey(String awsAccessKey) {
     awsAccessKey = awsAccessKey;
    }

    public String getAwsAccessKey() {
     return awsAccessKey;
    }

    public void setAwsSecretKey(String awsSecretKey) {
     awsSecretKey = awsSecretKey;
    }

    public String getAwsSecretKey() {
     return awsSecretKey;
    }

    public void setAwsSQSQueueName(String awsSQSQueueName) {
     awsSQSQueueName = awsSQSQueueName;
    }

    public String getAwsSQSQueueName() {
     return awsSQSQueueName;
    }

}

public class QueueService {

    private AWSProperties properties;



    public QueueService(AWSProperties properties)
    {
     this.properties = properties;
    }


    public void receiveMessage()
    {
     System.out.println(properties.getAwsAccessKey());
    }

}

When I run the following snippet I get "null" when I am expecting "test1"

   public class VMMConsumer {





    public static void main(String[] args) 
    {


     ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"VMMConsumer.xml"});


     QueueService service = (QueueService)context.getBean("QueueService");

     service.receiveMessage(); 

    }
}
+2  A: 

Nevermind it was something really dumb. My setters weren't correct -- thats what I get for using the eclipse auto generate.

Fix:

public class AWSProperties {

private String awsAccessKey;
private String awsSecretKey;
private String awsSQSQueueName;


public void setAwsAccessKey(String awsAccessKey) {
    this.awsAccessKey = awsAccessKey;
}

public String getAwsAccessKey() {
    return awsAccessKey;
}

public void setAwsSecretKey(String awsSecretKey) {
   this.awsSecretKey = awsSecretKey;
}

public String getAwsSecretKey() {
    return awsSecretKey;
}

public void setAwsSQSQueueName(String awsSQSQueueName) {
    this.awsSQSQueueName = awsSQSQueueName;
}

public String getAwsSQSQueueName() {
    return awsSQSQueueName;
}

}

Ish
I've never had problems using Eclipse's auto getter/setter code generation with Spring. Actually I exclusively use it and all of my code is Spring injected.
Nick
+5  A: 

This is a case where using final on parameters would have helped.

You can set Eclipse to add Final to parameters as a Save Action.

Mind you - you won't make the same mistake twice!

Fortyrunner