Reputation: 163
I am encountering an issue where a bean that I am attempting to wire via a spring config is not working? The bean accessor is showing up as null during a check within my test case (but I do observe in the logs that the setter is actually setting it to a valid value. Could really use some help...
Here is the code:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="/test-context.xml")
public abstract class HistoryCompress extends TestBase {
private CompressionArchive compressArchive;
public void setCompressionArchive(CompressionArchive value)
{
this.logInfo("setting compression archive: %s, name: %s",value,value.getcompressionFormat());
this.compressArchive=value;
}
protected CompressionArchive getCompressionArchive()
{
return this.compressArchive;
}
@Test
public void getArchiveTypeName()
{
logInfo("test");
this.assertNotNull(this.getCompressionArchive(),"compression archive is null");
this.assertNotNull(this.getCompressionArchive().getcompressionFormat(), "format name is null");
logInfo("format: %s",this.getCompressionArchive().getcompressionFormat());
}
}
public class HistoryZipCompress extends HistoryCompress
{
public HistoryZipCompress()
{
this.logInfo("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
this.logInfo("-=-=-=--=- C'Tor HistoryZipCompress");
this.logInfo("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
}
}
public interface CompressionArchive {
public String getcompressionFormat();
public Map<String,String> getArchiveHashes(InputStream stream,String password) throws Exception;
}
public class CompressionArchiveZip extends IntegrationBase implements CompressionArchive
{
/* implementation methods*/
}
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:util="http://www.springframework.org/schema/util"
default-autowire="byName"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<context:annotation-config />
<bean class="gdg.scc.integration.testcases.file.history.HistoryZipCompress">
<property name="compressionArchive" ref="zipArchive" />
</bean>
<bean id="zipArchive" class="gdg.scc.integration.global.helpers.compression.impl.CompressionArchiveZip" />
</beans>
When I run this, I'm observing that HistoryZipCompress gets instantiated 3 different times, here is a tail from a run of getArchiveTypeName on HistoryZipCompress:
16-Jan 13:21:09 - INFO - main - org.springframework.context.support.GenericApplicationContext - Refreshing org.springframework.context.support.GenericApplicationContext@2bfe605c: startup date [Wed Jan 16 13:21:09 MST 2013]; root of context hierarchy 16-Jan 13:21:09 - INFO - main - org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor - JSR-330 'javax.inject.Inject' annotation found and supported for autowiring 16-Jan 13:21:09 - INFO - main - org.springframework.beans.factory.support.DefaultListableBeanFactory - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@578bb31a: defining beans [fileSystemAPIUrl,defaultShopperAccount,shopperAccounts,orionAccountCredential,SCC.FileTypeMappings.js,fileTypeGenerator,regexToExtensionMap,activeMQMessageProperties,automatorServiceInfo,activeMQAutomtorPublisher,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,logResultsToAutomator,orionAccountHelper,gdg.scc.integration.testcases.file.history.HistoryZipCompress#0,zipArchive,extensionToMimeType]; root of factory hierarchy 16-Jan 13:21:09 - INFO - main - integration.testcases.file.history.HistoryZipCompress - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 16-Jan 13:21:09 - INFO - main - integration.testcases.file.history.HistoryZipCompress - -=-=-=--=- C'Tor HistoryZipCompress 16-Jan 13:21:09 - INFO - main - integration.testcases.file.history.HistoryZipCompress - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 16-Jan 13:21:09 - INFO - main - integration.testcases.file.history.HistoryZipCompress - setting compression archive: integration.global.helpers.compression.impl.CompressionArchiveZip@6a367507, name: zip 16-Jan 13:21:09 - INFO - main - integration.testcases.file.history.HistoryZipCompress - test 16-Jan 13:21:09 - INFO - Thread-0 - org.springframework.context.support.GenericApplicationContext - Closing org.springframework.context.support.GenericApplicationContext@2bfe605c: startup date [Wed Jan 16 13:21:09 MST 2013]; root of context hierarchy 16-Jan 13:21:09 - INFO - Thread-0 - org.springframework.beans.factory.support.DefaultListableBeanFactory - Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@578bb31a: defining beans [fileSystemAPIUrl,fileTypeGenerator,regexToExtensionMap,activeMQMessageProperties,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,integration.testcases.file.history.HistoryZipCompress#0,zipArchive,extensionToMimeType]; root of factory hierarchy
Upvotes: 2
Views: 2058
Reputation: 4061
Annotate the field with @Autowired:
@Autowired
private CompressionArchive compressArchive;
Ditch the HistoryZipCompress in xml config - what is it doing there? You do not need to create another instance of the test class, the runner will do this for you.
You need your test object to get injected with the CompressionArchive instance. Spring runner manages your test object (HistoryCompress) but doesn't know that you want CompressionArchive instance injected.
Upvotes: 1