xref: /aosp_15_r20/external/apache-commons-bcel/src/site/xdoc/faq.xml (revision 0c56280ab0842982c46a149f7b9eaa497e31e292)
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 &lt;your class&gt;</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