stream position on OutputResolver stream
Added by Erica Coan over 3 years ago
I implemented an OutputResolver class to intercept xsl:result-documents and direct their output to a stream via a Serializer destination. I'm running into an issue where the stream position is at the end of the stream after the serializing is finished. Is this the expected behavior? Is there a way to set the position back to 0? I'm wrapping this up in a DLL in my code library, and I'd like for the stream returned to the calling applications to be set up for an immediate read, rather than expecting the calling application to reposition it to the beginning.
I'm using HE 10.2.0 for .NET. Relevant code is below.
ecmVFile is a class from a different internal code library, which essentially wrappers a stream along with some additional properties like a file name and extension for when the stream is eventually written to file. I can likely reset the stream position there if needed, but was hoping to accomplish it here instead.
Friend Function HandleResultDocument(href As String, baseUri As Uri) As XmlDestination Implements IResultDocumentHandler.HandleResultDocument
mLog.BufferLog("handling result document. href = " & href, 4)
Dim p As New Processor
Dim mySerializer As Serializer = p.NewSerializer
Dim myUri As New Uri(href, UriKind.RelativeOrAbsolute)
If myUri.IsAbsoluteUri Then
mLog.BufferLog("href indicates an absolute path. writing result to physical file and adding URI to physical file URI list.", 4)
mySerializer.SetOutputFile(myUri.LocalPath)
physicalSecondaryOutputURIs.Add(myUri.LocalPath)
Else
mLog.BufferLog("href indicates a relative path. writing result to stream and adding to vfile list.", 4)
Dim myStream As New System.IO.MemoryStream
mySerializer.SetOutputStream(myStream)
Dim myFileName As String
Dim myExtension As String
If href.Contains(".") Then
myFileName = href.Substring(0, href.LastIndexOf("."))
myExtension = href.Substring(href.LastIndexOf(".") + 1)
Else
myFileName = href
myExtension = ""
End If
Dim myFile As New ecmVFile(, myStream,,, myFileName, myExtension)
virtualSecondaryOutputFiles.Add(myFile)
End If
Return mySerializer
End Function
Apologies if I've posted this in the wrong spot, but I didn't want to post it in the issues forum since I suspect it's expected behavior.
Replies (2)
RE: stream position on OutputResolver stream - Added by Michael Kay over 3 years ago
Interesting.
My immediate thought is that changing the behaviour could be disruptive to existing users: if they are expecting to append to the stream after it has been written, then repositioning to the start would be bad news.
RE: stream position on OutputResolver stream - Added by Erica Coan over 3 years ago
That makes sense. I'll look into repositioning on my side, or using a TextWriter instead of the MemoryStream. Thank you!
Please register to reply