(九)POST方法提交参数丢失问题

最后更新于:2022-04-01 20:10:08

在解决一个bug的时候,发现post提交上来的参数,有部分丢失了。经过一番查证,有资料说,Tomcat的server.xml中有一个maxPostSize属性,默认是2M。于是将其值显式置为0(不对post提交的大小做限制)。 ~~~ ~~~ 结果bug依旧存在,于是又经过一番搜寻,发现还有一个属性——maxParameterCount(设置允许提交参数的个数)。其默认值是10000,将其值设置为-1,即不显示提交参数的个数。 ~~~ ~~~ 改成上面的配置,问题迎刃而解,提交的数据不再丢失。   **maxParameterCount 解释:**    http-get请求中允许传递的查询字符串的最大个数,尽管各种http浏览器(proxy工具)都会对http-get请求的长度和查询字符串的个数有限制,你仍然可以通过tomcat再次设定合适的值。parameter个数越多,事实上对tomcat的内存开支更大,很多时候处于安全或者实用的角度考虑,maxParameterCount的值都不会太大。默认值为10000,”-1″表示无限制。如果请求中参数的个数超过限定值,请求将会被拒绝。 这个解决方案不是很好,因为不对提交参数进行限制,可能会造成服务器压力过大,严重影响程序性能,带来非常糟糕的用户体验。但由于这是一个老旧的系统,这是设计上的问题,要进行彻底的调整,改动会很大,所以目前只能通过这种方式来缓解一下,日后肯定是要重构的。如果是一个正在开发的项目,绝对不能这么做,唯一的方法就是修改设计,不允许一次提交如此多的数据。
';

(八) Maven编译错误:不兼容的类型的解决方案

最后更新于:2022-04-01 20:10:06

泛型在实际的工作中应用非常广泛,关于泛型就不在这里赘述了,感兴趣请戳[《重新认识泛型》](http://blog.csdn.net/liushuijinger/article/details/40488127)。项目中用到了如下的泛型: ~~~ public T query(String sql, ResultSetHandler rsh) throws SQLException { return this.query(sql, rsh, (Object[]) null); } ~~~ 以上代码在Eclipse中可以编译通过并成功运行,但是当你使用Maven编译的时候就会报错,错误信息如下: ~~~ xxx不兼容的类型 需要:xxx 找到: java.lang.Object ~~~ Eclipse编译代码时,使用的是自带的JDT(Java Development Tools),而Maven默认使用的是JAVA_HONE中的javac,而javac相对JDT的检查机制来说,更加的严格,所以导致Eclipse可以编译通过,而用Maven编译会报错的结果。 解决方案有两个: 第一个,借助Eclipse的JDT编译 点击 Eclipse –> Project –> Clean…  使用JDT将源代码编译到target文件夹下,然后直接使用mvn package 打包即可(不要加clean)。 第二个,在pom.xml文件中为Maven指定用JDT来编译(推荐) 修改pom.xml文件中maven-compiler-plugin的配置: ~~~ ... ... org.apache.maven.plugins maven-compiler-plugin 3.1 ${java.version} ${java.version} eclipse org.codehaus.plexus plexus-compiler-eclipse 2.2 .... ... ~~~ 保存,用Maven编译,顺利通过,你又看到了熟悉的提示信息: ~~~ [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 9.716 s [INFO] Finished at: 2015-03-31T12:35:12+09:00 [INFO] Final Memory: 18M/219M [INFO] ------------------------------------------------------------------------ ~~~
';

(七)控制台中执行mvn命令后提示‘cmd’不是内部或外部命令

最后更新于:2022-04-01 20:10:04

最近在cmd下使用mvn命令时,在执行完以后总会出现一句“‘cmd’不是内部或外部命令,也不是可执行程序或批处理文件”,如下图: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-18_57b562681f1f6.jpg) 虽然命令执行成功了,不会有什么影响,但是身为强迫症晚期的我是绝对不能忍的。首先,能够正确执行mvn命令,说明Maven的配置是没问题的,那么问题出在什么地方呢?找来找去最后定位到是环境变量的问题,查看系统变量中的Path,发现里面缺少了%SystemRoot%\system32;%SystemRoot%,于是果断加上,再次执行mvn命令,发现那句话已经不见啦! ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-18_57b5626846148.jpg) 注意:修改完Path路径后,要重新打开命令行窗口才行哦。 强迫症是我追求完美的动力!
';

(六)Hibernate 4.3.x 注解常见错误及解决方案

最后更新于:2022-04-01 20:10:02

