当前位置: 首页 > news >正文

配置文件多个一个符号,导致struts抛出了匪夷所思的错误

下面的struts配置文件有一个很隐蔽的错误

前面的数字是原文行号-
43-<action path="/customer/customer"
44- type="module.customer.action.CustomerAction"
45- parameter="method" name="customerForm">>
46-
47- <forward name="customerSearch"
48- path="/WEB-INF/jsp/customer/customerSearch.jsp" />
49-
50-</action>

最后抛出的解析错误如下:
09:38:36,890 ERROR [Digester] - <Parse Error at line 50 column 12: The content of element type "action" must match "(icon?,display-name?,description?,set-property*,exception*,forward*)".>
org.xml.sax.SAXParseException: The content of element type "action" must match "(icon?,display-name?,description?,set-property*,exception*,forward*)".
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:236)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:172)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:382)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:316)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleEndElement(XMLDTDValidator.java:2048)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.endElement(XMLDTDValidator.java:932)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanEndElement(XMLNSDocumentScannerImpl.java:719)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1685)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
at org.apache.commons.digester.Digester.parse(Digester.java:1572)
at org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:738)
at org.apache.struts.action.ActionServlet.initModuleConfig(ActionServlet.java:687)
at org.apache.struts.action.ActionServlet.init(ActionServlet.java:333)
at javax.servlet.GenericServlet.init(GenericServlet.java:211)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1105)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:932)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3951)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4225)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:608)
at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:535)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1122)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:310)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1021)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1013)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442)
at org.apache.catalina.core.StandardService.start(StandardService.java:450)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:709)
at org.apache.catalina.startup.Catalina.start(Catalina.java:551)
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:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:432)
这段错误提示很匪夷所思,错误的行号根本就不对,而且说的没有按照DTD文件的格式来写,很多开发人都没找到这个错误,而且struts可以正常运行,所以就说struts本身解析有问题
当我用XML解析格式化以后,一眼就看出了错误,格式化后的文件
43-<action path="/customer/customer"
44- type="com.company.project.module.customer.action.CustomerAction"
45- parameter="method" name="customerForm">
46- >
47-
48- <forward name="customerSearch"
49- path="/WEB-INF/jsp/customer/customerSearch.jsp" />
50-
51-</action>
怎么样,看到错误了吧。就是一位多了一个">"符号(46行),就抛出了这个错误。

相关文章:

  • 签名不对,请检查签名是否与开发平台上填写的一致
  • win终端工具Cmder的配置与使用
  • hibernate的lazy配置引起的问题
  • Lua实战之table.remove
  • 老婆说明书
  • cocos2d-lua:改变子节点优先级reorderChild
  • 几天工作中的三个技巧!
  • cocos2d-lua:动作Actions的使用
  • Lua实战之判断连续
  • Lua实战之统计字符串中任意字符出现的次数
  • 用OE收GMAIL信
  • cocos2d-lua:进度条ProgressTimer的使用
  • 用HFNetChk下载更新补丁
  • cocos2d-lua:Label的使用
  • win打开自带的画图工具
  • angular2开源库收集
  • Create React App 使用
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • js ES6 求数组的交集,并集,还有差集
  • JWT究竟是什么呢?
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • Python利用正则抓取网页内容保存到本地
  • react-native 安卓真机环境搭建
  • Swoft 源码剖析 - 代码自动更新机制
  • Vue小说阅读器(仿追书神器)
  • XML已死 ?
  • 安卓应用性能调试和优化经验分享
  • 浮现式设计
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 十年未变!安全,谁之责?(下)
  • 使用 QuickBI 搭建酷炫可视化分析
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 用Canvas画一棵二叉树
  • ​520就是要宠粉,你的心头书我买单
  • ​浅谈 Linux 中的 core dump 分析方法
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (1)(1.13) SiK无线电高级配置(五)
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (js)循环条件满足时终止循环
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (二)pulsar安装在独立的docker中,python测试
  • (分布式缓存)Redis分片集群
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (三)Honghu Cloud云架构一定时调度平台
  • (太强大了) - Linux 性能监控、测试、优化工具
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .net 简单实现MD5
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET分布式缓存Memcached从入门到实战
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2