Uploaded image for project: 'Jackrabbit Content Repository'
  1. Jackrabbit Content Repository
  2. JCR-784

NodeType.canSetProperty(keyString, Value) consumes the InputStream making it unusable for setting the property

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Minor
    • Resolution: Invalid
    • 1.2.3
    • None
    • nodetype
    • None
    • Any

    Description

      When checking if a binary property can be added to a given node type, the input stream inside the BinaryValue object is consumed, making the subsequent call to setProperty(..) not work because the stream has been positioned at the end of the input stream.

      The stream is consumed by the following line in NodeTypeImpl.canSetProperty(..)

      // create InternalValue from Value and perform
      // type conversion as necessary
      InternalValue internalValue = InternalValue.create(value, targetType,
      nsResolver);

      The internalValue object becomes a BlobFileValue that consumes the input stream in it's constructor.

      Expected:
      The canAddProperty decision should be made without consuming the input stream in the Value object.

      Example Code:

      Node targetNode; //get node from somewhere
      InputStream inStream; //get instream from somewhere

      String key = "propName"; //property key
      Value value = session.getValueFactory().createValue(inStream);

      NodeType nodeType = revisionNode.getPrimaryNodeType();
      if (nodeType.canAddProperty(key, value)) {
      targetNode.setProperty(key, value);
      }

      Workaround:
      Create a dummy value to do the canAddProperty check.

      Value dummyValue = session.getValueFactory().createValue(session, new ByteArrayInputStream(new byte[0]));
      if (revisionNodeType.canSetProperty(key, dummyValue)) {
      revisionNode.setProperty(key, (Value)value);
      }

      Attachments

        Activity

          People

            Unassigned Unassigned
            enorman Eric Norman
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: