A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/pmd/pmd/issues/5476 below:

[visualforce] NPE when analyzing standard field references in visualforce page · Issue #5476 · pmd/pmd · GitHub

[visualforce] Parse Error: NullPointerException in Visualforce Rules

Affects PMD Version:
7.7.0

Description:
We encountered a parse error when running Visualforce rules on specific Visualforce pages. The error occurs when the page contains a standard field reference, such as {!Case.Description}. However, if we use a custom field, such as {!Case.Description__c}, no error is triggered.

The issue is intermittent and only reproducible when running PMD Visualforce rules on a large set of Visualforce pages (approximately 7,000). Running the rules on the specific problematic file alone does not trigger the error.

Error Message:
The following error is encountered:

NullPointerException: Cannot invoke "org.w3c.dom.Node.getNodeValue()" because "typeNode" is null

Exception Stacktrace:

<error filename=".\force-app\main\default\pages\nameofthepage.page" msg="NullPointerException: Cannot invoke &quot;org.w3c.dom.Node.getNodeValue()&quot; because &quot;typeNode&quot; is null">
<![CDATA[java.lang.NullPointerException: Cannot invoke "org.w3c.dom.Node.getNodeValue()" because "typeNode" is null
	at net.sourceforge.pmd.lang.visualforce.ast.ObjectFieldTypes.parseSfdxCustomField(ObjectFieldTypes.java:175)
	at net.sourceforge.pmd.lang.visualforce.ast.ObjectFieldTypes.findDataType(ObjectFieldTypes.java:129)
	at net.sourceforge.pmd.lang.visualforce.ast.SalesforceFieldTypes.getDataType(SalesforceFieldTypes.java:70)
	at net.sourceforge.pmd.lang.visualforce.ast.VfExpressionTypeVisitor.visit(VfExpressionTypeVisitor.java:142)
	at net.sourceforge.pmd.lang.visualforce.ast.VfExpressionTypeVisitor.visit(VfExpressionTypeVisitor.java:26)
	at net.sourceforge.pmd.lang.visualforce.ast.ASTElExpression.acceptVfVisitor(ASTElExpression.java:14)
	at net.sourceforge.pmd.lang.visualforce.ast.AbstractVfNode.acceptVisitor(AbstractVfNode.java:32)
	at net.sourceforge.pmd.lang.ast.AstVisitorBase.visitChildren(AstVisitorBase.java:31)
	at net.sourceforge.pmd.lang.ast.AstVisitorBase.visitNode(AstVisitorBase.java:38)
	at net.sourceforge.pmd.lang.visualforce.ast.VfVisitor.visitVfNode(VfVisitor.java:7)
	at net.sourceforge.pmd.lang.visualforce.ast.VfVisitor.visit(VfVisitor.java:21)
	at net.sourceforge.pmd.lang.visualforce.ast.ASTAttributeValue.acceptVfVisitor(ASTAttributeValue.java:15)
	at net.sourceforge.pmd.lang.visualforce.ast.AbstractVfNode.acceptVisitor(AbstractVfNode.java:32)
	at net.sourceforge.pmd.lang.ast.AstVisitorBase.visitChildren(AstVisitorBase.java:31)
	at net.sourceforge.pmd.lang.ast.AstVisitorBase.visitNode(AstVisitorBase.java:38)
	at net.sourceforge.pmd.lang.visualforce.ast.VfVisitor.visitVfNode(VfVisitor.java:7)
	at net.sourceforge.pmd.lang.visualforce.ast.VfVisitor.visit(VfVisitor.java:20)
	at net.sourceforge.pmd.lang.visualforce.ast.ASTAttribute.acceptVfVisitor(ASTAttribute.java:53)
	at net.sourceforge.pmd.lang.visualforce.ast.AbstractVfNode.acceptVisitor(AbstractVfNode.java:32)
	at net.sourceforge.pmd.lang.ast.AstVisitorBase.visitChildren(AstVisitorBase.java:31)
	at net.sourceforge.pmd.lang.ast.AstVisitorBase.visitNode(AstVisitorBase.java:38)
	at net.sourceforge.pmd.lang.visualforce.ast.VfVisitor.visitVfNode(VfVisitor.java:7)
	at net.sourceforge.pmd.lang.visualforce.ast.VfVisitor.visit(VfVisitor.java:19)
	at net.sourceforge.pmd.lang.visualforce.ast.VfExpressionTypeVisitor.visit(VfExpressionTypeVisitor.java:89)
	at net.sourceforge.pmd.lang.visualforce.ast.VfExpressionTypeVisitor.visit(VfExpressionTypeVisitor.java:26)
	at net.sourceforge.pmd.lang.visualforce.ast.ASTElement.acceptVfVisitor(ASTElement.java:82)
	at net.sourceforge.pmd.lang.visualforce.ast.AbstractVfNode.acceptVisitor(AbstractVfNode.java:32)
	at net.sourceforge.pmd.lang.ast.AstVisitorBase.visitChildren(AstVisitorBase.java:31)
	at net.sourceforge.pmd.lang.ast.AstVisitorBase.visitNode(AstVisitorBase.java:38)
	at net.sourceforge.pmd.lang.visualforce.ast.VfVisitor.visitVfNode(VfVisitor.java:7)
	at net.sourceforge.pmd.lang.visualforce.ast.VfVisitor.visit(VfVisitor.java:9)
	at net.sourceforge.pmd.lang.visualforce.ast.ASTContent.acceptVfVisitor(ASTContent.java:15)
	at net.sourceforge.pmd.lang.visualforce.ast.AbstractVfNode.acceptVisitor(AbstractVfNode.java:32)
	at net.sourceforge.pmd.lang.ast.AstVisitorBase.visitChildren(AstVisitorBase.java:31)
	at net.sourceforge.pmd.lang.ast.AstVisitorBase.visitNode(AstVisitorBase.java:38)
	at net.sourceforge.pmd.lang.visualforce.ast.VfVisitor.visitVfNode(VfVisitor.java:7)
	at net.sourceforge.pmd.lang.visualforce.ast.VfVisitor.visit(VfVisitor.java:19)
	at net.sourceforge.pmd.lang.visualforce.ast.VfExpressionTypeVisitor.visit(VfExpressionTypeVisitor.java:89)
	at net.sourceforge.pmd.lang.visualforce.ast.VfExpressionTypeVisitor.visit(VfExpressionTypeVisitor.java:26)
	at net.sourceforge.pmd.lang.visualforce.ast.ASTElement.acceptVfVisitor(ASTElement.java:82)
	at net.sourceforge.pmd.lang.visualforce.ast.AbstractVfNode.acceptVisitor(AbstractVfNode.java:32)
	at net.sourceforge.pmd.lang.ast.AstVisitorBase.visitChildren(AstVisitorBase.java:31)
	at net.sourceforge.pmd.lang.ast.AstVisitorBase.visitNode(AstVisitorBase.java:38)
	at net.sourceforge.pmd.lang.visualforce.ast.VfVisitor.visitVfNode(VfVisitor.java:7)
	at net.sourceforge.pmd.lang.visualforce.ast.VfVisitor.visit(VfVisitor.java:9)
	at net.sourceforge.pmd.lang.visualforce.ast.ASTContent.acceptVfVisitor(ASTContent.java:15)
	at net.sourceforge.pmd.lang.visualforce.ast.AbstractVfNode.acceptVisitor(AbstractVfNode.java:32)
	at net.sourceforge.pmd.lang.ast.AstVisitorBase.visitChildren(AstVisitorBase.java:31)
	at net.sourceforge.pmd.lang.ast.AstVisitorBase.visitNode(AstVisitorBase.java:38)
	at net.sourceforge.pmd.lang.visualforce.ast.VfVisitor.visitVfNode(VfVisitor.java:7)
	at net.sourceforge.pmd.lang.visualforce.ast.VfVisitor.visit(VfVisitor.java:8)
	at net.sourceforge.pmd.lang.visualforce.ast.VfExpressionTypeVisitor.visit(VfExpressionTypeVisitor.java:63)
	at net.sourceforge.pmd.lang.visualforce.ast.VfParser.parseImpl(VfParser.java:37)
	at net.sourceforge.pmd.lang.visualforce.ast.VfParser.parseImpl(VfParser.java:16)
	at net.sourceforge.pmd.lang.ast.impl.javacc.JjtreeParserAdapter.parse(JjtreeParserAdapter.java:36)
	at net.sourceforge.pmd.lang.impl.PmdRunnable.parse(PmdRunnable.java:112)
	at net.sourceforge.pmd.lang.impl.PmdRunnable.processSource(PmdRunnable.java:132)
	at net.sourceforge.pmd.lang.impl.PmdRunnable.run(PmdRunnable.java:80)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
	at java.base/java.lang.Thread.run(Thread.java:1583)
]]>
</error>

Code Sample demonstrating the issue:

<apex:page standardController="Case">
    <apex:outputField value="{!Case.Description}"/>
</apex:page>

The error occurs at line 2.
If {!Case.Description} is replaced with {!Case.Description__c}, the error does not occur.
Steps to reproduce:

  1. Create a Visualforce page with the above code snippet containing a reference to a standard field, such as {!Case.Description}.
  2. Run PMD Visualforce rules on a large set of Visualforce pages (e.g., ~7,000 pages).
  3. Observe that a NullPointerException occurs during the PMD analysis.

Note: The issue does not occur if the PMD rules are executed only on the specific example provided above. The error is only reproducible in a large-scale analysis scenario.

Additional Information:
We observed four similar parse errors across different Visualforce pages, all related to standard field references like {!Case.Description}.

Running PMD through:
CLI

JDK and OS Information:

JDK Version:
openjdk 21.0.4 2024-07-16 LTS
OpenJDK Runtime Environment Microsoft-9889606 (build 21.0.4+7-LTS)
OpenJDK 64-Bit Server VM Microsoft-9889606 (build 21.0.4+7-LTS, mixed mode, sharing)

OS: Microsoft Windows


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4