本文介绍了JavaEE + Glassfish - BufferUnderflowException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个非常简单的Java EE应用程序,其中一些bean使用JMS进行通信。当我尝试部署和调试我的应用程序时,我得到了这个

I have a very simple Java EE application with some beans that use JMS to communicate. When I try to deploy and debug my application, I get this

Informazioni:   visiting unvisited references
Grave:   Unknow type constant pool 18 at position38
Grave:   Unknow type constant pool 0 at position39
Grave:   Unknow type constant pool 0 at position40
Grave:   Unknow type constant pool 105 at position43
Grave:   Unknow type constant pool 116 at position44
Grave:   Unknow type constant pool 101 at position45
Grave:   Unknow type constant pool 32 at position46
Grave:   Unknow type constant pool 108 at position47
Grave:   Unknow type constant pool -30 at position48
Grave:   Unknow type constant pool -128 at position49
Grave:   Unknow type constant pool -103 at position50
Grave:   Unknow type constant pool 105 at position51
Grave:   Unknow type constant pool 110 at position52
Grave:   Unknow type constant pool 110 at position53
Grave:   Unknow type constant pool 111 at position54
Grave:   Unknow type constant pool 118 at position55
Grave:   Unknow type constant pool 97 at position56
Grave:   Unknow type constant pool 116 at position57
Grave:   Unknow type constant pool 105 at position58
Grave:   Unknow type constant pool 118 at position59
Grave:   Unknow type constant pool 97 at position60
Grave:   Unknow type constant pool 32 at position61
Grave:   Unknow type constant pool 116 at position62
Grave:   Unknow type constant pool 101 at position63
Grave:   Unknow type constant pool 99 at position64
Grave:   Unknow type constant pool 110 at position65
Grave:   Unknow type constant pool 111 at position66
Grave:   Unknow type constant pool 108 at position67
Grave:   Unknow type constant pool 111 at position68
Grave:   Unknow type constant pool 103 at position69
Grave:   Unknow type constant pool 105 at position70
Grave:   Unknow type constant pool 97 at position71
Grave:   Unknow type constant pool 32 at position72
Grave:   Unknow type constant pool 68 at position73
Grave:   Unknow type constant pool 111 at position74
Grave:   Unknow type constant pool 119 at position75
Grave:   Unknow type constant pool 110 at position76
Grave:   Unknow type constant pool 108 at position77
Grave:   Unknow type constant pool 111 at position78
Grave:   Unknow type constant pool 97 at position79
Grave:   Unknow type constant pool 100 at position80
Grave:   Unknow type constant pool 32 at position81
Grave:   Unknow type constant pool 66 at position82
Grave:   Unknow type constant pool 111 at position83
Grave:   Unknow type constant pool 111 at position84
Grave:   Unknow type constant pool 115 at position85
Grave:   Unknow type constant pool 116 at position86
Grave:   Unknow type constant pool 101 at position87
Grave:   Unknow type constant pool 114 at position88
Grave:   Unknow type constant pool 44 at position89
Grave:   Unknow type constant pool 32 at position90
Grave:   Unknow type constant pool 112 at position91
Grave:   Unknow type constant pool 111 at position92
Grave:   Unknow type constant pool 116 at position93
Grave:   Unknow type constant pool 114 at position94
Grave:   Unknow type constant pool 97 at position95
Grave:   Unknow type constant pool 105 at position96
Grave:   Unknow type constant pool 32 at position97
Grave:   Unknow type constant pool 97 at position98
Grave:   Unknow type constant pool 117 at position99
Grave:   Unknow type constant pool 109 at position100
Grave:   Unknow type constant pool 101 at position101
Grave:   Unknow type constant pool 110 at position102
Grave:   Unknow type constant pool 116 at position103
Grave:   Unknow type constant pool 97 at position104
Grave:   Unknow type constant pool 114 at position105
Grave:   Unknow type constant pool 101 at position106
Grave:   Unknow type constant pool 32 at position107
Grave:   Unknow type constant pool 115 at position108
Grave:   Unknow type constant pool 105 at position109
Grave:   Unknow type constant pool 103 at position110
Grave:   Unknow type constant pool 110 at position111
Grave:   Unknow type constant pool 105 at position112
Grave:   Unknow type constant pool 102 at position113
Grave:   Unknow type constant pool 105 at position114
Grave:   Unknow type constant pool 99 at position115
Grave:   Unknow type constant pool 97 at position116
Grave:   Unknow type constant pool 116 at position117
Grave:   Unknow type constant pool 105 at position118
Grave:   Unknow type constant pool 118 at position119
Grave:   Unknow type constant pool 97 at position120
Grave:   Unknow type constant pool 109 at position121
Grave:   Unknow type constant pool 101 at position122
Grave:   Unknow type constant pool 110 at position123
Grave:   Unknow type constant pool 116 at position124
Grave:   Unknow type constant pool 101 at position125
Grave:   Unknow type constant pool 32 at position126
Grave:   Unknow type constant pool 108 at position127
Grave:   Unknow type constant pool 97 at position128
Grave:   Unknow type constant pool 32 at position129
Grave:   Unknow type constant pool 118 at position130
Grave:   Unknow type constant pool 101 at position131
Grave:   Unknow type constant pool 108 at position132
Grave:   Unknow type constant pool 111 at position133
Grave:   Unknow type constant pool 99 at position134
Grave:   Unknow type constant pool 105 at position135
Grave:   Unknow type constant pool 116 at position136
Grave:   Unknow type constant pool -61 at position137
Grave:   Unknow type constant pool -96 at position138
Grave:   Unknow type constant pool 32 at position139
Grave:   Unknow type constant pool 100 at position140
Grave:   Unknow type constant pool 105 at position141
Grave:   Unknow type constant pool 32 at position142
Grave:   Unknow type constant pool 100 at position143
Grave:   Unknow type constant pool 111 at position144
Grave:   Unknow type constant pool 119 at position145
Grave:   Unknow type constant pool 110 at position146
Grave:   Unknow type constant pool 108 at position147
Grave:   Unknow type constant pool 111 at position148
Grave:   Unknow type constant pool 97 at position149
Grave:   Unknow type constant pool 100 at position150
Grave:   Unknow type constant pool 32 at position151
Grave:   Unknow type constant pool 100 at position152
Grave:   Unknow type constant pool 101 at position153
Grave:   Unknow type constant pool 105 at position154
Grave:   Unknow type constant pool 32 at position155
Grave:   Unknow type constant pool 100 at position156
Grave:   Unknow type constant pool 97 at position157
Grave:   Unknow type constant pool 116 at position158
Grave:   Unknow type constant pool 105 at position159
Grave:   Unknow type constant pool 32 at position160
Grave:   Unknow type constant pool 99 at position161
Grave:   Unknow type constant pool 111 at position162
Grave:   Unknow type constant pool 109 at position163
Grave:   Unknow type constant pool 98 at position164
Grave:   Unknow type constant pool 105 at position165
Grave:   Unknow type constant pool 110 at position166
Grave:   Unknow type constant pool 97 at position167
Grave:   Unknow type constant pool 110 at position168
Grave:   Unknow type constant pool 100 at position169
Grave:   Unknow type constant pool 111 at position170
Grave:   Unknow type constant pool 32 at position171
Grave:   Unknow type constant pool 87 at position172
Grave:   Unknow type constant pool 105 at position173
Grave:   Unknow type constant pool 45 at position174
Grave:   Unknow type constant pool 70 at position175
Grave:   Unknow type constant pool 105 at position176
Grave:   Unknow type constant pool 32 at position177
Grave:   Unknow type constant pool 101 at position178
Grave:   Unknow type constant pool 32 at position179
Grave:   Unknow type constant pool 52 at position180
Grave:   Unknow type constant pool 71 at position181
Grave:   Unknow type constant pool 32 at position182
Grave:   Unknow type constant pool 76 at position183
Grave:   Unknow type constant pool 84 at position184
Grave:   Unknow type constant pool 69 at position185
Grave:   Unknow type constant pool 46 at position186
Grave:   Unknow type constant pool 103 at position188
Grave:   Unknow type constant pool 110 at position189
Grave:   Unknow type constant pool 105 at position190
Grave:   Unknow type constant pool 32 at position191
Grave:   Unknow type constant pool 115 at position192
Grave:   Unknow type constant pool 105 at position193
Grave:   Unknow type constant pool 116 at position194
Grave:   Unknow type constant pool 117 at position195
Grave:   Unknow type constant pool 97 at position196
Grave:   Unknow type constant pool 122 at position197
Grave:   Unknow type constant pool 105 at position198
Grave:   Unknow type constant pool 111 at position199
Grave:   Unknow type constant pool 110 at position200
Grave:   Unknow type constant pool 101 at position201
Grave:   Unknow type constant pool 32 at position202
Grave:   Unknow type constant pool 105 at position203
Grave:   Unknow type constant pool 108 at position204
Grave:   Unknow type constant pool 32 at position205
Grave:   Unknow type constant pool 116 at position206
Grave:   Unknow type constant pool 117 at position207
Grave:   Unknow type constant pool 111 at position208
Grave:   Unknow type constant pool 32 at position209
Grave:   Unknow type constant pool 71 at position210
Grave:   Unknow type constant pool 97 at position211
Grave:   Unknow type constant pool 108 at position212
Grave:   Unknow type constant pool 97 at position213
Grave:   Unknow type constant pool 120 at position214
Grave:   Unknow type constant pool 121 at position215
Grave:   Unknow type constant pool 32 at position216
Grave:   Unknow type constant pool 83 at position217
Grave:   Unknow type constant pool 53 at position218
Grave:   Unknow type constant pool 32 at position219
Grave:   Unknow type constant pool 115 at position220
Grave:   Unknow type constant pool 97 at position221
Grave:   Unknow type constant pool 114 at position222
Grave:   Unknow type constant pool -61 at position223
Grave:   Unknow type constant pool -96 at position224
Grave:   Unknow type constant pool 32 at position225
Grave:   Unknow type constant pool 112 at position226
Grave:   Unknow type constant pool 114 at position227
Grave:   Unknow type constant pool 111 at position228
Grave:   Unknow type constant pool 116 at position229
Grave:   Unknow type constant pool 101 at position230
Grave:   Unknow type constant pool 116 at position231
Grave:   Unknow type constant pool 116 at position232
Grave:   Unknow type constant pool 111 at position233
Grave:   Unknow type constant pool 32 at position234
Grave:   Unknow type constant pool 100 at position235
Grave:   Unknow type constant pool 97 at position236
Grave:   Unknow type constant pool 32 at position237
Grave:   Unknow type constant pool 97 at position238
Grave:   Unknow type constant pool 99 at position239
Grave:   Unknow type constant pool 113 at position240
Grave:   Unknow type constant pool 117 at position241
Grave:   Unknow type constant pool 97 at position242
Grave:   Unknow type constant pool 44 at position243
Grave:   Unknow type constant pool 32 at position244
Grave:   Unknow type constant pool 112 at position245
Grave:   Unknow type constant pool 105 at position246
Grave:   Unknow type constant pool 111 at position247
Grave:   Unknow type constant pool 103 at position248
Grave:   Unknow type constant pool 103 at position249
Grave:   Unknow type constant pool 105 at position250
Grave:   Unknow type constant pool 97 at position251
Grave:   Unknow type constant pool 44 at position252
Grave:   Unknow type constant pool 32 at position253
Grave:   Unknow type constant pool 112 at position254
Grave:   Unknow type constant pool 111 at position255
Grave:   Unknow type constant pool 108 at position256
Grave:   Unknow type constant pool 118 at position257
Grave:   Unknow type constant pool 101 at position258
Grave:   Unknow type constant pool 114 at position259
Grave:   Unknow type constant pool 101 at position260
Grave:   Unknow type constant pool 32 at position261
Grave:   Unknow type constant pool 101 at position262
Grave:   Unknow type constant pool 32 at position263
Grave:   Unknow type constant pool 115 at position264
Grave:   Unknow type constant pool 97 at position265
Grave:   Unknow type constant pool 98 at position266
Grave:   Unknow type constant pool 98 at position267
Grave:   Unknow type constant pool 105 at position268
Grave:   Unknow type constant pool 97 at position269
Grave:   Unknow type constant pool 44 at position270
Grave:   Unknow type constant pool 32 at position271
Grave:   Unknow type constant pool 103 at position272
Grave:   Unknow type constant pool 114 at position273
Grave:   Unknow type constant pool 97 at position274
Grave:   Unknow type constant pool 122 at position275
Grave:   Unknow type constant pool 105 at position276
Grave:   Unknow type constant pool 101 at position277
Grave:   Unknow type constant pool 32 at position278
Grave:   Unknow type constant pool 97 at position279
Grave:   Unknow type constant pool 108 at position280
Grave:   Unknow type constant pool 108 at position281
Grave:   Unknow type constant pool 97 at position282
Grave:   Unknow type constant pool 32 at position283
Grave:   Unknow type constant pool 99 at position284
Grave:   Unknow type constant pool 101 at position285
Grave:   Unknow type constant pool 114 at position286
Grave:   Unknow type constant pool 116 at position287
Grave:   Unknow type constant pool 105 at position288
Grave:   Unknow type constant pool 102 at position289
Grave:   Unknow type constant pool 105 at position290
Grave:   Unknow type constant pool 99 at position291
Grave:   Unknow type constant pool 97 at position292
Grave:   Unknow type constant pool 122 at position293
Grave:   Unknow type constant pool 105 at position294
Grave:   Unknow type constant pool 111 at position295
Grave:   Unknow type constant pool 110 at position296
Grave:   Unknow type constant pool 101 at position297
Grave:   Unknow type constant pool 32 at position298
Grave:   Unknow type constant pool 73 at position299
Grave:   Unknow type constant pool 80 at position300
Grave:   Unknow type constant pool 54 at position301
Grave:   Unknow type constant pool 55 at position302
Grave:   Unknow type constant pool 46 at position303
Grave:   Unknow type constant pool 15 at position330
Grave:   Unknow type constant pool 118 at position333
Grave:   Unknow type constant pool 16 at position334
Grave:   Exception while deploying the app [AsteRibasso]
Grave:   Exception during lifecycle processing
java.nio.BufferUnderflowException
    at java.nio.HeapByteBuffer.get(HeapByteBuffer.java:151)
    at com.sun.enterprise.deployment.annotation.introspection.ConstantPoolInfo.containsAnnotation(ConstantPoolInfo.java:86)
    at com.sun.enterprise.deployment.annotation.introspection.ClassFile.containsAnnotation(ClassFile.java:133)
    at com.sun.enterprise.deployment.annotation.introspection.ClassFile.containsAnnotation(ClassFile.java:87)
    at com.sun.enterprise.deployment.util.AnnotationDetector.containsAnnotation(AnnotationDetector.java:157)
    at com.sun.enterprise.deployment.util.AnnotationDetector.containsAnnotation(AnnotationDetector.java:146)
    at com.sun.enterprise.deployment.util.AnnotationDetector.hasAnnotationInArchive(AnnotationDetector.java:137)
    at com.sun.enterprise.deployment.archivist.ApplicationArchivist.getApplicationFromIntrospection(ApplicationArchivist.java:393)
    at com.sun.enterprise.deployment.archivist.ApplicationArchivist.createApplication(ApplicationArchivist.java:264)
    at org.glassfish.javaee.full.deployment.EarHandler.getApplicationHolder(EarHandler.java:578)
    at org.glassfish.javaee.full.deployment.EarHandler.initCompositeMetaData(EarHandler.java:555)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.getSniffers(ApplicationLifecycle.java:655)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:358)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219)
    at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:491)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:539)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:535)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:360)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:534)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:565)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:557)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:360)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:556)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1464)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1300(CommandRunnerImpl.java:109)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1846)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1722)
    at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:534)
    at com.sun.enterprise.v3.admin.AdminAdapter.onMissingResource(AdminAdapter.java:224)
    at org.glassfish.grizzly.http.server.StaticHttpHandlerBase.service(StaticHttpHandlerBase.java:189)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545)
    at java.lang.Thread.run(Thread.java:745)

