Details
Description
I was using org.apache.xbean.spring.context.ClassPathXmlApplicationContext in my beanRefContext.xml and noticed weird behaviour with util:properties (and util:map)
<bean class="org.apache.activemq.spring.ActiveMQConnectionFactory">
<property name="properties">
<util:properties location="classpath:jndi.properties" />
</property>
</bean>
Caused by: org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Configuration problem: Id is required for element 'properties' when used as a top-level tag
at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:72)
at org.springframework.beans.factory.xml.AbstractBeanDefinitionParser.parse(AbstractBeanDefinitionParser.java:73)
at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:69)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1253)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseNestedCustomElement(BeanDefinitionParserDelegate.java:1302)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.xbean.spring.context.v2c.XBeanBeanDefinitionParserDelegate.internalParseNestedCustomElement(XBeanBeanDefinitionParserDelegate.java:90)
at org.apache.xbean.spring.context.v2c.XBeanBeanDefinitionParserDelegate.parsePropertySubElement(XBeanBeanDefinitionParserDelegate.java:47)
When using org.springframework.context.support.ClassPathXmlApplicationContext or supplying and id this problem disappeared.
- * * IRRELEVANT FYI * * *
I couldn't get ActiveMQ XBean variant to accept properties at all.
<amq:connectionFactory>
<property name="properties">
<util:properties id="foobar" location="classpath:jndi.properties" />
</property>
</amq:connectionFactory>
It created PropertyValue named 'property' along with properties which naturally failed due to missing 'property' named property.
<amq:connectionFactory>
<util:properties id="foobar" location="classpath:jndi.properties" />
</amq:connectionFactory>
It resolved correctly but property type coercion lead to ManagedMap instead of property file. Here I revered from using ActiveMQ XBean to format used above.