<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html; charset=ISO-8859-1"
 http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#ffffff">
<div class="moz-text-flowed"
 style="font-family: -moz-fixed; font-size: 13px;" lang="x-western"><tt>[resent
form the correct account this time]<br>
<br>
On 01/27/2010 08:56 PM, Kabir Khan wrote:
<br>
</tt>
<blockquote type="cite" style="color: rgb(0, 0, 0);"><tt>Flavia and I
have upgraded AOP in AS to 2.1.8.GA which gets rid of all the AOP
errors
  <br>
  <a class="moz-txt-link-freetext"
 href="https://jira.jboss.org/jira/browse/JBAS-7618">https://jira.jboss.org/jira/browse/JBAS-7618</a><br>
  </tt></blockquote>
<tt>Hmm, interesting, I upgraded my AS and now get an error out of
aopc. Or rather I get a verify error from the code it generates:
<br>
<br>
13:04:25,428 WARN&nbsp; [ClassLoaderManager] Unexpected error during load
of:org.jboss.jbossts.baframework.demo.service.HotelImpl:
java.lang.ClassFormatError: Invalid length 170 in LocalVariableTable in
class file org/jboss/jbossts/baframework/demo/service/HotelImpl
<br>
&nbsp;&nbsp;&nbsp; at java.lang.ClassLoader.defineClass1(Native Method)
<br>
&nbsp;&nbsp;&nbsp; at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
<br>
&nbsp;&nbsp;&nbsp; . . .
<br>
<br>
The offending routine is HotelImpl.getHotelData()
<br>
<br>
Here's the relevant before bytecode (I'll spare you all the details but
the two versions are attached:
<br>
<br>
public java.lang.String getHotelData();
<br>
&nbsp; Code:
<br>
&nbsp;&nbsp; Stack=2, Locals=6, Args_size=1
<br>
&nbsp;&nbsp; 0:&nbsp;&nbsp;&nbsp; getstatic&nbsp;&nbsp;&nbsp; #9; //Field log:Lorg/apache/log4j/Logger;
<br>
&nbsp;&nbsp; 3:&nbsp;&nbsp;&nbsp; ldc&nbsp;&nbsp;&nbsp; #60; //String getHotelData()
<br>
&nbsp;&nbsp; . . .
<br>
&nbsp;&nbsp; 153:&nbsp;&nbsp;&nbsp; aload_1
<br>
&nbsp;&nbsp; 154:&nbsp;&nbsp;&nbsp; invokevirtual&nbsp;&nbsp;&nbsp; #66; //Method
java/lang/StringBuffer.toString:()Ljava/lang/String;
<br>
&nbsp;&nbsp; 157:&nbsp;&nbsp;&nbsp; areturn
<br>
<br>
&nbsp;&nbsp; . . .
<br>
&nbsp; LocalVariableTable:
<br>
&nbsp;&nbsp; Start&nbsp; Length&nbsp; Slot&nbsp; Name&nbsp;&nbsp; Signature
<br>
&nbsp;&nbsp; 57&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp; customer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Lorg/jboss/jbossts/baframework/demo/service/CustomerEntityImpl;
<br>
&nbsp;&nbsp; 37&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 47&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp; i$&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ljava/util/Iterator;
<br>
&nbsp;&nbsp; 119&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;&nbsp; room&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Lorg/jboss/jbossts/baframework/demo/service/RoomEntityImpl;
<br>
&nbsp;&nbsp; 97&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 49&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp; i$&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ljava/util/Iterator;
<br>
&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 158&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; this&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Lorg/jboss/jbossts/baframework/demo/service/HotelImpl;
<br>
&nbsp;&nbsp; 25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 133&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp; sb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ljava/lang/StringBuffer;
<br>
&nbsp;&nbsp; 30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 128&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp; customers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ljava/util/List;
<br>
&nbsp;&nbsp; 89&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 69&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp; roomEntities&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ljava/util/List;
<br>
<br>
<br>
and here is the after version:
<br>
<br>
public java.lang.String getHotelData();
<br>
&nbsp; Code:
<br>
&nbsp;&nbsp; Stack=2, Locals=6, Args_size=1
<br>
&nbsp;&nbsp; 0:&nbsp;&nbsp;&nbsp; getstatic&nbsp;&nbsp;&nbsp; #341; //Field
org/jboss/jbossts/baframework/demo/service/HotelImpl.log:Lorg/apache/log4j/Logger;
<br>
&nbsp;&nbsp; 3:&nbsp;&nbsp;&nbsp; ldc_w&nbsp;&nbsp;&nbsp; #343; //String getHotelData()
<br>
&nbsp;&nbsp; 6:&nbsp;&nbsp;&nbsp; invokevirtual&nbsp;&nbsp;&nbsp; #345; //Method
org/apache/log4j/Logger.info:(Ljava/lang/Object;)V
<br>
&nbsp;&nbsp; . . .
<br>
&nbsp;&nbsp; 159:&nbsp;&nbsp;&nbsp; aload_1
<br>
&nbsp;&nbsp; 160:&nbsp;&nbsp;&nbsp; invokevirtual&nbsp;&nbsp;&nbsp; #397; //Method
java/lang/StringBuffer.toString:()Ljava/lang/String;
<br>
&nbsp;&nbsp; 163:&nbsp;&nbsp;&nbsp; areturn
<br>
<br>
&nbsp;&nbsp;&nbsp; . . .
<br>
&nbsp; LocalVariableTable:
<br>
&nbsp;&nbsp; Start&nbsp; Length&nbsp; Slot&nbsp; Name&nbsp;&nbsp; Signature
<br>
&nbsp;&nbsp; 63&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp; customer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Lorg/jboss/jbossts/baframework/demo/service/CustomerEntityImpl;
<br>
&nbsp;&nbsp; 41&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 51&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp; i$&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ljava/util/Iterator;
<br>
&nbsp;&nbsp; 129&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;&nbsp; room&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Lorg/jboss/jbossts/baframework/demo/service/RoomEntityImpl;
<br>
&nbsp;&nbsp; 105&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 53&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp; i$&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ljava/util/Iterator;
<br>
&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 170&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; this&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Lorg/jboss/jbossts/baframework/demo/service/HotelImpl;
<br>
&nbsp;&nbsp; 29&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 141&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp; sb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ljava/lang/StringBuffer;
<br>
&nbsp;&nbsp; 34&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 136&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp; customers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ljava/util/List;
<br>
&nbsp;&nbsp; 97&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 73&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp; roomEntities&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ljava/util/List;
<br>
<br>
So, the offending entry is the one for 'this' which has been pushed off
the end of the bytecode.<br>
<br>
Since this AS includes javassist 3.11.0 this may relate to introduction
of my patch to 3.10 correcting a previous error in updating local
variable tables. In particular I am suspicious about all the ldc_w
instructions which replace ldc. The 170 offset for 'this' is 6 greater
than it should be and there are 6 ldc_w instructions in the method. I
notice also that the start and end positions for e.g i$ and sb which
both follow two ldc instructions are out by 2 in the new version.
Similarly, roomEmtities is 4 beyond where it should be and follows 4
ldc instructions My fix might possibly have performed a counting error
in places where javassist is replacing ldc with ldc_w but I didn't
directly modify any of the code which counted changes in length. I
think more likely I have unmasked an existing error in counting length
changes which did not previously trip the verifier but has done so now
because my update is inserting new extents and they now go off the end
of the bytecode. I will investigate further.
<br>
<br>
regards,
<br>
<br>
<br>
Andrew Dinn
<br>
-----------
</tt>
</div>
<br>
</body>
</html>