Grave:   Exception while deploying the app [AsteRibasso]

无法在互联网上找到与GlassFish 4.1(build 13)和jre1.8.0_31(我在NetBeans 8.0.2中使用)相关的这个问题。有人可以帮帮我吗?

Can't find anything on the internet about this problem in relation with GlassFish 4.1 (build 13) and jre1.8.0_31, which I'm using in NetBeans 8.0.2. Can someone help me?

推荐答案

我遇到了同样的问题。

我跟踪问题到jar glassfish / modules / dol.jar ()。此jar中的类 com.sun.enterprise.deployment.annotation.introspection.ConstantPoolInfo 负责在部署时测试相关注释的类。

I tracked the problem to the jar glassfish/modules/dol.jar (sources). The class com.sun.enterprise.deployment.annotation.introspection.ConstantPoolInfo within this jar is responsible for testing classes on relevant annotations while deployment.

问题:

该类通过逐字节读取和解释<$ c的特殊部分来完成此操作$ c> .class files:常量池()。该池包含诸如所有排序的数量,字符串,标识符名称,对类和方法的引用以及类型描述符的值()。这包括注释的类名。

问题是,使用Java 7增加了常量池的可能内容,并添加了一些额外的条目类型以支持使用JVM的脚本语言。 ConstantPoolInfo 不支持这些条目(方法句柄,方法类型和InvokeDynamic(ID 15,16和18))。当读取并检查其中一个常量池条目的类型标识符字节时,该类只记录警告Unknow [sic]类型常量池x在位置i并继续处理下一个字节,缺少跳过属于该字节的字节当前类型的数据结构(无论如何它们都不相关)。
这导致完全陷入困境,因为应该跳过的下一个字节被解释为类型标识符。

