(九)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}
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)
**本系列文章经作者授权在看云整理发布,未经作者允许,请勿转载!**
# 菜鸟调错
> 分享开发中遇到的各种各样的错误,以及解决方法,让更多的人少走同样的弯路。
';