在一合作伙伴处进行OA系统移植测试,客户系统采用jsp+javabean开发,部分servlet。有一个公告发布功能,允许上传附件,在tomcat应用服务器下运行正常,在apusic服务器下报空指针异常。
功能涉及到的文件主要三个:gonggao_add.jsp、gonggao_insert.jsp、
HttpFileUpload.java。其中填写表单、选择附件在gonggao_add.jsp,然后提交到
gonggao_insert.jsp,在gonggao_insert.jsp里用到HttpFileUpload.java。
报错信息如下,显示问题出在HttpFileUpload.java这个类的parseRequest()方法:
2009-09-04 08:52:13 错误 [apusic.web.dzzw./dzzw] 执行Servlet时发生错误。
java.lang.NullPointerException
at org.apache.commons.fileupload.MultipartStream
$ItemInputStream.makeAvailable(MultipartStream.java:967)
at org.apache.commons.fileupload.MultipartStream$ItemInputStream.read
(MultipartStream.java:887)
at java.io.InputStream.read(InputStream.java:85)
at org.apache.commons.fileupload.util.Streams.copy(Streams.java:94)
at org.apache.commons.fileupload.util.Streams.copy(Streams.java:64)
at org.apache.commons.fileupload.MultipartStream.readBodyData
(MultipartStream.java:593)
at org.apache.commons.fileupload.MultipartStream.discardBodyData
(MultipartStream.java:619)
at org.apache.commons.fileupload.MultipartStream.skipPreamble
(MultipartStream.java:638)
at com.cnblogs.zxub.upload.HttpFileUpload.parseRequest
(HttpFileUpload.java:212)
at
_jspx._bangong._oa._gonggao._program._gonggao_5finsert__jsp._jspService
(bangong/oa/gonggao/program/gonggao_insert.jsp:29)
at com.apusic.web.jsp.runtime.HttpJspPageImpl.service(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at com.apusic.web.container.ServletComponent.service(Unknown Source)
at com.apusic.web.container.WebContainer.invoke(Unknown Source)
at com.apusic.web.container.WebContainer.invoke(Unknown Source)
at com.apusic.web.jsp.JspServlet.service(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at com.apusic.web.container.ServletComponent.service(Unknown Source)
at com.apusic.web.container.WebContainer.invoke(Unknown Source)
at com.apusic.web.container.WebContainer.processRequest(Unknown
Source)
at com.apusic.web.http.VirtualHost.processRequest(Unknown Source)
at com.apusic.web.http.HttpServer.processRequest(Unknown Source)
at com.apusic.web.http.HttpConnectionHandler.service(Unknown Source)
at com.apusic.web.http.ConnectionHandler.processRequest(Unknown
Source)
at com.apusic.web.http.ConnectionHandler.processConnection(Unknown
Source)
at com.apusic.web.http.ConnectionHandler.run(Unknown Source)
at com.apusic.util.ThreadPoolImpl$WorkerThread.run(Unknown Source)
当时由于不知道的原因,HttpFileUpload.java这个文件客户无法提供源码,没办法进行跟踪调试,定位具体出错的位置;
gonggao_insert.jsp页面部分代码如下:
String filename="";
String newfilename="";
String path="UploadFile/bangong/oa/gonggao";
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(4096);
factory.setRepository(new File(application.getRealPath("\\") + path));
HttpFileUpload upload = new HttpFileUpload(factory);
upload.setAllowFileTypes("");
upload.setSizeMax(1000*1024*1024);
List fileItems = upload.parseRequest(request); //异常提示在此报错(gonggao_insert.jsp:29)
Iterator iter = fileItems.iterator();
while(iter.hasNext()){
FileItem fi=(FileItem)iter.next();
String fileName = fi.getName();
File tempFile = new File(fileName);
fileName = tempFile.getName();
String newfileName="";
if(!"".equals(fileName))
{
fileName=fileName.substring(fileName.lastIndexOf("\\")+1,fileName.length());
String Suffix=fileName.substring(fileName.lastIndexOf("."),fileName.length());
uuid.UUID uuid0=new uuid.UUID();
String ID=String.valueOf(uuid0);
newfileName=ID+Suffix;
newfilename+=newfileName+"@@";
filename+=fileName+"@@";
fi.write(new File(application.getRealPath("\\") + path, newfileName));
}
}
经跟踪gonggao_insert.jsp代码发现,文件中如下代码在tomcat和apusic应用服务器下结果不一致:
application.getRealPath("\\"),但是进行修改后仍然报同样的错误。
在现场测试发现,gonggao_add.jsp页面中,即便没有选择任何附件,提交后都报异常,增加附件后提交也报异常,异常信息都是一样的。gonggao_insert.jsp页面中,把上传附件相关代码注释掉后,除附件外的其他表单数据可以正常提交保存。
后来经过跟同事多次沟通,仔细分析了出错信息,终于找到了问题原因和解决办法:删除%apusic_home%\lib\ext\operamasks-third-party.jar后一切OK!
原因分析:apusic应用服务器为了支持operamasks框架的上传组件,在operamasks-third-party.jar内置了apache fileupload相关类文件,由于apusic应用服务器默认首先加载自带的jar包,导致伙伴OA系统lib下的fileupload.jar里的相关类没有得到加载,而apusic应用服务器自带的fileupload相关类跟伙伴OA系统Lib下版本不一致,导致出现问题。
分享到:
相关推荐
金蝶Apusic应用服务器6.0是一款标准、安全、高效、集成并且具有丰富功能的企业级应用服务器(Enterprise Application Server),它用于实现基于SOA的企业应用和服务,为企业应用和服务提供坚不可摧的基础架构支撑。...
使用JProfiler监控Apusic应用服务器,不仅是性能监控的实践,更是一次对应用架构与性能优化策略的深刻反思。通过上述步骤,我们不仅能即时掌握Apusic服务器的运行状态,还能基于数据分析,制定科学合理的优化方案,...
金蝶Apusic应用服务器V10企业版是金蝶公司推出的一款强大且高效的企业级中间件产品,主要用于构建和运行企业级的Web应用程序和服务。该版本的用户手册、技术白皮书以及调优手册提供了全面的技术指导和优化策略,帮助...
金蝶Apusic应用服务器是企业级的中间件产品,主要用于构建和运行复杂的企业应用程序。它提供了稳定、高效、安全的运行环境,适用于分布式系统,并具备良好的可扩展性和伸缩性。Apusic V10版本进一步优化了这些特性,...
金蝶Apusic应用服务器的详细文档,包括安装、管理、开发等内容。
金蝶Apusic应用服务器V6产品简介特性版.pptx
Apusic应用服务器是一款基于Java EE规范的应用服务器,它提供了运行和管理企业级Java应用程序的平台。本文档详细介绍了Apusic应用服务器的配置管理,包括服务器域的管理、J2EE应用的部署及配置、数据库连接池的配置...
Apusic Web 服务器是 Apusic 应用服务器中内置的一个高效、安全、可靠的 Web 服务器,提供完整的 Web 服务器的功能,使 Apusic 应用服务器在提供对静态页面和图形的同时,提供对 JSP、Servlet 的高效服务。Apusic ...
金蝶Apusic应用服务器是一款基于Java的企业级应用服务器,它完全遵循J2EE 1.4规范,确保了与行业标准的高度一致性和互操作性。该产品由国内领先的中间件提供商金蝶公司开发,是中国首个拥有自主知识产权并符合J2EE...
### Linux环境下使用Apache搭建Apusic应用服务器集群 在IT领域,构建高效稳定的应用服务器集群是企业级服务的关键一环。本文将深入解析如何在Linux环境下,利用Apache与Apusic搭建应用服务器集群,并实现负载均衡,...
金蝶Apusic应用服务器V6参考手册中的Classloader机制 Classloader是Java虚拟机(JVM)中的一种机制,用于加载和管理Java类。金蝶Apusic应用服务器V6参考手册中对Classloader机制进行了详细的介绍,包括Classloader...
金蝶Apusic中间件应用解决方案详细介绍了金蝶旗下的一款符合J2EE规范的中间件软件——Apusic应用服务器。J2EE(Java Platform, Enterprise Edition)是由Sun Microsystems(现已被Oracle公司收购)定义的一套企业级...
金蝶Apusic应用服务器V9.0是金蝶中间件推出的一款企业级Java应用服务器产品,支持Java EE 6规范,提供了包括Web容器、EJB容器、企业级Java Bean等服务在内的丰富功能。本手册针对金蝶Apusic应用服务器V9.0版本的用户...
3. **登录Apusic控制台检查部署的应用,除EAS、EASWeb、fileserver、jportal等已知应用外,是否有其他未知应用部署。** **注意事项:** - 对于发现的可疑文件或应用,应及时进行隔离或删除,并进一步调查来源。 ##...
金蝶Apusic企业服务总线V7.0用户手册
Apusic服务器作为一款高性能、高可用的应用服务器,它提供了丰富的功能来支持各种应用场景。其中,数据源的资源引用是Apusic服务器中的一个重要特性,它允许开发者通过标准的方式来访问和管理数据库连接。本文将详细...
2. 实时调试运行在Apusic应用服务器上的应用程序,快速定位和解决问题。 3. 集成Apusic的事务管理、性能监控等功能,提升开发效率。 4. 利用Apusic提供的JMS(Java Message Service)和MTS(Message Transfer ...
2021年通用apusic license,适用于apusic9.0以上EAS(EAS8.0以上版本一般都可用),有效期到2021年12月31日。此apusic为5个连接数
标题"AAS-V10.zip"和描述中的"apusic"关键词指向了Apusic应用服务器,这是一款由中国万网(现阿里云)开发的企业级Java应用服务器,它为各种企业应用程序提供了一个运行平台。Apusic应用服务器遵循Java EE(以前称为...