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 条评论
登录 后参与评论

相关文章

来自专栏Netkiller

Spring boot with Spring security

本文节选自 《Netkiller Java 手札》 地址:http://www.netkiller.cn/java/index.html 9.15. Spri...

3725
来自专栏一个会写诗的程序员的博客

使用Xposed强制android WebView开启debug模式使用Xposed强制android WebView开启debug模式Xposed前期工作

从 https://developer.chrome.com/devtools/docs/remote-debugging 我们可以知道在android 4.4...

1072
来自专栏码匠的流水账

spring security oauth2 allowFormAuthenticationForClients原理解析

本文主要解析一下spring security oauth2中AuthorizationServerConfigurerAdapter的allowFormAut...

481
来自专栏Netkiller

Spring boot with Oauth2

本文节选自《Netkiller Java 手札》 作者:netkiller 网站:http://www.netkiller.cn 5.20. Spring bo...

7037
来自专栏码匠的流水账

聊聊spring security oauth2的password方式的认证

本文主要来聊聊spring security oauth2的password方式的认证

371
来自专栏分布式系统进阶

ISR列表是如何变化的?Kafka源码分析-汇总

核心replica.logEndOffset.offsetDiff(leaderHW) >= 0 如果当前replica的LEO大于等于Leader的HighW...

742
来自专栏一个会写诗的程序员的博客

Xposed: 勾住(Hook) Android应用程序对象的方法,实现AOPXposed参考文档:

Xposed能够勾住(Hook) Android应用程序对象的方法,实现AOP,一个简单的例子:

765
来自专栏小尘哥的专栏

springboot+jjwt+security完美解决restful接口无状态鉴权

springboot本身已经提供了很好的spring security的支持,我们只需要实现(或者重写)一部分接口来实现我们的个性化设置即可。本文浅显易懂,没有...

734
来自专栏一个会写诗的程序员的博客

【Kotlin Spring Boot 服务端开发: 问题集锦】Spring Security 5 : There is no PasswordEncoder mapped for the id "

【Kotlin Spring Boot 服务端开发: 问题集锦】Spring Security 5 : There is no PasswordEncoder...

521
来自专栏腾讯IVWEB团队的专栏

使用 Xposed 强制 androidwebView 开启 debug 模式

从 《远程调试 Android 设备使用入门》文章中我们可以知道在 android 4.4+可以通过在apk中使用下面的代码开启 webview 的 chrom...

6060

扫码关注云+社区