编程的过程免不了遇到各种错误,各种问题,而遇到问题,解决问题的这个过程我认为是最让人兴奋的事情。越棘手的问题,解决以后带来的快感也越大。当一个问题你搞了一下午或者一天,甚至几天,当你解决的那一刻你会觉得你又获得了重生。甚至会感觉此时此刻整个世界都是你的。 啊哦,扯的有点远了。言归正传,今天我们要说的是关于Hibernate的一些常见错误。大家都知道Java项目更新一个版本可能与之前的版本有很大的差别,变化有时会很大。比如struts1和struts2,再比如Spring3.x由原来的一个jar包拆分成了多个jar包。因此有时候版本冲突的问题会给我们带来很大的麻烦。下面我们就说说使用Hibernate4.3.x需要注意的几点。 **错误一** 错误信息:javax.persistence.Table.indexes([Ljavax/persistence/Index 原因:Hibernate4.3不支持@table(name="tablename") 解决方案:使用@entity(name="tablename")代替@table(name="tablename") **错误二** 错误信息:javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/ForeignKey 原因:Hibernate4.3在多对一映射的时候不能使用@JoinColumn 解决方案:只写@ManyToOne **错误三** 错误信息:javax.persistence.OneToMany.orphanRemoval()Z 原因:javaee、ejb或junit的jar包与hibernate-jpa-2.0-api-1.0.0.Final.jar冲突 解决方案:查看是否存在以上jar包,如果存在,去掉即可 有人说错误一可能是个bug,但是目前还没有一个定论。错误二如果还有对应的@OneToMany,那么就在该处@JoinColumn(name="对应实体_id")。 以上是近期在项目中遇到的一些问题,写出来跟大家分享一下,希望可以帮到一些人,欢迎大家补充,我会将大家的反馈更新到博文中。
';

(五)jetty运行时无法保存文件

最后更新于:2022-04-01 20:09:59

**背景交代:** 上一篇博客写的是用jetty和Maven做开发、测试。在使用的过程中遇到一个小问题,就是在jetty启动以后,修改了jsp、xml等文件无法保存。 **错误信息:** ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-18_57b562679921a.jpg) **解决方案:** 到Maven库(即repository)中搜索jetty-webapp,如下图: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-18_57b56267d03e3.jpg) 将jetty-webapp*.jar文件复制到桌面,用压缩软件打开,到"\org\eclipse\jetty\webapp"目录下,或者直接在压缩软件中搜索"webdefault.xml",如图: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-18_57b56267e8e4e.jpg) 找到"webdefault.xml"文件,用压缩软件自带的查看器或者记事本之类的软件打开,然后搜索"useFileMappedBuffer" ~~~ useFileMappedBuffer false ~~~ 将"true"改为false,然后保存,将修改后的jar包复制到原来的位置替换掉之前的jar包。 或者将webdefault.xml文件放到项目中(如放到"src/main/resources"目录下),在pom.xml文件的标签中加入以下代码: ~~~ /${project.artifactId} src/main/resources/webdefault.xml ~~~ **PS:如果经过上述步骤还是不能解决,重启jetty或者Eclipse即可。**
';

(四)Spring与DWR集成,配置文件报错

最后更新于:2022-04-01 20:09:57

