You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by bu...@apache.org on 2002/07/18 18:56:13 UTC

DO NOT REPLY [Bug 10956] New: - The function value-of throws a NullPointer exception when element is null.

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=10956>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=10956

The function value-of throws a NullPointer exception when element is null.

           Summary: The function value-of throws a NullPointer exception
                    when element is null.
           Product: XalanJ2
           Version: 2.4Dx
          Platform: All
        OS/Version: Other
            Status: NEW
          Severity: Major
          Priority: Other
         Component: org.apache.xalan.transformer
        AssignedTo: xalan-dev@xml.apache.org
        ReportedBy: jfarjona@jfarjona.com


Run the following XML:

<?xml version="1.0" encoding="UTF-8"?>
<componentinfo>
	<component id="2" name="" type="outfitting">
		<currentversion id="2" lastmodified="Jul 18, 2002 11:11:14 AM" modifiedby="Juan F
Arjona" name="" version="0.0"/>
		<versions/>
		<data expanded="true" expandid="6">
			<outfitting expanded="true" expandid="5" version="0.0">
				<isapdata expanded="true" expandid="4">
					<outfittingworkbook expanded="true" expandid="3">
						<outfittingweights expanded="true" expandid="1">
							<strakes>0.0</strakes>
							<risersupports>0.0</risersupports>
							<fairleadsupports>0.0</fairleadsupports>
							<fairings>0.0</fairings>
							<chainjacksupports>0.0</chainjacksupports>
							<chainlocker>0.0</chainlocker>
							<winchfoundation>0.0</winchfoundation>
							<topsidesinterface>0.0</topsidesinterface>
							<trusshardtankinterface>0.0</trusshardtankinterface>
							<trusskeeltankinterface>0.0</trusskeeltankinterface>
							<jtubes>0.0</jtubes>
							<riserguidetubes>0.0</riserguidetubes>
							<miscellaneousequipment>0.0</miscellaneousequipment>
							<electrical>0.0</electrical>
							<hatchesandladders>0.0</hatchesandladders>
							<boatlanding>0.0</boatlanding>
							<fairleadandbendingshoe>0.0</fairleadandbendingshoe>
							<chaininboardoffairleads>0.0</chaininboardoffairleads>
							<tailchain>0.0</tailchain>
							<chainjacksandsheaves>0.0</chainjacksandsheaves>
							<hpu>0.0</hpu>
							<winches>0.0</winches>
							<piping>0.0</piping>
							<ballastpumps>0.0</ballastpumps>
							<caissons>0.0</caissons>
							<liquidinpipingsystems>0.0</liquidinpipingsystems>
							<anodes>0.0</anodes>
							<painting>0.0</painting>
							<marinegrowth>0.0</marinegrowth>
							<othera>0.0</othera>
							<otherb>0.0</otherb>
							<otherc>0.0</otherc>
							<otherd>0.0</otherd>
							<totaloutfittingweight>0.0</totaloutfittingweight>
							<outfittingkg>0.0</outfittingkg>
						</outfittingweights>
						<outfittinginput expanded="true" expandid="2">
							<hulltype/>
							<diameter>0.0</diameter>
							<freeboard>0.0</freeboard>
							<hardtankdepth>0.0</hardtankdepth>
							<softtankheight>0.0</softtankheight>
							<midsectionheight>0.0</midsectionheight>
							<lengthcw>0.0</lengthcw>
							<widthcw>0.0</widthcw>
							<topsidenwells>0</topsidenwells>
							<topsidevcg>0.0</topsidevcg>
							<topsidetotalweight>0.0</topsidetotalweight>
							<hardtanksteelweight>0.0</hardtanksteelweight>
							<midsectionsteelweight>0.0</midsectionsteelweight>
							<softtanksteelweight>0.0</softtanksteelweight>
							<numlines>0</numlines>
							<mooringfairleaddepth>0.0</mooringfairleaddepth>
							<mooringchainweight>0.0</mooringchainweight>
						</outfittinginput>
					</outfittingworkbook>
				</isapdata>
			</outfitting>
		</data>
	</component>
	<options allowexpand="true" edition="false" expandcommand="component_expand"
operation="Viewing" showheader="false"/>
</componentinfo>

through the XSL:

<?xml version="1.0" encoding="UTF-8"?>
<!--
   $Id: showcomponent.xsl,v 1.13 2002/07/12 00:01:59 jfarjona Exp $
    Document   : componentinfo.xsl
    Expected XML: See file componentinfo.xsd
    Created on : June 18, 2002 
    Author     : Juan F. Arjona
    Comment
    	This stylesheet transforms the XML of a component into its presentation in
the webpage.
    	It produces a <div> tag containing the data for the component.
        
-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:lxslt="http://xml.apache.org/xslt" xmlns:akerext="akerext"
extension-element-prefixes="akerext">
	<lxslt:component prefix="akerext" elements="uniquelog" functions="parentcount
getmaxdepth">
		<lxslt:script lang="javaclass" src="com.aker.xsl.extensions"/>
	</lxslt:component>
	<xsl:output method="html" version="1.0" encoding="UTF-8"