在某些情况下,错误解释的字节会导致执行代码UTF 8 / ASCII-entry情况,将接下来的两个字节解释为常量池中String的长度,然后想要读取该字符串。这就是 BufferUnderflowException 来自的地方:包含常量池数据的输入源可能不会像请求的那样保留字节。

The class does this by byte-wise reading and interpreting a special part of the .class files: the constant pool (JVM spec). The pool contains "values such as numbers of all sorts, strings, identifier names, references to classes and methods, and type descriptors" (Wiki). This includes the class names of annotations.
The problem is, that the possible content of the constant pool increased with Java 7 and some additional entry types were added to support script languages with the JVM. Those entries (Method handle, Method type and InvokeDynamic (ids 15, 16 and 18)) are not supported by ConstantPoolInfo yet. When reading and checking the type identifier byte of one of those constant pool entries, the class simply logs the warning "Unknow [sic] type constant pool x at position i" and proceeds processing with the next byte, missing to skip bytes belonging to the current type's data structure (they are not relevant anyway).This leads to a complete mess up, as the next byte which should have been skipped is interpreted as type identifier.
In some situations, the wrongly interpreted byte leads to the execution of the code for the "UTF 8/ASCII"-entry case, with interprets the next two bytes as the length of a String in the constant pool and then wants to read that String. And this is where the BufferUnderflowException comes from: The input source containing the constant pool's data may not hold as may bytes as requested.

