/** * <code>systemId</code> returns the system id of the node passed as * argument. If a node set is passed as argument, the system id of * the first node in the set is returned. * * @param nodeList a <code>NodeList</code> value * @return a <code>String</code> value */ public static String systemId(NodeList nodeList) { if (nodeList == null || nodeList.getLength() == 0) return null; Node node = nodeList.item(0); int nodeHandler = ((DTMNodeProxy)node).getDTMNodeNumber(); SourceLocator locator = ((DTMNodeProxy)node).getDTM() .getSourceLocatorFor(nodeHandler); if (locator != null) return locator.getSystemId(); else return null; }
/** * <code>publicId</code> returns the public identifier of the node passed as * argument. If a node set is passed as argument, the public identifier of * the first node in the set is returned. * * Xalan does not currently record this value, and will return null. * * @param nodeList a <code>NodeList</code> value * @return a <code>String</code> value */ public static String publicId(NodeList nodeList) { if (nodeList == null || nodeList.getLength() == 0) return null; Node node = nodeList.item(0); int nodeHandler = ((DTMNodeProxy)node).getDTMNodeNumber(); SourceLocator locator = ((DTMNodeProxy)node).getDTM() .getSourceLocatorFor(nodeHandler); if (locator != null) return locator.getPublicId(); else return null; }
/** * <code>lineNumber</code> returns the line number of the node * passed as argument. If a node set is passed as argument, the line * number of the first node in the set is returned. * * NOTE: Xalan does not normally record location information for each node. * To obtain it, you must set the custom TrAX attribute * "http://xml.apache.org/xalan/features/source_location" * true in the TransformerFactory before generating the Transformer and executing * the stylesheet. Storage cost per node will be noticably increased in this mode. * * @param nodeList a <code>NodeList</code> value * @return an <code>int</code> value. This may be -1 to indicate that the * line number is not known. */ public static int lineNumber(NodeList nodeList) { if (nodeList == null || nodeList.getLength() == 0) return -1; Node node = nodeList.item(0); int nodeHandler = ((DTMNodeProxy)node).getDTMNodeNumber(); SourceLocator locator = ((DTMNodeProxy)node).getDTM() .getSourceLocatorFor(nodeHandler); if (locator != null) return locator.getLineNumber(); else return -1; }
/** * <code>columnNumber</code> returns the column number of the node * passed as argument. If a node set is passed as argument, the line * number of the first node in the set is returned. * * NOTE: Xalan does not normally record location information for each node. * To obtain it, you must set the custom TrAX attribute * "http://xml.apache.org/xalan/features/source_location" * true in the TransformerFactory before generating the Transformer and executing * the stylesheet. Storage cost per node will be noticably increased in this mode. * * @param nodeList a <code>NodeList</code> value * @return an <code>int</code> value. This may be -1 to indicate that the * column number is not known. */ public static int columnNumber(NodeList nodeList) { if (nodeList == null || nodeList.getLength() == 0) return -1; Node node = nodeList.item(0); int nodeHandler = ((DTMNodeProxy)node).getDTMNodeNumber(); SourceLocator locator = ((DTMNodeProxy)node).getDTM() .getSourceLocatorFor(nodeHandler); if (locator != null) return locator.getColumnNumber(); else return -1; }
/** Retrieve the SourceLocator associated with a specific node. * This is only meaningful if the XalanProperties.SOURCE_LOCATION flag was * set True using setProperty; if it was never set, or was set false, we * will return null. * * (We _could_ return a locator with the document's base URI and bogus * line/column information. Trying that; see the else clause.) * */ public SourceLocator getSourceLocatorFor(int node) { if (m_useSourceLocationProperty) { node = makeNodeIdentity(node); return new NodeLocator(null, m_sourceSystemId.elementAt(node), m_sourceLine.elementAt(node), m_sourceColumn.elementAt(node)); } else if(m_locator!=null) { return new NodeLocator(null,m_locator.getSystemId(),-1,-1); } else if(m_systemId!=null) { return new NodeLocator(null,m_systemId,-1,-1); } return null; }
/** * Get the source tree from the a base URL and a URL string. * * @param base The base URI to use if the urlString is relative. * @param urlString An absolute or relative URL string. * @param locator The location of the caller, for diagnostic purposes. * * @return should be a non-null reference to the node identified by the * base and urlString. * * @throws TransformerException If the URL can not resolve to a node. */ public int getSourceTree( String base, String urlString, SourceLocator locator, XPathContext xctxt) throws TransformerException { // System.out.println("getSourceTree"); try { Source source = this.resolveURI(base, urlString, locator); // System.out.println("getSourceTree - base: "+base+", urlString: "+urlString+", source: "+source.getSystemId()); return getSourceTree(source, locator, xctxt); } catch (IOException ioe) { throw new TransformerException(ioe.getMessage(), locator, ioe); } /* catch (TransformerException te) { throw new TransformerException(te.getMessage(), locator, te); }*/ }
/** * Get the source tree from the input source. * * @param source The Source object that should identify the desired node. * @param locator The location of the caller, for diagnostic purposes. * * @return non-null reference to a node. * * @throws TransformerException if the Source argument can't be resolved to * a node. */ public int getSourceTree(Source source, SourceLocator locator, XPathContext xctxt) throws TransformerException { int n = getNode(source); if (DTM.NULL != n) return n; n = parseToNode(source, locator, xctxt); if (DTM.NULL != n) putDocumentInCache(n, source); return n; }
/** * Tell the user of an error, and probably throw an * exception. * * @param xctxt The XPath runtime context. * @param sourceNode Not used. * @param msg An error msgkey that corresponds to one of the constants found * in {@link com.sun.org.apache.xpath.internal.res.XPATHErrorResources}, which is * a key for a format string. * @param args An array of arguments represented in the format string, which * may be null. * * @throws TransformerException if the current ErrorListoner determines to * throw an exception. */ public void error( XPathContext xctxt, int sourceNode, String msg, Object[] args) throws javax.xml.transform.TransformerException { String fmsg = XSLMessages.createXPATHMessage(msg, args); ErrorListener ehandler = xctxt.getErrorListener(); if (null != ehandler) { ehandler.fatalError(new TransformerException(fmsg, (SAXSourceLocator)xctxt.getSAXLocator())); } else { SourceLocator slocator = xctxt.getSAXLocator(); System.out.println(fmsg + "; file " + slocator.getSystemId() + "; line " + slocator.getLineNumber() + "; column " + slocator.getColumnNumber()); } }
/** * This will be called by the processor when it encounters * an xsl:include, xsl:import, or document() function. * * @param base The base URI that should be used. * @param urlString Value from an xsl:import or xsl:include's href attribute, * or a URI specified in the document() function. * * @return a Source that can be used to process the resource. * * @throws IOException * @throws TransformerException */ public Source resolveURI( String base, String urlString, SourceLocator locator) throws TransformerException, IOException { Source source = null; if (null != m_uriResolver) { source = m_uriResolver.resolve(urlString, base); } if (null == source) { String uri = SystemIDResolver.getAbsoluteURI(urlString, base); source = new StreamSource(uri); } return source; }
public static String getMyMessageAndLocation(TransformerException exception) { SourceLocator locator = exception.getLocator(); StringBuilder msg = new StringBuilder(); if (locator != null) { String systemID = locator.getSystemId(); int line = locator.getLineNumber(); int col = locator.getColumnNumber(); if (systemID != null) { msg.append("SystemID: "); msg.append(systemID); } if (line != 0) { msg.append(" ["); msg.append(line); if (col != 0) { msg.append(','); msg.append(col); } msg.append("]"); } } msg.append(": "); msg.append(exception.getMessage()); return msg.toString(); }
private static String buildErrorMessage(String resource, Exception cause) { StringBuilder msg = new StringBuilder("Error compiling XSL stylesheet "); msg.append(resource); if (cause instanceof TransformerException) { TransformerException tex = (TransformerException) cause; msg.append("\n").append(tex.getMessage()); SourceLocator sl = tex.getLocator(); if (sl != null) { msg.append(" (").append(sl.getSystemId()).append(") "); msg.append(" at line ").append(sl.getLineNumber()); msg.append(" column ").append(sl.getColumnNumber()); } } return msg.toString(); }
private void warning (String message, int lineNumber, int columnNumber, String publicId, String systemId) throws TransformerException { if (errorListener == null) { return; } SourceLocator l = new StandaloneLocator (lineNumber, columnNumber, publicId, systemId); errorListener.warning (new TransformerException (message, l)); }
private void error (String message, int lineNumber, int columnNumber, String publicId, String systemId) throws TransformerException { if (errorListener == null) { return; } SourceLocator l = new StandaloneLocator (lineNumber, columnNumber, publicId, systemId); errorListener.error (new TransformerException (message, l)); }
private void fatalError (String message, int lineNumber, int columnNumber, String publicId, String systemId) throws TransformerException { if (errorListener == null) { return; } SourceLocator l = new StandaloneLocator (lineNumber, columnNumber, publicId, systemId); errorListener.fatalError (new TransformerException (message, l)); }