[
https://issues.apache.org/jira/browse/SLING-9417?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Matthias Herold updated SLING-9417:
-----------------------------------
Description:
When using the methods resource.getMetadata().getContentType() or
resource.adaptTo(InputStream.class), both methods return null when:
# the resource is a child of a versionable node,
# the resource is of type nt:file, and
# resource has been looked up with a version identifier in the URL (";v=").
>From my understanding, both methods should return the relevant values from the
>frozen node. The error occurs because of line 185 in JcrNodeResource.java
{\{ Node content = node.isNodeType(NT_FILE)}}
\{{ ? node.getNode(JCR_CONTENT)}}
\{{ : node.isNodeType(NT_LINKEDFILE) ? node.getProperty(JCR_CONTENT).getNode()
: node;}}
When the resource is looked up with the version modifier, the ode type will not
nt:file. Instead it is jcr:frozenNode with a property jcr:frozenPrimaryType set
to nt:file. Therefore, the above code fails and will not use the jcr:content
subnode, but the node itself. In my opinion, it would be right to change this
to:
{{Node content = (node.isNodeType(NodeType.NT_FILE) ||
(node.isNodeType("nt:frozenNode") && node.hasProperty("jcr:frozenPrimaryType")
}}
\{{ &&
node.getProperty("jcr:frozenPrimaryType").getString().equals(NT_FILE)))}}
\{{ ? node.getNode(Node.JCR_CONTENT)}}
\{{ : node.isNodeType(JcrConstants.NT_LINKEDFILE) ?
node.getProperty(Node.JCR_CONTENT).getNode() : node;}}
JcrResourceMetadata has the same issue (line 65):
{\{ if ( (!nodePromotionChecked) && node.isNodeType(NT_FILE)) {}}
This could be changed to:
{\{ if ( (!nodePromotionChecked) && (node.isNodeType(NT_FILE) ||}}
\{{ (node.isNodeType("nt:frozenNode") &&
node.hasProperty("jcr:frozenPrimaryType") }}
\{{ &&
node.getProperty("jcr:frozenPrimaryType").getString().equals(NT_FILE)))) {}}
As I'm still a newbie in Sling, I'm not sure if the proposed solution is
completely right. At the moment, I use a ResourceDecorator for my project with
these changes and this fixes my problem - but there might be a better way to
solve this.
was:
When using the methods resource.getMetadata().getContentType() or
resource.adaptTo(InputStream.class), both methods return null when:
# the resource is a child of a versionable node,
# the resource is of type nt:file, and
# resource has been looked up with a version identifier in the URL (";v=").
>From my understanding, both methods should return the relevant values from the
>versioned node in this code. The error occurs because of line 185 in
>JcrNodeResource.java
{{ Node content = node.isNodeType(NT_FILE)}}
{{ ? node.getNode(JCR_CONTENT)}}
{{ : node.isNodeType(NT_LINKEDFILE) ? node.getProperty(JCR_CONTENT).getNode() :
node;}}
When the resource is looked up with the version modifier, the ode type will not
nt:file. Instead it is jcr:frozenNode with a property jcr:frozenPrimaryType set
to nt:file. Therefore, the above code fails and will not use the jcr:content
subnode, but the node itself. In my opinion, it would be right to change this
to:
{{Node content = (node.isNodeType(NodeType.NT_FILE) ||
(node.isNodeType("nt:frozenNode") && node.hasProperty("jcr:frozenPrimaryType")
}}
{{ && node.getProperty("jcr:frozenPrimaryType").getString().equals(NT_FILE)))}}
{{ ? node.getNode(Node.JCR_CONTENT)}}
{{ : node.isNodeType(JcrConstants.NT_LINKEDFILE) ?
node.getProperty(Node.JCR_CONTENT).getNode() : node;}}
JcrResourceMetadata has the same issue (line 65):
{{ if ( (!nodePromotionChecked) && node.isNodeType(NT_FILE)) {}}
This could be changed to:
{{ if ( (!nodePromotionChecked) && (node.isNodeType(NT_FILE) ||}}
{{ (node.isNodeType("nt:frozenNode") &&
node.hasProperty("jcr:frozenPrimaryType") }}
{{ && node.getProperty("jcr:frozenPrimaryType").getString().equals(NT_FILE))))
{}}
As I'm still a newbie in Sling, I'm not sure if the proposed solution is
completely right. At the moment, I use a ResourceDecorator for my project with
these changes and this fixes my problem - but there might be a better way to
solve this.
> Content-type and InputStream are null when accessing nt:file resources with
> ";v="
> ---------------------------------------------------------------------------------
>
> Key: SLING-9417
> URL: https://issues.apache.org/jira/browse/SLING-9417
> Project: Sling
> Issue Type: Bug
> Components: JCR
> Reporter: Matthias Herold
> Priority: Minor
> Original Estimate: 1h
> Remaining Estimate: 1h
>
> When using the methods resource.getMetadata().getContentType() or
> resource.adaptTo(InputStream.class), both methods return null when:
> # the resource is a child of a versionable node,
> # the resource is of type nt:file, and
> # resource has been looked up with a version identifier in the URL (";v=").
> From my understanding, both methods should return the relevant values from
> the frozen node. The error occurs because of line 185 in JcrNodeResource.java
> {\{ Node content = node.isNodeType(NT_FILE)}}
> \{{ ? node.getNode(JCR_CONTENT)}}
> \{{ : node.isNodeType(NT_LINKEDFILE) ?
> node.getProperty(JCR_CONTENT).getNode() : node;}}
> When the resource is looked up with the version modifier, the ode type will
> not nt:file. Instead it is jcr:frozenNode with a property
> jcr:frozenPrimaryType set to nt:file. Therefore, the above code fails and
> will not use the jcr:content subnode, but the node itself. In my opinion, it
> would be right to change this to:
> {{Node content = (node.isNodeType(NodeType.NT_FILE) ||
> (node.isNodeType("nt:frozenNode") &&
> node.hasProperty("jcr:frozenPrimaryType") }}
> \{{ &&
> node.getProperty("jcr:frozenPrimaryType").getString().equals(NT_FILE)))}}
> \{{ ? node.getNode(Node.JCR_CONTENT)}}
> \{{ : node.isNodeType(JcrConstants.NT_LINKEDFILE) ?
> node.getProperty(Node.JCR_CONTENT).getNode() : node;}}
>
> JcrResourceMetadata has the same issue (line 65):
> {\{ if ( (!nodePromotionChecked) && node.isNodeType(NT_FILE)) {}}
> This could be changed to:
> {\{ if ( (!nodePromotionChecked) && (node.isNodeType(NT_FILE) ||}}
> \{{ (node.isNodeType("nt:frozenNode") &&
> node.hasProperty("jcr:frozenPrimaryType") }}
> \{{ &&
> node.getProperty("jcr:frozenPrimaryType").getString().equals(NT_FILE)))) {}}
>
> As I'm still a newbie in Sling, I'm not sure if the proposed solution is
> completely right. At the moment, I use a ResourceDecorator for my project
> with these changes and this fixes my problem - but there might be a better
> way to solve this.
>
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)