1*0c56280aSSorin Basca<?xml version="1.0"?> 2*0c56280aSSorin Basca<!-- 3*0c56280aSSorin Basca * Licensed to the Apache Software Foundation (ASF) under one 4*0c56280aSSorin Basca * or more contributor license agreements. See the NOTICE file 5*0c56280aSSorin Basca * distributed with this work for additional information 6*0c56280aSSorin Basca * regarding copyright ownership. The ASF licenses this file 7*0c56280aSSorin Basca * to you under the Apache License, Version 2.0 (the 8*0c56280aSSorin Basca * "License"); you may not use this file except in compliance 9*0c56280aSSorin Basca * with the License. You may obtain a copy of the License at 10*0c56280aSSorin Basca * 11*0c56280aSSorin Basca * http://www.apache.org/licenses/LICENSE-2.0 12*0c56280aSSorin Basca * 13*0c56280aSSorin Basca * Unless required by applicable law or agreed to in writing, 14*0c56280aSSorin Basca * software distributed under the License is distributed on an 15*0c56280aSSorin Basca * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*0c56280aSSorin Basca * KIND, either express or implied. See the License for the 17*0c56280aSSorin Basca * specific language governing permissions and limitations 18*0c56280aSSorin Basca * under the License. 19*0c56280aSSorin Basca--> 20*0c56280aSSorin Basca 21*0c56280aSSorin Basca<document> 22*0c56280aSSorin Basca 23*0c56280aSSorin Basca <properties> 24*0c56280aSSorin Basca <title>BCEL FAQ</title> 25*0c56280aSSorin Basca </properties> 26*0c56280aSSorin Basca 27*0c56280aSSorin Basca <body> 28*0c56280aSSorin Basca 29*0c56280aSSorin Basca <section name="FAQ"> 30*0c56280aSSorin Basca <p> 31*0c56280aSSorin Basca <b>Q: </b>How can I ... with BCEL? 32*0c56280aSSorin Basca <br/> 33*0c56280aSSorin Basca <b>A: </b>Take a look at 34*0c56280aSSorin Basca <tt>org.apache.bcel.util.BCELifier</tt>, it takes a given class 35*0c56280aSSorin Basca and converts it to a BCEL program (in Java, of course). It will 36*0c56280aSSorin Basca show you how certain code is generated using BCEL. 37*0c56280aSSorin Basca </p> 38*0c56280aSSorin Basca 39*0c56280aSSorin Basca <p> 40*0c56280aSSorin Basca <b>Q: </b> Is the BCEL thread-safe? 41*0c56280aSSorin Basca <br/> 42*0c56280aSSorin Basca <b>A: </b>BCEL was (deliberately) not designed for thread 43*0c56280aSSorin Basca safety. See <a href="http://java.sun.com/docs/books/cp/"> 44*0c56280aSSorin Basca "Concurrent Programming in Java"</a>, by Doug Lea, 45*0c56280aSSorin Basca for an excellent reference on how to build thread-safe wrappers. 46*0c56280aSSorin Basca </p> 47*0c56280aSSorin Basca 48*0c56280aSSorin Basca <p> 49*0c56280aSSorin Basca <b>Q: </b> Can I use BCEL in a commercial product? 50*0c56280aSSorin Basca <br/> 51*0c56280aSSorin Basca <b>A: </b> Yes, this is covered by the <a 52*0c56280aSSorin Basca href="http://www.apache.org/licenses/">Apache License</a>, if you add a note about the original 53*0c56280aSSorin Basca author and where to find the sources, i.e., 54*0c56280aSSorin Basca <a href="http://commons.apache.org/bcel/">http://commons.apache.org/bcel/</a> 55*0c56280aSSorin Basca </p> 56*0c56280aSSorin Basca 57*0c56280aSSorin Basca <p> 58*0c56280aSSorin Basca <b>Q: </b> (Typically for users of Xalan (XSLTC)) I'm getting 59*0c56280aSSorin Basca <pre> 60*0c56280aSSorin Basca ClassGenException: Branch target offset too large for short 61*0c56280aSSorin Basca </pre> 62*0c56280aSSorin Basca when compiling large files. 63*0c56280aSSorin Basca <br/> 64*0c56280aSSorin Basca 65*0c56280aSSorin Basca <b>A: </b> The answer lies in internal limitations of the JVM, 66*0c56280aSSorin Basca branch instruction like goto can not address offsets larger than 67*0c56280aSSorin Basca a short integer, i.e. offsets >= 32767.<br/> 68*0c56280aSSorin Basca The solution is to split the branch into in intermediate hops, 69*0c56280aSSorin Basca which the XSLTC obviously doesn't take care off. 70*0c56280aSSorin Basca (In fact you could replace gotos with the goto_w instruction, 71*0c56280aSSorin Basca but this wouldn't help in the other cases). 72*0c56280aSSorin Basca </p> 73*0c56280aSSorin Basca 74*0c56280aSSorin Basca <p> 75*0c56280aSSorin Basca <b>Q:</b> Can I create or modify classes dynamically with BCEL? 76*0c56280aSSorin Basca <br/> 77*0c56280aSSorin Basca <b>A:</b> BCEL contains useful classes in the 78*0c56280aSSorin Basca <tt>util</tt> package, namely <tt>ClassLoader</tt> and 79*0c56280aSSorin Basca <tt>JavaWrapper</tt>. Take a look at the <tt> ProxyCreator</tt> example. 80*0c56280aSSorin Basca </p> 81*0c56280aSSorin Basca 82*0c56280aSSorin Basca <p> 83*0c56280aSSorin Basca <b>Q:</b> I get a verification error, what can I do? 84*0c56280aSSorin Basca <br/> 85*0c56280aSSorin Basca <b>A:</b> Use the JustIce verifier that comes together with BCEL 86*0c56280aSSorin Basca to get more detailed information: 87*0c56280aSSorin Basca <pre> 88*0c56280aSSorin Basca java org.apache.bcel.verifier.Verifier <your class></pre> 89*0c56280aSSorin Basca </p> 90*0c56280aSSorin Basca 91*0c56280aSSorin Basca </section> 92*0c56280aSSorin Basca<!-- 93*0c56280aSSorin Basca <p> 94*0c56280aSSorin Basca <b>Q: </b> 95*0c56280aSSorin Basca <br/> 96*0c56280aSSorin Basca <b>A: </b> 97*0c56280aSSorin Basca </p> 98*0c56280aSSorin Basca--> 99*0c56280aSSorin Basca</body> 100*0c56280aSSorin Basca</document> 101