dubbo服务提供者在tomcat启动失败的问题

dubbo的服务提供者是个web服务,打成war包后在tomcat启动失败,查看tomcat的logs目录下的localhost.2017-05-15.log文件,错误信息如下:

org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 67 in XML document from class path resource [spring-mvc.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 67; columnNumber: 53; cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'dubbo:application'.
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:396)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:131)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:530)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:444)
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:631)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:588)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:645)
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:508)
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:449)
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:133)
    at javax.servlet.GenericServlet.init(GenericServlet.java:158)
    ... 
    ... 
    ... 

看起来应该是xml文件中的dubbo:application没有通过dtd检查,去网上搜了一下这个错误,都是说在eclipse中开发dubbo服务的时候可能会遇到这个错误,但我这是在tomcat运行中报错的,并非开发工具eclipse报错,而且正常情况下这个dtd文件已经打包进了dubbo.jar文件中,spring应该能找到并且使用。

再仔细看一下spring的配置文件,如下:

<?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:context="http://www.springframework.org/schema/context"
    xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
                            http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
                            http://www.springframework.org/schema/context  
                            http://www.springframework.org/schema/context/spring-context-3.1.xsd">
    <!-- 自动扫描 -->
    <context:component-scan base-package="com.bolingcavalry" />

    <dubbo:application name="dubbo_service_provider" />
    <dubbo:registry address="zookeeper://zkhost:2181" />
    <dubbo:protocol name="dubbo" port="20880" />
    <dubbo:service interface="com.bolingcavalry.service.CalculateService"
                   ref="calculateService" />
    <!-- 和本地bean一样实现服务 -->
    <bean id="calculateService" class="com.bolingcavalry.service.impl.CalculateServiceImpl" />
</beans>

果然有问题,xsi:schemaLocation属性漏掉了dubbo的xsd地址信息,赶紧加上去,如下图红框位置:

再打war包,部署,启动webapp,终于成功启动,一切正常了,还是有点马虎啊,以后做这种复制粘贴的事情的时候,需要更细心一些才行。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据和云

Oracle 数据库之最:你见过最高的 SQL Version 是多少?

Oracle数据库中执行的SQL,很多时候会因为种种原因产生多个不同的执行版本,一个游标的版本过多很容易引起数据库的性能问题,甚至故障。 有时候一个SQL的版本...

2835
来自专栏向治洪

Android ORM 框架之 greenDAO

前言 我相信,在平时的开发过程中,大家一定会或多或少地接触到 SQLite。然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等。...

1876
来自专栏编程札记

Lucene构建个人搜索引擎解析

简单来说,Lucene提供了一套完整的工具来帮助开发者构建自己的搜索引擎,开发者只需要import Lucene对应的package即可快速地开发构建自己的业务...

702
来自专栏游戏杂谈

electron实现类似QQ来新消息时的闪烁与任务栏窗口提醒

公司项目有一款带即时聊天、群组功能的APP,因为要给客服人员使用,需要开发PC版本。之前使用C#开发过一个PC版本,但是C#的UI这一块支持的不太好,而且升级比...

632
来自专栏Android群英传

Badge分析&如何逼死处女座

1413
来自专栏何俊林

FFmpeg总结(十三)用ffmpeg基于nginx实现直播功能,推流拉流

图:曼谷 直播app实现流程 1.采集 2.滤镜处理 3.编码 4.推流 5.CDN分发 6.拉流 7.解码 8.播放 9.聊天互动 图像格式: public ...

2217
来自专栏Linux驱动

34.QT-制作串口助手(并动态检测在线串口,附带源码)

将qextserialport-1.2rc.zip解压,将解压后的src目录拷贝到项目里的子目录SerialSrc下,在项目pro文件中增加下面这行

733
来自专栏Java技术分享

maven build时报错Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test

maven build时报错Failed to execute goal org.apache.maven.plugins:maven-surefire-plu...

7015
来自专栏葡萄城控件技术团队

如何为IDE注册第三方Silverlight控件

为IDE注册第三方Silverlight控件,相对WinForm平台下第三方控件的注册,较为复杂。这里结合实际,给出一个相对方便的解决方案,欢迎讨论。 先看结果...

1975
来自专栏落影的专栏

HLS推流的实现(iOS和OS X系统)

前言 使用VideoToolbox硬编码H.264 使用VideoToolbox硬解码H.264 使用AudioToolbox编码AAC 使用AudioT...

4656

扫码关注云+社区