`
zydky
  • 浏览: 86796 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

apusic应用服务器下的FileUpload问题——我的一次移植测试经历

阅读更多
    在一合作伙伴处进行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使用手册(CHM格式)

    金蝶Apusic应用服务器6.0是一款标准、安全、高效、集成并且具有丰富功能的企业级应用服务器(Enterprise Application Server),它用于实现基于SOA的企业应用和服务,为企业应用和服务提供坚不可摧的基础架构支撑。...

    使用Jprofiler监控Apusic应用服务器.pdf

    使用JProfiler监控Apusic应用服务器,不仅是性能监控的实践,更是一次对应用架构与性能优化策略的深刻反思。通过上述步骤,我们不仅能即时掌握Apusic服务器的运行状态,还能基于数据分析,制定科学合理的优化方案,...

    金蝶Apusic应用服务器 V10企业版 用户手册+技术白皮书+调优手册

    金蝶Apusic应用服务器V10企业版是金蝶公司推出的一款强大且高效的企业级中间件产品,主要用于构建和运行企业级的Web应用程序和服务。该版本的用户手册、技术白皮书以及调优手册提供了全面的技术指导和优化策略,帮助...

    金蝶Apusic V10 应用服务器用户管理手册

    金蝶Apusic应用服务器是企业级的中间件产品,主要用于构建和运行复杂的企业应用程序。它提供了稳定、高效、安全的运行环境,适用于分布式系统,并具备良好的可扩展性和伸缩性。Apusic V10版本进一步优化了这些特性,...

    Apusic应用服务器5.1文档

    金蝶Apusic应用服务器的详细文档,包括安装、管理、开发等内容。

    金蝶Apusic应用服务器V6产品简介特性版.pptx

    金蝶Apusic应用服务器V6产品简介特性版.pptx

    APUSIC应用服务器配置管理.ppt

    Apusic应用服务器是一款基于Java EE规范的应用服务器,它提供了运行和管理企业级Java应用程序的平台。本文档详细介绍了Apusic应用服务器的配置管理,包括服务器域的管理、J2EE应用的部署及配置、数据库连接池的配置...

    管理Apusic Web服务器

    Apusic Web 服务器是 Apusic 应用服务器中内置的一个高效、安全、可靠的 Web 服务器,提供完整的 Web 服务器的功能,使 Apusic 应用服务器在提供对静态页面和图形的同时,提供对 JSP、Servlet 的高效服务。Apusic ...

    金蝶Apusic应用服务器产品采购可行性分析报告.docx

    金蝶Apusic应用服务器是一款基于Java的企业级应用服务器,它完全遵循J2EE 1.4规范,确保了与行业标准的高度一致性和互操作性。该产品由国内领先的中间件提供商金蝶公司开发,是中国首个拥有自主知识产权并符合J2EE...

    Linux环境下使用Apache搭建Apusic应用服务器集群

    ### Linux环境下使用Apache搭建Apusic应用服务器集群 在IT领域,构建高效稳定的应用服务器集群是企业级服务的关键一环。本文将深入解析如何在Linux环境下,利用Apache与Apusic搭建应用服务器集群,并实现负载均衡,...

    金蝶Apusic应用服务器V6参考b手册b.doc

    金蝶Apusic应用服务器V6参考手册中的Classloader机制 Classloader是Java虚拟机(JVM)中的一种机制,用于加载和管理Java类。金蝶Apusic应用服务器V6参考手册中对Classloader机制进行了详细的介绍,包括Classloader...

    1.1.15金蝶apusic中间件应用解决方案v1.0.pdf

    金蝶Apusic中间件应用解决方案详细介绍了金蝶旗下的一款符合J2EE规范的中间件软件——Apusic应用服务器。J2EE(Java Platform, Enterprise Edition)是由Sun Microsystems(现已被Oracle公司收购)定义的一套企业级...

    AAS-V9.0用户手册.pdf

    金蝶Apusic应用服务器V9.0是金蝶中间件推出的一款企业级Java应用服务器产品,支持Java EE 6规范,提供了包括Web容器、EJB容器、企业级Java Bean等服务在内的丰富功能。本手册针对金蝶Apusic应用服务器V9.0版本的用户...

    Apusic密码修改指引

    3. **登录Apusic控制台检查部署的应用,除EAS、EASWeb、fileserver、jportal等已知应用外,是否有其他未知应用部署。** **注意事项:** - 对于发现的可疑文件或应用,应及时进行隔离或删除,并进一步调查来源。 ##...

    金蝶Apusic用户手册(一)

    金蝶Apusic企业服务总线V7.0用户手册

    Apusic服务器解决数据源的资源引用

    Apusic服务器作为一款高性能、高可用的应用服务器,它提供了丰富的功能来支持各种应用场景。其中,数据源的资源引用是Apusic服务器中的一个重要特性,它允许开发者通过标准的方式来访问和管理数据库连接。本文将详细...

    金蝶中间件Apusic MyEclipse10.x、MyEclipse9.x和Eclipse all-plugins

    2. 实时调试运行在Apusic应用服务器上的应用程序,快速定位和解决问题。 3. 集成Apusic的事务管理、性能监控等功能,提升开发效率。 4. 利用Apusic提供的JMS(Java Message Service)和MTS(Message Transfer ...

    2021年通用apusic license——5用户数

    2021年通用apusic license,适用于apusic9.0以上EAS(EAS8.0以上版本一般都可用),有效期到2021年12月31日。此apusic为5个连接数

    AAS-V10.zip

    标题"AAS-V10.zip"和描述中的"apusic"关键词指向了Apusic应用服务器,这是一款由中国万网(现阿里云)开发的企业级Java应用服务器,它为各种企业应用程序提供了一个运行平台。Apusic应用服务器遵循Java EE(以前称为...

Global site tag (gtag.js) - Google Analytics