**背景简介:** 该项目是市信用办的一个系统,之前好像是一个石家庄的公司负责的。我属于是半路接手。拿到源码后,根据他们给的简(shao)单(de)明(ke)了(lian)的说明把项目搭起来。结果可想而知,项目文件一片红。于是就开始解决这些错误,好在很多错误都是类似的。经过一番捣鼓,大部分的错误都解决了,有一个Spring跟DWR集成配置的错误,错误信息如下: ~~~ Multiple annotations found at this line: - schema_reference.4: Failed to read schema document 'http://www.directwebremoting.org/schema/spring-dwr-2.0.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not . - cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'dwr:remote'. ~~~ **解决过程:** 遇到以前没见过的错误,第一步肯定就是去网上找解决方案了。于是百度、谷歌双管齐下,倒是找到了不少类似错误的解决方案,逐个试过貌似在我这里都不起作用了。 无奈之下我想起了我们在刚刚做完的项目中,用到了DWR,于是我就找到了当时负责DWR这一块的小伙伴,向他寻求帮助。给他看过具体问题之后,他说我们当时不是用的这种方式,而是用的另一种,他推荐我去官网找找看。接着我就来到了DWR的官网,找到与Spring集成的部分,然后又找到'dwr:remote'标签,最后也没发现有什么特殊的地方。后来因为时间比较晚了,而且在这个问题上花费了很长时间,自己有点烦了,就决定先不理它了,等明天再弄。 第二天上午,学完英语之后我坐在电脑前,看着错误提示,心里想:网上找到的解决方案都没有帮我解决这个问题,很可能是我跟他们的错误表现类似,但造成这种表现的原因不一样呢?于是我看是认真的阅读那几行错误提示。后来发现可能是找不到对应的schema文件。虽然IDE会先去jar包里找,如果找不到还会根据你的配置去网上找。但是也可能由于哪出了问题,导致这两条路都走不通了。于是我想,既然这样的话,那我何不自己手动给你添加一个本地的schema文件呢? 说时迟那时快,想到这里,我以迅雷不及掩耳之势下载了一个schema文件,并手动添加到IDE中。bingo!错误提示消失了,问题解决了。喜出望外、喜大普奔呀! ### 手动添加schema文件,方法如下: 1,依次选择:windwos->preferences->myeclipse->files and editors->xml->xmlcatalog 2,点"add",在出现的窗口中,在**location**中选"File system",然后选择你下载的spring-beans-2.0.xsd,文件 3,回到设置窗口的时候不要急着关闭窗口,应把窗口中的**Key Type**改为Schema location, 4,**Key**改为http://www.directwebremoting.org/schema/spring-dwr-2.0.xsd **总结:** 网络的力量很强大,周围人的帮助也很重要,不过很多时候还是要靠自己。当一个问题困扰你很长时间的时候,不妨先停下你的脚步,转身换个方向走,换个角度思考。很多时候换个角度想问题,会有完全不一样的结果。 当我们遇到问题的时候不放按照下面的方式去解决: ~~~ while (遇到问题) { if (以前遇到过) { 根据自己的记忆或者以前的笔记解决问题; }else if (没遇到过) { 上网找解决方案; }else if (网上找不到 or 网上的方法无法解决) { 求助身边的人; }else if (身边的人也无法解决) { 停下来,跳出之前的思路; 认真分析错误信息; 换个角度思考; } } ~~~ 通常情况下,以上步骤就可以解决你的问题了。如果经历了以上步骤还是不能解决你的问题,那么恭喜你,你很可能遇到了一个非常难的难题。这个时候就是你进步的时候。你可能需要将问题反应给你的项目经理,从而集合更多的人去解决它。 以上就是我的一点小小的感受,希望能对大家有点帮助。
';

(三)Jboss与jdk版本不兼容导致WebService调用出错

最后更新于:2022-04-01 20:09:55

