You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by sb...@locus.apache.org on 2000/08/01 00:11:36 UTC
cvs commit: xml-xalan/java/src/org/apache/xalan/extensions ExtensionFunctionHandler.java ExtensionNSHandler.java ExtensionsTable.java MethodResolver.java
sboag 00/07/31 15:11:35
Modified: java/src/org/apache/xalan/extensions
ExtensionFunctionHandler.java
ExtensionNSHandler.java ExtensionsTable.java
MethodResolver.java
Log:
Fix problems with calling extension elements, method overloading. More work to come...
Revision Changes Path
1.6 +51 -30 xml-xalan/java/src/org/apache/xalan/extensions/ExtensionFunctionHandler.java
Index: ExtensionFunctionHandler.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/extensions/ExtensionFunctionHandler.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- ExtensionFunctionHandler.java 2000/07/31 03:53:49 1.5
+++ ExtensionFunctionHandler.java 2000/07/31 22:11:30 1.6
@@ -171,9 +171,8 @@
public void setElements (String elemNames)
{
if (elemNames == null)
- {
return;
- }
+
StringTokenizer st = new StringTokenizer (elemNames, " \t\n\r", false);
Object junk = new Object ();
while (st.hasMoreTokens ())
@@ -342,6 +341,7 @@
}
catch (Exception e)
{
+ e.printStackTrace();
throw new SAXException(e);
/*
Throwable t = (e instanceof InvocationTargetException) ?
@@ -417,69 +417,78 @@
}
javaObject = null;
hasCalledCTor = true;
+
+ for (int i = 0; i < argArray.length; i++)
+ {
+ Object o = args.elementAt (i);
+ argArray[i] = o;
+ }
+
}
else
{
if(!hasCalledCTor)
{
+ // System.out.println("this.classObject: "+this.classObject);
if(null == javaObject)
{
- javaObject = this.classObject.newInstance();
+ if(null != this.classObject)
+ javaObject = this.classObject.newInstance();
+ else
+ javaObject = this.classObject;
}
argArray = new Object[args.size () + 1];
argArray[0] = javaObject;
- argStart = 1;
- // argArray = new Object[args.size ()];
- // argStart = 0;
+
+ for (int i = 0; i < args.size(); i++)
+ {
+ Object o = args.elementAt (i);
+ argArray[i+1] = o;
+ }
}
else
{
- argArray = new Object[args.size ()];
if(args.size() > 0)
{
+ argArray = new Object[args.size ()];
Object o = args.elementAt (0);
argArray[0] = (o instanceof XObject) ? ((XObject)o).object () : o;
- argStart = 1;
+ for (int i = 1; i < args.size(); i++)
+ {
+ o = args.elementAt (i);
+ argArray[i] = o;
+ }
}
else
- argStart = 0;
+ {
+ argArray = new Object[1];
+ Object o = args.elementAt (0);
+ argArray[0] = (o instanceof XObject) ? ((XObject)o).object () : o;
+ }
}
}
+ return callJava(javaObject, funcName, argArray, methodKey, exprContext);
}
else
{
e = ((com.ibm.bsf.BSFManager)mgr).loadScriptingEngine (scriptLang);
argArray = new Object[args.size ()];
- argStart = 0;
- }
-
- if(isJava)
- {
- // TODO: Fix all this.
- for (int i = argStart; i < args.size (); i++)
- {
- Object o = args.elementAt (i);
- argArray[i] = o;
- }
- return callJava(javaObject, funcName, argArray, methodKey, exprContext);
- }
- else
- {
- // convert the xobject args to their object forms
+
for (int i = 0; i < args.size (); i++)
{
Object o = args.elementAt (i);
- argArray[i+argStart] =
- (o instanceof XObject) ? ((XObject)o).object () : o;
+ argArray[i] = (o instanceof XObject) ? ((XObject)o).object () : o;
}
return e.call (null, funcName, argArray);
}
+
}
catch (Exception e)
{
+ e.printStackTrace();
String msg = e.getMessage();
if(null != msg)
{
@@ -544,8 +553,11 @@
}
return;
}
- else
+ else // classObj = null
{
+ if(null == scriptSrcURL)
+ scriptSrcURL = namespaceUri; // Use the namespace URL
+
if (scriptLang.equals ("javaclass") && (scriptSrcURL != null))
{
try
@@ -557,7 +569,15 @@
cname = scriptSrcURL.substring (6);
isClass = true;
}
+ else
+ {
+ // ?? -sb
+ cname = scriptSrcURL;
+ isClass = true;
+ }
classObject = Class.forName (cname);
+ // System.out.println("classObject: "+classObject);
+
if (isClass)
{
javaObject = classObject;
@@ -579,9 +599,10 @@
}
// if scriptSrcURL is specified read it off
- if (scriptSrcURL != null)
+ if ((scriptSrcURL != null) && !(scriptLang.equals ("javaclass")
+ || scriptLang.equals ("xslt-javaclass")))
{
- throw new SAXException ("src attr not supported (yet)");
+ throw new SAXException ("src attr not supported (yet) for: "+scriptLang);
}
if (scriptSrc == null)
1.5 +4 -12 xml-xalan/java/src/org/apache/xalan/extensions/ExtensionNSHandler.java
Index: ExtensionNSHandler.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/extensions/ExtensionNSHandler.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ExtensionNSHandler.java 2000/07/30 22:45:16 1.4
+++ ExtensionNSHandler.java 2000/07/31 22:11:31 1.5
@@ -89,7 +89,6 @@
public class ExtensionNSHandler extends ExtensionFunctionHandler
{
TransformerImpl xslp; // xsl transformer for whom I'm working
- Hashtable elements = new Hashtable (); // ext. elements of this namespace
boolean componentDescLoaded; // true when info from the component desc
// has been loaded. This gets set as soon
// as any of the info has been specified.
@@ -186,17 +185,9 @@
*/
public void setElements (String elemNames)
{
- if (elemNames == null)
- {
+ if (elemNames == null)
return;
- }
- StringTokenizer st = new StringTokenizer (elemNames, " \t\n\r", false);
- Object junk = new Object ();
- while (st.hasMoreTokens ())
- {
- String tok = st.nextToken ();
- elements.put (tok, junk); // just stick it in there basically
- }
+ super.setElements(elemNames);
componentDescLoaded = true;
}
@@ -498,7 +489,8 @@
public void error (SAXParseException exception)
throws SAXException
{
- System.out.println("Parser error: "+exception.getMessage());
+ throw exception;
+ // System.out.println("Parser error: "+exception.getMessage());
}
/**
1.5 +1 -1 xml-xalan/java/src/org/apache/xalan/extensions/ExtensionsTable.java
Index: ExtensionsTable.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/extensions/ExtensionsTable.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ExtensionsTable.java 2000/07/30 22:45:16 1.4
+++ ExtensionsTable.java 2000/07/31 22:11:31 1.5
@@ -234,7 +234,7 @@
}
catch (Exception e)
{
- // e.printStackTrace();
+ e.printStackTrace();
// throw new XPathProcessorException ("Extension function '" + ns +
// ":" + funcName +
// "', threw exception: " + e, e);
1.5 +40 -22 xml-xalan/java/src/org/apache/xalan/extensions/MethodResolver.java
Index: MethodResolver.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/extensions/MethodResolver.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- MethodResolver.java 2000/07/31 03:53:49 1.4
+++ MethodResolver.java 2000/07/31 22:11:31 1.5
@@ -49,27 +49,32 @@
int numberMethodParams = paramTypes.length;
int paramStart = 0;
boolean isFirstExpressionContext = false;
- int scoreStart = 0;
+ int scoreStart;
// System.out.println("numberMethodParams: "+numberMethodParams);
// System.out.println("argsIn.length: "+argsIn.length);
// System.out.println("exprContext: "+exprContext);
if(numberMethodParams == (argsIn.length+1))
{
Class javaClass = paramTypes[0];
- // System.out.println("first javaClass: "+javaClass.getName());
+ // System.out.println("first javaClass: "+javaClass.getName());
if(javaClass.isAssignableFrom(org.w3c.xslt.ExpressionContext.class))
{
isFirstExpressionContext = true;
- scoreStart = 5;
+ scoreStart = 0;
paramStart++;
- // System.out.println("Incrementing paramStart: "+paramStart);
+ // System.out.println("Incrementing paramStart: "+paramStart);
}
+ else
+ scoreStart = 100;
}
+ else
+ scoreStart = 100;
+
if(argsIn.length == (numberMethodParams - paramStart))
{
// then we have our candidate.
int score = scoreMatch(paramTypes, paramStart, argsIn, scoreStart);
- // System.out.println("score: "+score);
+ // System.out.println("score: "+score);
if(-1 == score)
continue;
if(score < bestScore)
@@ -112,8 +117,8 @@
SecurityException,
org.xml.sax.SAXException
{
- System.out.println("---> Looking for method: "+name);
- System.out.println("---> classObj: "+classObj);
+ // System.out.println("---> Looking for method: "+name);
+ // System.out.println("---> classObj: "+classObj);
Method bestMethod = null;
Class[] bestParamTypes = null;
Method[] methods = classObj.getMethods();
@@ -129,30 +134,37 @@
int numberMethodParams = paramTypes.length;
int paramStart = 0;
boolean isFirstExpressionContext = false;
- int scoreStart = 0;
- System.out.println("numberMethodParams: "+numberMethodParams);
- System.out.println("argsIn.length: "+argsIn.length);
- System.out.println("exprContext: "+exprContext);
+ int scoreStart;
+ // System.out.println("numberMethodParams: "+numberMethodParams);
+ // System.out.println("argsIn.length: "+argsIn.length);
+ // System.out.println("exprContext: "+exprContext);
if(numberMethodParams == (argsIn.length+1))
{
Class javaClass = paramTypes[0];
if(javaClass.isAssignableFrom(org.w3c.xslt.ExpressionContext.class))
{
isFirstExpressionContext = true;
- scoreStart = 5;
+ scoreStart = 0;
paramStart++;
}
+ else
+ {
+ scoreStart = 100;
+ }
}
+ else
+ scoreStart = 100;
+
if(argsIn.length == (numberMethodParams - paramStart))
{
// then we have our candidate.
int score = scoreMatch(paramTypes, paramStart, argsIn, scoreStart);
- System.out.println("score: "+score);
+ // System.out.println("score: "+score);
if(-1 == score)
continue;
if(score < bestScore)
{
- System.out.println("Assigning best method: "+method);
+ // System.out.println("Assigning best method: "+method);
bestMethod = method;
bestParamTypes = paramTypes;
bestScore = score;
@@ -184,7 +196,7 @@
ExpressionContext exprContext)
throws org.xml.sax.SAXException
{
- System.out.println("In convertParams");
+ // System.out.println("In convertParams");
int nMethods = argsIn.length;
int paramIndex = 0;
if((paramTypes.length > 0)
@@ -192,7 +204,7 @@
{
argsOut[0] = new Object[nMethods+1];
argsOut[0][0] = exprContext;
- System.out.println("Incrementing paramIndex in convertParams: "+paramIndex);
+ // System.out.println("Incrementing paramIndex in convertParams: "+paramIndex);
paramIndex++;
}
else
@@ -200,8 +212,9 @@
argsOut[0] = (nMethods > 0) ? new Object[nMethods] : null;
}
- for(int i = 0; paramIndex < nMethods; i++, paramIndex++)
+ for(int i = 0; i < nMethods; i++, paramIndex++)
{
+ // System.out.println("paramTypes[i]: "+paramTypes[i]);
argsOut[0][paramIndex] = convert(argsIn[i], paramTypes[paramIndex]);
}
}
@@ -222,6 +235,8 @@
int m_score; // Match score, closer to zero is more matched.
}
+ private static final int SCOREBASE=1;
+
/**
* Specification of conversions from XSLT type CLASS_UNKNOWN
* (i.e. some unknown Java object) to allowed Java types.
@@ -237,7 +252,7 @@
new ConversionInfo(Byte.TYPE, 7),
new ConversionInfo(java.lang.String.class, 8)
};
-
+
/**
* Specification of conversions from XSLT type CLASS_BOOLEAN
* to allowed Java types.
@@ -247,7 +262,7 @@
new ConversionInfo(java.lang.Boolean.class, 1),
new ConversionInfo(java.lang.Object.class, 1),
new ConversionInfo(java.lang.String.class, 2)
- };
+ };
/**
* Specification of conversions from XSLT type CLASS_NUMBER
@@ -357,7 +372,7 @@
{
int nParams = xsltArgs.length;
for(int i = 0, paramTypesIndex = paramTypesStart;
- paramTypesIndex < nParams;
+ i < nParams;
i++, paramTypesIndex++)
{
Object xsltObj = xsltArgs[i];
@@ -366,6 +381,9 @@
: XObject.CLASS_UNKNOWN;
Class javaClass = javeParamTypes[paramTypesIndex];
+ // System.out.println("Checking xslt: "+xsltObj.getClass().getName()+
+ // " against java: "+javaClass.getName());
+
if(xsltClassType == XObject.CLASS_NULL)
{
// In Xalan I have objects of CLASS_NULL, though I'm not
@@ -386,7 +404,7 @@
for(k = 0; k < nConversions; k++)
{
ConversionInfo cinfo = convInfo[k];
- if(javaClass.isAssignableFrom(cinfo.m_class))
+ if(cinfo.m_class.isAssignableFrom(javaClass))
{
score += cinfo.m_score;
break; // from k loop
@@ -520,7 +538,7 @@
}
}
// break; Unreachable
-
+
// No default:, fall-through on purpose
} // end switch
xsltObj = xobj.object();