gpt4 book ai didi

大型 WSDL( Play Framework )上的 Java 内存不足错误

转载 作者:行者123 更新时间:2023-11-30 06:31:37 24 4
gpt4 key购买 nike

我们在尝试生成和使用非常大的代理文件时遇到了问题(郑重声明,它来自 MSCRM Dynamics WSDL)。在我开始讨论这个问题之前:我们已经在使用 NetBeans 的独立应用程序中完成了这项工作。我们使用“WSDL2Java -uri etc etc”生成了所有代理文件。戳了几个web方法,成功得到响应等。

现在,当我们尝试将它集成到 eclipse 中的目标项目(通过 play 框架启动)时,它会抛出内存不足错误。这发生在我什至尝试调用任何网络服务之前。我读过有关 Play Framework 和 Axis2 的内存问题,但目前还没有看到该问题的任何解决方案。我试过增加 Play 时的内存,但这没有帮助。我在 Windows 上运行,但即使我有 64 位操作系统似乎也只能分配 1.5gb 给 Play 堆空间:

play clean  
play run . -Xms1536m

我以为这就足够了,但是,唉!

作为引用,堆栈跟踪是:

 An unexpected error occured caused by exception OutOfMemoryError: Java heap space

play.exceptions.UnexpectedException: Unexpected Error
at play.Invoker$Invocation.onException(Invoker.java:244)
at play.Invoker$Invocation.run(Invoker.java:286)
at Invocation.HTTP Request(Play!) Caused by: java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Unknown Source)
at java.lang.String.<init>(Unknown Source)
at java.lang.StringBuffer.toString(Unknown Source)
at java.io.StringWriter.toString(Unknown Source)
at org.apache.commons.io.IOUtils.toString(IOUtils.java:383)
at play.libs.IO.readContentAsString(IO.java:60)
at play.libs.IO.readContentAsString(IO.java:49)
at play.vfs.VirtualFile.contentAsString(VirtualFile.java:178)
at play.classloading.ApplicationClasses$ApplicationClass.refresh(ApplicationClasses.java:199)
at play.classloading.ApplicationClasses$ApplicationClass.<init>(ApplicationClasses.java:191)
at play.classloading.ApplicationClasses.getApplicationClass(ApplicationClasses.java:49)
at play.classloading.ApplicationCompiler$2.acceptResult(ApplicationCompiler.java:266)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:478)
at play.classloading.ApplicationCompiler.compile(ApplicationCompiler.java:282)
at play.classloading.ApplicationClassloader.getAllClasses(ApplicationClassloader.java:424)
at play.Play.start(Play.java:505)
at play.Play.detectChanges(Play.java:618)
at play.Invoker$Invocation.init(Invoker.java:198)
... 1 more

任何帮助或想法将不胜感激!


更新 1

根据 FloppyDisk 的建议,我检查/更改了以下内容以查看是否有帮助:

首先,使用帖子How can I tell if I'm running in 64-bit JVM or 32-bit JVM (from within a program)? ,我运行了以下命令以确保我运行的是 64 位 jdk:

java -d64 -version

没有抛出任何错误。接下来,我尝试将 eclipse 中的内存设置更改为以下内容:

-vmargs
-Xms512m
-Xmx1024m
-XX:MaxPermSize=512m

重新启动 eclipse 并重试。不幸的是,同样的问题仍然存在。

最后,我尝试使用 Axis2 配置在 wsdl 上引入减少的缓存。修改 Axis2.xml 以包括以下内容:

<parameter name="reduceWSDLMemoryCache">true</parameter>

不幸的是,同样的问题仍然存在。

最佳答案

我们可以做的简单事情就是增加堆大小

如果是 windows 版本,转到:ApacheCXF/bin 并编辑 wsdl2java.bat。

Modify -Xmx128M to -Xmx2048M

最后以管理员模式重启命令提示符并执行以下命令

wsdl2java -d src-cxf -b custom.xml -exsh true -autoNameResolution -verbose ABC.wsdl

关于大型 WSDL( Play Framework )上的 Java 内存不足错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9633099/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com