环境: jdk1.6 Jboss 5.1.0.GA 问题描述: EJB发布webserivce已经成功,并且能够成功访问wsdl文件; 使用axis1自带的sample/client下的类DynamicInvoker测试,程序报错。 错误信息: 客户端: ~~~ Exception in thread "main" AxisFault faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException faultSubcode: faultString: org.xml.sax.SAXParseException: Premature end of file. faultActor: faultNode: faultDetail: {http://xml.apache.org/axis/}stackTrace:org.xml.sax.SAXParseException: Premature end of file. at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source) at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) at javax.xml.parsers.SAXParser.parse(Unknown Source) ~~~ 服务器(Jboss)端错误信息: ~~~ ERROR [SOAPFaultHelperJAXWS] SOAP request exception java.lang.UnsupportedOperationException: setProperty must be overridden by all subclasses of SOAPMessage at javax.xml.soap.SOAPMessage.setProperty(Unknown Source) at org.jboss.ws.core.soap.SOAPMessageImpl.(SOAPMessageImpl.java:87) at org.jboss.ws.core.soap.MessageFactoryImpl.createMessage(MessageFactoryImpl.java:215) at org.jboss.ws.core.soap.MessageFactoryImpl.createMessage(MessageFactoryImpl.java:193) at org.jboss.wsf.stack.jbws.RequestHandlerImpl.processRequest(RequestHandlerImpl.java:455) at org.jboss.wsf.stack.jbws.RequestHandlerImpl.handleRequest(RequestHandlerImpl.java:295) at org.jboss.wsf.stack.jbws.RequestHandlerImpl.doPost(RequestHandlerImpl.java:205) at org.jboss.wsf.stack.jbws.RequestHandlerImpl.handleHttpRequest(RequestHandlerImpl.java:131) at org.jboss.wsf.common.servlet.AbstractEndpointServlet.service(AbstractEndpointServlet.java:85) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190) at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92) at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process (SecurityContextEstablishmentValve.java:126) at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke (SecurityContextEstablishmentValve.java:70) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Unknown Source) ~~~ 解决方案: 下载jboss-5.1.0.GA-jdk6,并将JBOSS_HOME\lib\endorsed下的几个以Jboss开头的jar包分别复制到JAVA_HOME\lib\endorsed 和 JRE_HOME\lib\endorsed目录下。两个lib目录中可能都没有endorsed文件夹(反正我的没有),那就自己新建一个。 需要复制的jar包: jbossws-native-jaxrpc.jar jbossws-native-jaxws.jar jbossws-native-jaxws-ext.jar jbossws-native-saaj.jar 注意:从eclipse启Jboss需要在jre下放置这些包,从外部启Jboss需要在jdk下放置上面的jar包。 开始只注意到客户端报的错误,于是根据错误信息就在网上搜寻解决办法,可是找到的资料千奇百怪,说什么的都有。后来贾琳一句话提醒了我,他问我Jboss报什么错误,这时我才想起来还有Jboss的事呢。后来他把[他之前遇到类似错误的博客](http://blog.csdn.net/shan9liang/article/details/17269269)发给我,我按照上面的办法弄了弄,不过还是发现有点小问题(从外部启Jboss还是报错)。后来参考[一篇网友的博客](http://blog.csdn.net/yuebinghaoyuan/article/details/8660954)解决了这个问题。这篇文章很详细的讲解了出现这个错误的原因,有兴趣的朋友可以看看。
';

(二)EJB3.0部署消息驱动Bean抛javax.naming.NameNotFoundException异常

最后更新于:2022-04-01 20:09:53

在部署EJB的消息驱动Bean时遇到了如下的错误: ~~~ ERROR [org.jboss.resource.adapter.jms.inflow.JmsActivation] (WorkManager(2)-2) Unable to reconnect org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@2705ea(ra=org.jboss.resource.adapter.jms. JmsResourceAdapter@737612 destination=queue/myqueue destinationType=javax.jms.Queue tx=true durable=false reconnect=10 provider=java:/DefaultJMSProvider user=null maxMessages=1 minSession=1 maxSession=15 keepAlive=60000 useDLQ=true DLQHandler=org.jboss.resource.adapter.jms.inflow.dlq.GenericDLQHandler DLQJndiName=queue/DLQ DLQUser=null DLQMaxResent=5) javax.naming.NameNotFoundException: myqueue not bound ~~~ **解决方案一:** 在JBoss根目录\server\default\deploy下的mail-service.xml文件中添加以下代码: ~~~ queue/myqueue jboss.mq:service=DestinationManager ~~~ **解决方案二:** 在Jboss的server\default\deploy目录中建立一个xxx-service.xml文件,其中xxx可以任意取值,但必须跟“-service”后缀,例如,MDB-service.xml。该文件可以放在deploy或其子目录(可以是多层子目录)中。该文件的内容如下: ~~~ jboss.mq:service=DestinationManager ~~~ **原因:** 消息驱动Bean的注解如下: ~~~ @MessageDriven( activationConfig = { @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Queue"), @ActivationConfigProperty(propertyName="destination", propertyValue="queue/myqueue") } ) ~~~ 消息驱动Bean需要使用@MessageDriven进行注解。要注意的是destination属性的值是queue/myqueue。JBoss不会自已建立一个Queue对象,因此,需要手工来配置Queue对象。 OK,采用以上解决方案的一种即可解决此问题,只需重新部署一下我们编写的消息驱动Bean,然后运行客户端,你会发现已经成功的调用到了我们的消息驱动Bean。
';

(一)Maven项目部署到Jboss出现:Failed to create a new SAX parser

最后更新于:2022-04-01 20:09:50

今天调试的时候遇到一个错误,往Jboss的deploy目录扔war包的时候,报了一个“Failed to create a new SAX parser”的错误。在网上找了找解决方案,一般都说将项目中的xerces-2.6.2.jar和xml-apis.jar包删掉即可,但是我试了试删了还是不行,因为在打包的时候Maven还是会将它们打进你的war包。 首先,我的项目中用到了dwr,dwr默认依赖这两个包,因此pom文件会在你引入dwr的时候关联这两个包,所以你只是从项目的lib库里删除掉是没用的,因为在打包的时候,Maven还是会根据pom文件里的依赖关系把它们打进去。解决的办法很简单,步骤如下: 1,打开pom文件,点击“Dependency Hierarchy”选项卡; 2,在上面的框里分别输入刚才的两个包名; 3,右击相应的包,选择“Exclude Maven artifactId”选项。 见下图: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-18_57b562676ae0e.jpg) 之后pom文件会在对dwr的引用中多几行代码: ~~~ xercesImpl xerces xml-apis xml-apis ~~~ 意思就是去除了对上面两个jar的依赖。然后打包,部署,又见到了可爱的successfully。问题解决了,又可以愉快的写代码去了,哦也!
';

前言

最后更新于:2022-04-01 20:09:48

> 原文出处:[菜鸟调错](http://blog.csdn.net/column/details/mydebug.html) 作者:[刘水镜](http://blog.csdn.net/liushuijinger) **本系列文章经作者授权在看云整理发布,未经作者允许,请勿转载!** # 菜鸟调错 > 分享开发中遇到的各种各样的错误,以及解决方法,让更多的人少走同样的弯路。
';