private Object getResultAsType( XObject resultObject, QName returnType ) throws javax.xml.transform.TransformerException { // XPathConstants.STRING if ( returnType.equals( XPathConstants.STRING ) ) { return resultObject.str(); } // XPathConstants.NUMBER if ( returnType.equals( XPathConstants.NUMBER ) ) { return new Double ( resultObject.num()); } // XPathConstants.BOOLEAN if ( returnType.equals( XPathConstants.BOOLEAN ) ) { return new Boolean( resultObject.bool()); } // XPathConstants.NODESET ---ORdered, UNOrdered??? if ( returnType.equals( XPathConstants.NODESET ) ) { return resultObject.nodelist(); } // XPathConstants.NODE if ( returnType.equals( XPathConstants.NODE ) ) { NodeIterator ni = resultObject.nodeset(); //Return the first node, or null return ni.nextNode(); } String fmsg = XSLMessages.createXPATHMessage( XPATHErrorResources.ER_UNSUPPORTED_RETURN_TYPE, new Object[] { returnType.toString()}); throw new IllegalArgumentException( fmsg ); }
/** * Get a local variable or parameter in the current stack frame. * * * @param xctxt The XPath context, which must be passed in order to * lazy evaluate variables. * * @param index Local variable index relative to the current stack * frame bottom. * * @return The value of the variable. * * @throws TransformerException */ public XObject getLocalVariable(XPathContext xctxt, int index, boolean destructiveOK) throws TransformerException { index += _currentFrameBottom; XObject val = _stackFrames[index]; if(null == val) throw new TransformerException(XSLMessages.createXPATHMessage(XPATHErrorResources.ER_VARIABLE_ACCESSED_BEFORE_BIND, null), xctxt.getSAXLocator()); // "Variable accessed before it is bound!", xctxt.getSAXLocator()); // Lazy execution of variables. if (val.getType() == XObject.CLASS_UNRESOLVEDVARIABLE) return (_stackFrames[index] = val.execute(xctxt)); return destructiveOK ? val : val.getFresh(); }
/** * Given a request type, return the equivalent string. * For diagnostic purposes. * * @return type string "#UNKNOWN" + object class name */ public String getTypeString() { return "#UNKNOWN (" + object().getClass().getName() + ")"; }
/** * Apply the operation to two operands, and return the result. * * * @param right non-null reference to the evaluated right operand. * * @return non-null reference to the XObject that represents the result of the operation. * * @throws javax.xml.transform.TransformerException */ public XObject operate(XObject right) throws javax.xml.transform.TransformerException { if (XObject.CLASS_BOOLEAN == right.getType()) return right; else return right.bool() ? XBoolean.S_TRUE : XBoolean.S_FALSE; }
/** * Tell if two objects are functionally not equal. * * @param obj2 Object to compare this to * * @return True if this object is not equal to the given object * * @throws javax.xml.transform.TransformerException */ public boolean notEquals(XObject obj2) throws javax.xml.transform.TransformerException { // In order to handle the 'all' semantics of // nodeset comparisons, we always call the // nodeset function. if (obj2.getType() == XObject.CLASS_NODESET) return obj2.notEquals(this); return !equals(obj2); }
/** * Cast result object to a result tree fragment. * * @param support XPath context to use for the conversion * * @return the objec as a result tree fragment. */ public int rtf(XPathContext support) { int result = rtf(); if (DTM.NULL == result) { DTM frag = support.createDocumentFragment(); // %OPT% frag.appendTextChild(str()); result = frag.getDocument(); } return result; }
String fmsg = XSLMessages.createXPATHMessage( XPATHErrorResources.ER_ARG_CANNOT_BE_NULL, new Object[] {"Function Name"} ); String fmsg = XSLMessages.createXPATHMessage( XPATHErrorResources.ER_EXTENSION_FUNCTION_CANNOT_BE_INVOKED, new Object[] { myQName.toString() } ); int arity = argVec.size(); Object argument = argVec.elementAt( i ); argList.add ( i, ((XNodeSet)argument).nodelist() ); } else if ( argument instanceof XObject ) { Object passedArgument = ((XObject)argument).object(); argList.add ( i, passedArgument ); } else { throw new javax.xml.transform.TransformerException ( e );
KeyIterator ki = (KeyIterator) (m_keyNodes).getContainedIter(); XPathContext xctxt = ki.getXPathContext(); int nKeyDecls = keyDecls.size(); m_keyNodes.reset(); while (DTM.NULL != (currentNode = m_keyNodes.nextNode())) (KeyDeclaration) keyDecls.elementAt(keyDeclIdx); XObject xuse = keyDeclaration.getUse().execute(xctxt, currentNode, ki.getPrefixResolver()); if (xuse.getType() != xuse.CLASS_NODESET) { XMLString exprResult = xuse.xstr(); addValueInRefsTable(xctxt, exprResult, currentNode); } else { DTM dtm = xctxt.getDTM(currentNodeInUseClause); XMLString exprResult = dtm.getStringValue(currentNodeInUseClause); addValueInRefsTable(xctxt, exprResult, currentNode);
NodeSortKey k = (NodeSortKey) m_keys.elementAt(kIndex); XObject r1 = k.m_selectPat.execute(m_execContext, n1.m_node, k.m_namespaceContext); XObject r2 = k.m_selectPat.execute(m_execContext, n2.m_node, k.m_namespaceContext); n1Num = r1.num(); n2Num = r2.num(); if ((n1Num == n2Num) && ((kIndex + 1) < m_keys.size())) XObject r1 = k.m_selectPat.execute(m_execContext, n1.m_node, k.m_namespaceContext); XObject r2 = k.m_selectPat.execute(m_execContext, n2.m_node, k.m_namespaceContext); n1String = k.m_col.getCollationKey(r1.str()); n2String = k.m_col.getCollationKey(r2.str()); if ((kIndex + 1) < m_keys.size()) DTM dtm = support.getDTM(n1.m_node); // %OPT% result = dtm.isNodeAfter(n1.m_node, n2.m_node) ? -1 : 1;
(TransformerImpl)exprContext.getXPathContext().getOwnerObject() : null; if (funcName.endsWith(".new")) { // Handle constructor call methodArgs = new Object[args.size()]; convertedArgs = new Object[1][]; for (int i = 0; i < methodArgs.length; i++) methodArgs[i] = args.get(i); throw new TransformerException(e); methodArgs = new Object[args.size()]; convertedArgs = new Object[1][]; for (int i = 0; i < methodArgs.length; i++) throw new TransformerException(e); if (args.size() < 1) throw new TransformerException(XSLMessages.createMessage(XSLTErrorResources.ER_INSTANCE_MTHD_CALL_REQUIRES, new Object[]{funcName })); //"Instance method call to method " + funcName targetObject = args.get(0); if (targetObject instanceof XObject) // Next level down for XObjects targetObject = ((XObject) targetObject).object(); methodArgs = new Object[args.size() - 1]; convertedArgs = new Object[1][];
if (!m_keys.isEmpty()) NodeSortKey k1 = (NodeSortKey) m_keys.elementAt(0); XObject r = k1.m_selectPat.execute(m_execContext, node, k1.m_namespaceContext); d = r.num(); m_key1Value = k1.m_col.getCollationKey(r.str()); if (r.getType() == XObject.CLASS_NODESET) DTMIterator ni = ((XNodeSet)r).iterRaw(); int current = ni.getCurrentNode(); if(DTM.NULL == current) if (m_keys.size() > 1) NodeSortKey k2 = (NodeSortKey) m_keys.elementAt(1); XObject r2 = k2.m_selectPat.execute(m_execContext, node, k2.m_namespaceContext); d = r2.num(); m_key2Value = new Double(d); } else { m_key2Value = k2.m_col.getCollationKey(r2.str());
KeyIterator ki = (KeyIterator)(((XNodeSet)m_keysNodes).getContainedIter()); org.apache.xpath.XPathContext xctxt = ki.getXPathContext(); int nDeclarations = keys.size(); KeyDeclaration kd = (KeyDeclaration) keys.elementAt(i); XObject xuse = kd.getUse().execute(xctxt, testNode, ki.getPrefixResolver()); if (xuse.getType() != xuse.CLASS_NODESET) XMLString exprResult = xuse.xstr(); DTMIterator nl = ((XNodeSet)xuse).iterRaw(); int useNode; XMLString exprResult = dtm.getStringValue(useNode); if ((null != exprResult) && lookupKey.equals(exprResult)) return DTMIterator.FILTER_ACCEPT; XSLMessages.createMessage( XSLTErrorResources.ER_NO_XSLKEY_DECLARATION, new Object[] { name.getLocalName()}));
int context = xctxt.getCurrentNode(); DTM dtm = xctxt.getDTM(context); int parent = dtm.getParent(context); DTMAxisTraverser traverser = dtm.getAxisTraverser(Axis.CHILD); xctxt.pushCurrentNode(child); if (XObject.CLASS_NUMBER == pred.getType()) if ((pos + 1) != (int) pred.numWithSideEffects()) else if (!pred.boolWithSideEffects()) pred.detach(); throw new java.lang.RuntimeException(se.getMessage());
int sourceNode = xctxt.getCurrentNode(); XObject value = m_selectExpression.execute(xctxt, sourceNode, this); int type = value.getType(); String s; case XObject.CLASS_NUMBER : case XObject.CLASS_STRING : s = value.str(); DTMIterator nl = value.iter(); DTM dtm = xctxt.getDTMManager().getDTM(pos); short t = dtm.getNodeType(pos); for (int child = dtm.getFirstChild(pos); child != DTM.NULL; child = dtm.getNextSibling(child)) default : s = value.str(); throw new TransformerException(se);
dtm.getAxisTraverser(Axis.PRECEDINGSIBLING); xctxt.pushCurrentNode(child); xctxt.pushSubContextList(this); xctxt.pushPredicatePos(i); try if (XObject.CLASS_NUMBER == pred.getType()) else if (!pred.boolWithSideEffects()) pred.detach(); throw new java.lang.RuntimeException(se.getMessage());
/** * @see org.w3c.dom.xpath.XPathResult#getBooleanValue() */ public boolean getBooleanValue() throws XPathException { if (getResultType() != BOOLEAN_TYPE) { String fmsg = XPATHMessages.createXPATHMessage(XPATHErrorResources.ER_CANT_CONVERT_TO_BOOLEAN, new Object[] {m_xpath.getPatternString(), getTypeString(m_resultType)}); throw new XPathException(XPathException.TYPE_ERR,fmsg); // "The XPathResult of XPath expression {0} has an XPathResultType of {1} which cannot be converted to a boolean." } else { try { return m_resultObj.bool(); } catch (TransformerException e) { // Type check above should prevent this exception from occurring. throw new XPathException(XPathException.TYPE_ERR,e.getMessage()); } } }
String fmsg = XPATHMessages.createXPATHMessage(XPATHErrorResources.ER_CANT_CONVERT_TO_SINGLENODE, new Object[] {m_xpath.getPatternString(), getTypeString(m_resultType)}); throw new XPathException(XPathException.TYPE_ERR,fmsg); result = m_resultObj.nodeset(); } catch (TransformerException te) { throw new XPathException(XPathException.TYPE_ERR,te.getMessage());
String xkeyname = getArg0().execute(xctxt).str(); QName keyname = new QName(xkeyname, xctxt.getNamespaceContext()); XObject arg = getArg1().execute(xctxt); boolean argIsNodeSetDTM = (XObject.CLASS_NODESET == arg.getType()); KeyManager kmgr = transformer.getKeyManager(); ns.setShouldCacheNodes(true); int len = ns.getLength(); if(len <= 1) argIsNodeSetDTM = false; DTMIterator ni = arg.iter(); int pos; UnionPathIterator upi = new UnionPathIterator(); dtm = xctxt.getDTM(pos); XMLString ref = dtm.getStringValue(pos); xctxt.getNamespaceContext()); nl.setRoot(xctxt.getCurrentNode(), xctxt); XMLString ref = arg.xstr(); nodes = kmgr.getNodeSetDTMByKey(xctxt, docContext, keyname, ref,
int context = xctxt.getCurrentNode(); DTM dtm = xctxt.getDTM(context); int docContext = dtm.getDocument(); int argType = arg.getType(); XNodeSet nodes = new XNodeSet(xctxt.getDTMManager()); NodeSetDTM nodeSet = nodes.mutableNodeset(); DTMIterator ni = arg.iter(); StringVector usedrefs = null; int pos = ni.nextNode(); String refval = ndtm.getStringValue(pos).toString(); String refval = arg.str();