【发布时间】:2015-03-11 15:37:02
【问题描述】:
我有一个 activemq 代理,我想将其配置拆分为多个文件。我想准备一个单独的配置文件,它会自动生成,并且只包含队列的定义。
文件 1:activemq.xml
<beans ...>
<broker ...>
</broker>
</beans>
文件 2:queues.xml
<beans ...>
<broker ...>
<destinations>
<queue physicalName="q1"/>
</destinations>
</broker>
</beans>
我尝试使用:
弹簧导入:
<import resource="queues.xml"/>
但是得到了
错误:org.springframework.beans.factory.BeanCreationException:在类路径资源 [queues.xml] 中定义名称为“org.apache.activemq.xbean.XBeanBrokerService#1”的 bean 创建错误:调用 init 方法失败;嵌套异常是 javax.management.InstanceAlreadyExistsException: org.apache.activemq:type=Broker,brokerName=localhost org.springframework.beans.factory.BeanCreationException:在类路径资源 [queues.xml] 中定义名称为“org.apache.activemq.xbean.XBeanBrokerService#1”的 bean 创建错误:调用 init 方法失败;嵌套异常是 javax.management.InstanceAlreadyExistsException: org.apache.activemq:type=Broker,brokerName=localhost
X包含:
activemq.xml:
<beans ...
xmlns:xi="http://www.w3.org/2001/XInclude"
>
<broker ...>
<xi:include href="queues.xml" parse="xml"/>
</broker>
</beans>
但是得到了
错误:org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 142 in XML > 来自类路径资源 [activemq.xml] 的文档无效;嵌套异常是 org.xml.sax.SAXParseException;行号:142;列号:45; cvc-complex-type.2.4.c: 匹配的通配符是严格的,但是找不到元素'xi:include'的声明。 org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException:来自类路径资源 [activemq.xml] 的 XML 文档中的第 142 行无效;嵌套异常是 org.xml.sax.SAXParseException;行号:142;列号:45; cvc-complex-type.2.4.c: 匹配的通配符是严格的,但是找不到元素'xi:include'的声明。
Xml 实体 activemq.xml
<!DOCTYPE beans [
<!ENTITY queues SYSTEM "queues.xml">
]>
<beans ...>
<broker ...>
&queues;
</broker>
</beans>
但是得到了
错误:org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException:来自类路径资源 [activemq.xml] 的 XML 文档中的第 28 行无效;嵌套异常是 org.xml.sax.SAXParseException;行号:28;列号:3; 必须声明元素类型“beans”。 org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException:来自类路径资源 [activemq.xml] 的 XML 文档中的第 28 行无效;嵌套异常是 org.xml.sax.SAXParseException;行号:28;列号:3; 必须声明元素类型“beans”。
有什么想法吗?提前致谢。
【问题讨论】:
-
我现在知道为什么实体方法不起作用了。我使用基于 XSD 的 Spring 配置文件来配置 ActiveMQ 代理,当我添加实体定义时,它会切换到 DTD 验证而不是 XSD,这就是它抱怨未定义元素 bean 的原因。所以实体的定义是正确的,但是 DTD 的使用是有问题的,所以这个解决方案是死路。
标签: xml spring configuration activemq broker