You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by "Matthias Herold (Jira)" <ji...@apache.org> on 2020/05/02 00:26:00 UTC

[jira] [Updated] (SLING-9417) Content-type and InputStream are null when accessing nt:file resources with ";v="

     [ 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)