何时何地:

使用Java 7代码时没有问题,因为通常的开发人员/编译器没有产生需要额外常量池条目类型的字节代码。

使用Java 8,这改变了:Lambdas和methdod引用使用它。

There was no problem with this when using Java 7 code, as the usual developer/compiler did not produce byte code which needed the additional constant pool entry types.
With Java 8 this changed: Lambdas and methdod references make use of it.

由于某些原因我没有检查,在war-modules中lambda只会出现问题,但只有ejb-modules才会出现问题。也许,那里没有对类文件进行内省 - 至少不是基于ConstantPoolInfo。

For some reason I did not examine, the problem does not happen with lambdas in war-modules but only with ejb-modules. Probably, the introspection of the class files is not done there - at least not based on ConstantPoolInfo.

解决方案:

我打开了一个错误报告:。

I opened a bug report: https://java.net/jira/browse/GLASSFISH-21510.

除了避免使用lambdas /方法引用(或编译的任何内容)之外,我没有其他解决方案ejb模块中的 invokedynamic 字节码。

I don't have a solution other than to refrain from using lambdas/method references (or anything that compiles to invokedynamic bytecode) in ejb modules.

重构代码,直到它只产生警告并且没有异常可能会有所帮助,但我不认为它是一个干净的解决方案。任何代码更改或jdk更新都可能会再次中断。除此之外,对班级的检查仍然存在,可能会导致其他问题。

Refactoring the code until it only produces warnings and no exception may help but I don't consider it a clean solution. It may break again with any code change or jdk update. Apart from that, the inspection of the class is still broken and may cause other problems.

[TL; DR]

从ejb-projects中删除lambdas /方法引用。

[/ TL; DR]

这篇关于JavaEE + Glassfish - BufferUnderflowException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-30 07:10