garyp       01/07/14 22:58:32

  Modified:    java/xdocs/sources/xalan extensions.xml
  Log:
  Add section to explain processing of return values from extension function 
calls.
  
  Revision  Changes    Path
  1.18      +42 -0     xml-xalan/java/xdocs/sources/xalan/extensions.xml
  
  Index: extensions.xml
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/xdocs/sources/xalan/extensions.xml,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- extensions.xml    2001/06/01 06:35:04     1.17
  +++ extensions.xml    2001/07/15 05:58:32     1.18
  @@ -352,6 +352,48 @@
   </ol>
   <p>Any extension function written in Java can have a first parameter of type 
<code>org.apache.xalan.extensions.ExpressionContext</code>. Any method with an 
ExpressionContext as the first parameter will score higher than any method 
which does not have an ExpressionContext as a first parameter.</p>
   </s3>
  +
  +<anchor name="ext-func-retval"/>
  +<s3 title="Return values">
  +<p>The &xslt4j; extension mechanism examines the class of the value returned 
from a function and converts the value into an XSLT type according to the 
following table:</p>
  +  <table>
  +    <tr>
  +      <th>Java Types</th>
  +      <th>XSLT Type</th>
  +    </tr>
  +    <tr>
  +       
<td>org.w3c.dom.traversal.NodeIterator<br/>org.apache.xml.dtm.DTM<br/>org.apache.xml.dtm.DTMAxisIterator<br/>org.apache.xml.dtm.DTMIterator<br/>org.w3c.dom.Node</td>
  +       <td>Node-Set</td>
  +    </tr>
  +    <tr>
  +       <td>java.lang.String</td>
  +       <td>String</td>
  +    </tr>
  +    <tr>
  +       <td>java.lang.Boolean</td>
  +       <td>Boolean</td>
  +    </tr>
  +    <tr>
  +       <td>java.lang.Number</td>
  +       <td>Number</td>
  +    </tr>
  +    <tr>
  +       <td>org.w3c.dom.DocumentFragment</td>
  +       <td>Result Tree Fragment</td>
  +    </tr>
  +    <tr>
  +       <td>org.apache.xpath.objects.XObject</td>
  +       <td>Specified XSLT Type</td>
  +    </tr>
  +    <tr>
  +       <td>All other classes</td>
  +       <td>Non-XSLT Type</td>
  +    </tr>
  +  </table>
  +  <p>Note that the above test is applied using <code>instanceof</code> so 
that any subclasses of the classes listed above will be treated the same as the 
listed superclass.  For example, a <code>java.lang.Double</code> will be 
treated the same as a <code>java.lang.Number</code> and will be converted to an 
XSLT Number.</p>
  +  <note>The return value conversion can somtimes cause confusion.  For 
example, if your extension function returns an object that is a subclass of 
NodeIterator, that object will be converted by &xslt4j; to an XSLT Node-Set.  
If you later attempt to treat that object as a non-XSLT object of your original 
class and try to invoke a method on that object, your method invocation will 
fail.</note>
  +</s3>
  +
   <anchor name="ext-func-calls"/>
   <s3 title="Extension function Java calls">
   <p>The technique for instantiating Java objects and calling Java methods 
depends on the format of the extension namespace that was declared.  See <link 
anchor="java-namespace-declare">Declare the namespace</link> for the three 
different formats of namespace declarations for Java extensions. For each 
namespace format, the section below describes how to instantiate an object, how 
to invoke an instance method, and how to invoke a static method. The sections 
below explain, for each syntax, which methods are <ref>qualified</ref> for 
method selection as described in the preceeding section.</p>
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to