Package org.restlet.representation
Class DigesterRepresentation
java.lang.Object
org.restlet.representation.Variant
org.restlet.representation.RepresentationInfo
org.restlet.representation.Representation
org.restlet.util.WrapperRepresentation
org.restlet.representation.DigesterRepresentation
Representation capable of computing a digest. It wraps another representation
and allows to get the computed digest of the wrapped entity after reading or
writing operations. The final digest value is guaranteed to be correct only
after the wrapped representation has been entirely exhausted (that is to say
read or written).
This wrapper allows getting the computed digest at the same time the representation is read or written. It does not need two separate operations which may require specific attention for transient representations.
This wrapper allows getting the computed digest at the same time the representation is read or written. It does not need two separate operations which may require specific attention for transient representations.
- Author:
- Jerome Louvel
- See Also:
-
Field Summary
Fields inherited from class org.restlet.representation.Representation
UNKNOWN_SIZE -
Constructor Summary
ConstructorsConstructorDescriptionDigesterRepresentation(Representation wrappedRepresentation) Constructor.
By default, the instance relies on theDigest.ALGORITHM_MD5digest algorithm.DigesterRepresentation(Representation wrappedRepresentation, String algorithm) Constructor. -
Method Summary
Modifier and TypeMethodDescriptionbooleanCheck that the digest computed from the representation content and the digest declared by the representation are the same.
Since this method relies on thecomputeDigest(String)method, and since this method reads entirely the representation's stream, user must take care of the content of the representation in case the latter is transient.booleancheckDigest(String algorithm) Check that the digest computed from the representation content and the digest declared by the representation are the same.Compute the representation digest according to MD5 algorithm.
If case this algorithm is the same as the one provided at instantiation, the computation operation is made with the current stored computed value and does not require to entirely exhaust the representation's stream.computeDigest(String algorithm) Compute the representation digest according to the given algorithm.
Since this method entirely reads the representation stream, user must take care of the content of the representation in case the latter is transient.longexhaust()Exhausts the content of the representation by reading it and silently discarding anything read.Returns the current computed digest value of the representation.Returns a character reader with the representation's content.Returns a stream with the representation's content.getText()Converts the representation to a string value.voidwrite(OutputStream outputStream) Writes the representation to a byte stream.voidWrites the representation to a characters writer.Methods inherited from class org.restlet.util.WrapperRepresentation
getAvailableSize, getCharacterSet, getDigest, getDisposition, getEncodings, getExpirationDate, getLanguages, getLocationRef, getMediaType, getModificationDate, getRange, getSize, getTag, getWrappedRepresentation, isAvailable, isTransient, release, setAvailable, setCharacterSet, setDigest, setDisposition, setEncodings, setExpirationDate, setLanguages, setLocationRef, setLocationRef, setMediaType, setModificationDate, setRange, setSize, setTag, setTransientMethods inherited from class org.restlet.representation.Representation
append, hasKnownSize, isEmptyMethods inherited from class org.restlet.representation.Variant
createClientInfo, equals, hashCode, includes, isCompatible, toString
-
Constructor Details
-
DigesterRepresentation
Constructor.
By default, the instance relies on theDigest.ALGORITHM_MD5digest algorithm.- Parameters:
wrappedRepresentation- The wrapped representation.- Throws:
NoSuchAlgorithmException
-
DigesterRepresentation
public DigesterRepresentation(Representation wrappedRepresentation, String algorithm) throws NoSuchAlgorithmException Constructor.- Parameters:
wrappedRepresentation- The wrapped representation.algorithm- The digest algorithm.- Throws:
NoSuchAlgorithmException
-
-
Method Details
-
checkDigest
public boolean checkDigest()Check that the digest computed from the representation content and the digest declared by the representation are the same.
Since this method relies on thecomputeDigest(String)method, and since this method reads entirely the representation's stream, user must take care of the content of the representation in case the latter is transient.- Returns:
- True if both digests are not null and equals.
-
checkDigest
Check that the digest computed from the representation content and the digest declared by the representation are the same. It also first checks that the algorithms are the same.
Since this method relies on thecomputeDigest(String)method, and since this method reads entirely the representation's stream, user must take care of the content of the representation in case the latter is transient.- Parameters:
algorithm- The algorithm used to compute the digest to compare with. See constant values inDigest.- Returns:
- True if both digests are not null and equals.
-
computeDigest
Compute the representation digest according to MD5 algorithm.
If case this algorithm is the same as the one provided at instantiation, the computation operation is made with the current stored computed value and does not require to entirely exhaust the representation's stream. -
computeDigest
Compute the representation digest according to the given algorithm.
Since this method entirely reads the representation stream, user must take care of the content of the representation in case the latter is transient.- Parameters:
algorithm- The algorithm used to compute the digest. See constant values inDigest.- Returns:
- The computed digest or null if the digest cannot be computed.
-
exhaust
Exhausts the content of the representation by reading it and silently discarding anything read.- Overrides:
exhaustin classWrapperRepresentation- Returns:
- The number of bytes consumed or -1 if unknown.
- Throws:
IOException
-
getComputedDigest
Returns the current computed digest value of the representation. User must be aware that, if the representation has not been entirely read or written, the computed digest value may not be accurate.- Returns:
- The current computed digest value.
-
getReader
Description copied from class:RepresentationReturns a character reader with the representation's content. This method is ensured to return a fresh reader for each invocation unless it is a transient representation, in which case null is returned. If the representation has no character set defined, the system's default one will be used.- Overrides:
getReaderin classWrapperRepresentation- Returns:
- A reader with the representation's content.
- Throws:
IOException
-
getStream
Returns a stream with the representation's content. This method is ensured to return a fresh stream for each invocation unless it is a transient representation, in which case null is returned.
The stream of the underlying representation is wrapped with a new instance of theDigestInputStreamclass, which allows to compute progressively the digest value.- Overrides:
getStreamin classWrapperRepresentation- Returns:
- A stream with the representation's content.
- Throws:
IOException
-
getText
Description copied from class:RepresentationConverts the representation to a string value. Be careful when using this method as the conversion of large content to a string fully stored in memory can result in OutOfMemoryErrors being thrown.- Overrides:
getTextin classWrapperRepresentation- Returns:
- The representation as a string value.
- Throws:
IOException
-
write
Writes the representation to a byte stream. This method is ensured to write the full content for each invocation unless it is a transient representation, in which case an exception is thrown.
Note that the class implementing this method shouldn't flush or close the givenOutputStreamafter writing to it as this will be handled by the Restlet connectors automatically.
The output stream is wrapped with a new instance of theDigestOutputStreamclass, which allows to compute progressively the digest value.- Overrides:
writein classWrapperRepresentation- Parameters:
outputStream- The output stream.- Throws:
IOException
-
write
Description copied from class:RepresentationWrites the representation to a characters writer. This method is ensured to write the full content for each invocation unless it is a transient representation, in which case an exception is thrown.
Note that the class implementing this method shouldn't flush or close the givenWriterafter writing to it as this will be handled by the Restlet connectors automatically.- Overrides:
writein classWrapperRepresentation- Parameters:
writer- The characters writer.- Throws:
IOException
-