omit-xml-declaration="no" standalone="no" indent="no"/>
	<xsl:param name="maxdepth">
		<xsl:value-of select="number(akerext:getmaxdepth(/))"/>
	</xsl:param>
	<xsl:param name="edition">
		<xsl:value-of select="/componentinfo/options/@edition"/>
	</xsl:param>
	<xsl:template name="printtds">
		<xsl:if test=".. != /componentinfo/component/data/*[1]">
			<td width="20" bgcolor="DDDDDD">
				<xsl:text disable-output-escaping="yes"><![CDATA[&nbsp;]]></xsl:text>
			</td>
			<xsl:for-each select="../">
				<xsl:call-template name="printtds"/>
			</xsl:for-each>
		</xsl:if>
	</xsl:template>
	<xsl:template name="printxml">
		<xsl:for-each select="*">
			<xsl:variable name="chnum">
				<xsl:value-of select="count(*)"/>
			</xsl:variable>
			<xsl:comment>Now in printxml, count is: <xsl:value-of select="$chnum"/></xsl:comment>			
			<xsl:variable name="depth">
				<xsl:value-of select="akerext:parentcount(node())"/>
			</xsl:variable>
			<xsl:choose>
				<xsl:when test="$chnum >= 1">
					<tr>
						<xsl:call-template name="printtds"/>
						<td colspan="2" class="normalBold" valign="top" width="180" bgcolor="DDDDDD">
							<xsl:attribute name="colspan"><xsl:value-of select="number($maxdepth) - number($depth)
+ number(5)"/></xsl:attribute>
							<xsl:choose>
								<xsl:when test="/componentinfo/options/@allowexpand = 'true'">
									<a class="normalLink">
										<xsl:attribute name="href">?<xsl:value-of select="/componentinfo/options/		@expandcommand"/>=<xsl:value-of
select="@expandid"/></xsl:attribute>
										<xsl:choose>
											<xsl:when test="@expanded = 'true'">-</xsl:when>
											<xsl:otherwise>+</xsl:otherwise>
										</xsl:choose>
										<xsl:value-of select="name()"/>
									</a>
								</xsl:when>
								<xsl:otherwise>
									<span class="normalLink">
										<xsl:value-of select="name()"/>
									</span>
								</xsl:otherwise>
							</xsl:choose>
						</td>
					</tr>
					<xsl:choose>
						<xsl:when test="/componentinfo/options/@allowexpand = 'true'">
							<xsl:if test="@expanded = 'true'">
								<xsl:call-template name="printxml"/>
							</xsl:if>
						</xsl:when>
						<xsl:otherwise>
							<xsl:call-template name="printxml"/>
						</xsl:otherwise>
					</xsl:choose>
				</xsl:when>
				<xsl:when test="$chnum = 0">
					<tr>
						<xsl:call-template name="printtds"/>
						<td colspan="2" class="normalBold" valign="top" width="180" bgcolor="DDDDDD">
							<xsl:value-of select="name()"/>
						</td>
						<td class="normal" bgcolor="DDDDDD">
							<xsl:attribute name="colspan"><xsl:value-of select="number($maxdepth) - number($depth)
+ number(3)"/></xsl:attribute>
								Value: <span class="red10normal">
								<xsl:choose>
									<xsl:when test="($edition = 'true')">
										<input type="text" size="10">
											<xsl:attribute name="name">DTA_<xsl:value-of select="../@expandid"/>_<xsl:value-of
select="position()"/></xsl:attribute>
											<xsl:attribute name="value"><xsl:value-of select="."/></xsl:attribute>
										</input>
										<xsl:if test="@uom">
											<input type="text" size="5">
												<xsl:attribute name="name"><xsl:value-of select="../@expandid"/><xsl:value-of
select="name()"/>uom</xsl:attribute>
												<xsl:attribute name="value"><xsl:value-of select="@uom"/></xsl:attribute>
											</input>
										</xsl:if>
									</xsl:when>
									<xsl:otherwise>
										<xsl:value-of select="node()/."/>
										<xsl:value-of select="@uom"/>
									</xsl:otherwise>
								</xsl:choose>
							</span>
						</td>
					</tr>
				</xsl:when>
			</xsl:choose>
		</xsl:for-each>
	</xsl:template>
	<xsl:template match="/">
		<xsl:comment>Edition is: <xsl:value-of select="$edition"/>
		</xsl:comment>
		<div ID="data" style="position: static; visibility: 'visible'; z-index:2;
width:535px; height:420px; overflow-y:auto;">
			<table border="0" cellspacing="0" cellpadding="0" bgcolor="#EEEEEE" width="550">
				<xsl:for-each select="/componentinfo/component">
					<xsl:if test="/componentinfo/options/@showheader = 'true'">
						<tr>
							<td class="normal" valign="top" bgcolor="#CCCCCC">
								<xsl:attribute name="colspan"><xsl:value-of select="number($maxdepth)+4"/></xsl:attribute>
								<table border="0" cellspacing="0" cellpadding="0">
									<tr valign="top">
										<td width="180" class="normal" valign="top">
											<xsl:value-of select="/componentinfo/options/@operation"/>
											<br/>
											<span class="red10normal">
												<!-- Shows the first element of the data tree -->
												<xsl:value-of select="name(./data/*[1])"/>
											</span>
											<br/>
											<a href="componentsmain.jsp?editvalues=true" class="leftLinks">update</a>
										</td>
										<td width="250" class="normal" valign="top">
								Version: <span class="red10normal">
												<xsl:value-of select="version[1]/@version"/>
											</span>
											<br/>Modified on:<span class="red12normal">
												<xsl:value-of select="version[1]/@lastmodified"/>
											</span>
											<br/>By:<span class="red12normal">
												<xsl:value-of select="version[1]/@modifiedby"/>
											</span>
										</td>
									</tr>
								</table>
							</td>
						</tr>
					</xsl:if>
					<xsl:comment> 
						Count is: <xsl:value-of select="count(./data/*)"/>
						name is: <xsl:value-of select="name(./data/*)"/>
					</xsl:comment>
					<xsl:for-each select="./data">
						<xsl:call-template name="printxml"/>
					</xsl:for-each>
				</xsl:for-each>
			</table>
		</div>
	</xsl:template>
</xsl:stylesheet>


Using XALAN-J 2.4.D1.  Throws a NullPointer exception because the node HullType
is empty, will work if you put something on that node.