最近项目要用到JMS,因为用tomcat容器,所以采用了开源的ActiveMQ 消息中间件提供JMS支持。但是在spring2.5和activemq5.2集成的时候出现了点问题,首先列出activemq-import-beans.xml的内容:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:amq="http://activemq.org/config/1.0"
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
http://activemq.org/config/1.0 http://activemq.apache.org/schema/core/activemq.xsd">
运行测试程序出现以下异常:
Caused by: org.xml.sax.SAXParseException: TargetNamespace.1: Expecting namespace 'http://activemq.org/config/1.0', but the target namespace of the schema document is 'http://activemq.apache.org/schema/core'.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:131)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:384)
at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.reportSchemaError(XSDHandler.java:2525)
at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.constructTrees(XSDHandler.java:768)
at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.parseSchema(XSDHandler.java:569)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadSchema(XMLSchemaLoader.java:552)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.findSchemaGrammar(XMLSchemaValidator.java:2408)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java:1753)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(XMLSchemaValidator.java:685)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:400)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2740)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:645)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:508)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:225)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283)
at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:75)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:396)
... 22 more
通过阅读异常信息发现时XSD名称空间不对,所以赶紧打开activemq-core-5.2.0.jar/META-INF/目录中的spring.schemas查看,发现"http\://activemq.apache.org/schema/core/activemq-core.xsd=activemq.xsd"
于是乎又打开activemq.xsd查个究竟,以下为activemq5.2的activemq.xsd文件一部分:
<xs:schema elementFormDefault='qualified'
targetNamespace='http://activemq.apache.org/schema/core'
xmlns:xs='http://www.w3.org/2001/XMLSchema'
xmlns:tns='http://activemq.apache.org/schema/core'>
噢,原来目标名称空间不一致啊。于是赶紧去改activemq-import-beans.xml文件的配置,修改如下:
<?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:amq="http://activemq.apache.org/schema/core" //这个地方很关键,amq对应的XSD名称空间名称要和activemq.xsd的一致
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq.xsd">
呵呵,到这里以为问题已经搞定,但是运行测试后,又发现一个新的问题,异常信息如下:
org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema document 'http://activemq.apache.org/schema/core/activemq.xsd', because 1) could not find the document;
2) the document could not be read;
3) the root element of the document is not <xsd:schema>.
查看了异常信息后,发现可能是spring无法定位到http://activemq.apache.org/schema/core/activemq.xsd,于是又一次打开activemq-core-5.2.0.jar/META-INF的spring.schemas,内容如下:
http\://activemq.org/config/1.0=activemq.xsd
http\://activemq.org/config/1.0/1.0.xsd=activemq.xsd
http\://activemq.apache.org/schema/core=activemq.xsd
http\://activemq.apache.org/schema/core/activemq-core.xsd=activemq.xsd
呵呵,发现问题了吗?初看没啥问题,但是仔细一看,噢,原来http\://activemq.apache.org/schema/core/activemq-core.xsd=activemq.xsd 与http://activemq.apache.org/schema/core/activemq.xsd 不匹配,呵呵,知道问题根源了,现在时解决办法,解决办法有两种:
第一种:修改activemq-import-beans.xml文件的“http://activemq.apache.org/schema/core/activemq.xsd ”这句为:http://activemq.apache.org/schema/core/activemq-core.xsd(这个就是activemq jar包中spring.schemas文件的最后一行,但是注意:http\://要改为http://)
第二种:在classpath目录中,新建META-INF/spring.schemas文件,然后增加一下内容:
http\://activemq.apache.org/schema/core/activemq-core.xsd=activemq.xsd
这个时候重新运行测试,发现一切OK。哈。。
分享到:
相关推荐
在这个"ActiveMQ5.1+Spring2.5 Demo"中,我们将深入探讨如何在Spring 2.5版本中配置和使用ActiveMQ,以及如何构建一个简单的示例应用来演示其功能。 首先,让我们了解如何在Spring配置中设置ActiveMQ。在Spring的...
将Spring与ActiveMQ整合,可以轻松地在Spring应用中实现消息队列的功能,提高系统的可扩展性和可靠性。 首先,让我们了解Spring框架如何支持消息传递。Spring提供了JmsTemplate类,这是一个模板类,用于简化发送和...
在IT行业中,Spring框架是Java应用开发的基石,它提供了丰富的功能来简化应用程序的构建,包括依赖注入、AOP(面向切面编程)以及各种模块如数据访问、Web支持等。而ActiveMQ则是Apache软件基金会的一个开源项目,是...
以上就是关于 ActiveMQ-P2P 文本消息以及 Spring 和 ActiveMQ 整合实例的相关知识点。通过这些知识,开发者可以构建起可靠的点对点消息传递系统,提高应用的可扩展性和解耦性。在实际项目中,根据具体需求,还可以...
3. **Spring与ActiveMQ的整合**:整合Spring和ActiveMQ的主要目的是利用Spring的IoC(控制反转)和AOP特性,以及ActiveMQ的消息传递能力,实现应用间的高效通信。Spring提供了JmsTemplate类,这是一个用于发送和接收...
本文将详细探讨Spring与ActiveMQ的整合过程,以及相关的知识点。 1. **Spring框架**:Spring是Java开发中的一个全功能框架,提供依赖注入(Dependency Injection)、面向切面编程(AOP)、事务管理等核心功能,广泛...
3. **Spring配置**:在Spring应用中整合ActiveMQ,首先需要在配置文件中引入ActiveMQ的JAR包,并配置连接工厂、目的地(队列或主题)以及消息监听器容器。 二、Spring整合ActiveMQ步骤 1. **添加依赖**:在项目中...
activeMQ5.2的jar包及使用实例,它既支持点到点(point-to-point)(PTP)模型和发布/订阅(Pub/Sub)模型。支持同步与异步消息发送。JDBC持久性管理使用数据库表来存储消息 。
本案例将详细讲解如何将Spring与ActiveMQ整合,以提升系统的可扩展性和解耦性。 1. **Spring框架**:Spring是一个全方位的开发框架,提供了依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented ...
本实例"Spring和ActiveMQ的整合实例源码ActiveMQSpringDemo"提供了一个完整的解决方案,帮助开发者了解如何在Spring环境中集成ActiveMQ进行消息队列的使用。 首先,Spring是一个广泛使用的Java企业级应用开发框架,...
**Spring与ActiveMQ整合详解** 在Java开发中,Spring框架是极为重要的应用基础,而ActiveMQ作为Apache出品的一款开源消息中间件,常被用于实现应用间的异步通信和解耦。本实例代码工程"Spring+ActiveMQ整合实例代码...
手册的最后还提到了版权声明和免责声明,提醒用户在使用ActiveMQ时需要注意的法律事项,以及在使用中可能会遇到的风险和责任。这些声明确保了用户在使用ActiveMQ的过程中,对可能的风险有所了解,并承担相应的责任。
现在,我们将深入探讨如何将Spring与ActiveMQ整合,并使用Maven进行项目构建。 首先,我们需要理解Spring与ActiveMQ整合的基本概念。Spring通过其`spring-jms`模块提供了对JMS的支持,可以方便地与消息代理如...
Spring集成ActiveMQ配置详解 Spring框架与ActiveMQ的集成,为开发者提供了一种高效、可靠的JMS消息处理机制。在企业级应用中,这种集成能够极大地提升系统的响应速度和容错能力,特别是在需要异步通信和分布式事务...
在IT行业中,Spring框架与ActiveMQ的结合是构建企业级应用中常见的消息中间件解决方案。Spring框架是一个开源的Java平台,它提供了丰富的功能,包括依赖注入、AOP(面向切面编程)、数据访问、Web应用以及更多的服务...
整合Spring与ActiveMQ的过程涉及到了Java配置或XML配置、消息的生产和消费、以及可能的消息转换和错误处理策略。这种整合方式能够提升系统的可扩展性和可靠性,使得不同组件之间可以独立工作,通过消息传递进行通信...
将Spring Boot与ActiveMQ整合,可以充分利用Spring的自动化配置和ActiveMQ的消息传递能力,构建高效、可扩展的微服务架构。 本文将深入探讨如何在Spring Boot项目中集成ActiveMQ,包括以下几个关键知识点: 1. **...
在IT行业中,Spring框架是Java应用开发的基石,而ActiveMQ则是Apache组织开发的一款开源的消息中间件,用于处理异步通信和消息队列。本文将深入探讨如何在Spring环境中使用ActiveMQ来实现消息的发送与接收,以提高...