Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Got ZnCharacterWriteStream did not understand #greaseNext:putAll:startingAt: while storing a Canvas on a file #1451

Open
vitormcruz opened this issue Jan 8, 2025 · 2 comments

Comments

@vitormcruz
Copy link

Pharo 11, Windows, using Seaside 3.5.9

While trying to build a WAHtmlCanvas and storing it in a file, I got a "Instance of ZnCharacterWriteStream did not understand #greaseNext:putAll:startingAt:".

The code used to generate the file is:

	aFile writeStreamDo: [ :aFileStream |
		WAHtmlCanvas builder 
			documentClass: WAHtmlDocument ;
			rootClass: WAHtmlRoot;
			fullDocument: true;
			rootBlock: [ :root | root style: self style ];
			render: self on: aFileStream.		
	]

The error stacktrace is:

WAPharoXmlEncoder(WAPharoEncoder)>>nextPutAllFast:
WAPharoXmlEncoder(WAPharoEncoder)>>nextPutAll:
ByteString(String)>>encodeOn:
WAHtmlDocument(WAXmlDocument)>>print:
WAHtmlCanvas(WARenderer)>>text:
WAHtmlCanvas(WACanvas)>>text:
ByteString(String)>>renderOn:
WAHtmlCanvas(WARenderer)>>render:
WAHtmlCanvas(WACanvas)>>render:
[
		self before.
		canvas render: anObject.
		self after ] in WAGenericTag(WATagBrush)>>with: in Block: [...
FullBlockClosure(BlockClosure)>>renderOn:
WAHtmlCanvas(WARenderer)>>render:
WAHtmlCanvas(WACanvas)>>render:
WAHtmlCanvas(WACanvas)>>nest:
WAGenericTag(WABrush)>>with:
WAGenericTag(WATagBrush)>>with:
WAHtmlCanvas>>preformatted:
[ html preformatted: self preformatedMessageText ] in [
         html div
            class: 'scenario-text-body';
            with: [ super body: html ].

         html div
            class: self messageCssBody;
            with: [ html preformatted: self preformatedMessageText ] 
		] in TomeScenarioErrorViewFragment(TomeScenarioWithMessageViewFragment)>>body: in Block: [ html preformatted: self preformatedMessageText ]
FullBlockClosure(BlockClosure)>>renderOn:
WAHtmlCanvas(WARenderer)>>render:
WAHtmlCanvas(WACanvas)>>render:
[
		self before.
		canvas render: anObject.
		self after ] in WAGenericTag(WATagBrush)>>with: in Block: [...
FullBlockClosure(BlockClosure)>>renderOn:
WAHtmlCanvas(WARenderer)>>render:
WAHtmlCanvas(WACanvas)>>render:
WAHtmlCanvas(WACanvas)>>nest:
WAGenericTag(WABrush)>>with:
WAGenericTag(WATagBrush)>>with:
[
         html div
            class: 'scenario-text-body';
            with: [ super body: html ].

         html div
            class: self messageCssBody;
            with: [ html preformatted: self preformatedMessageText ] 
		] in TomeScenarioErrorViewFragment(TomeScenarioWithMessageViewFragment)>>body: in Block: [...
FullBlockClosure(BlockClosure)>>renderOn:
WAHtmlCanvas(WARenderer)>>render:
WAHtmlCanvas(WACanvas)>>render:
[
		self before.
		canvas render: anObject.
		self after ] in WAGenericTag(WATagBrush)>>with: in Block: [...
FullBlockClosure(BlockClosure)>>renderOn:
WAHtmlCanvas(WARenderer)>>render:
WAHtmlCanvas(WACanvas)>>render:
WAHtmlCanvas(WACanvas)>>nest:
WAGenericTag(WABrush)>>with:
WAGenericTag(WATagBrush)>>with:
TomeScenarioErrorViewFragment(TomeScenarioWithMessageViewFragment)>>body:
[ self body: html ] in TomeScenarioErrorViewFragment(TomeScenarioViewFragment)>>renderOn: in Block: [ self body: html ]
FullBlockClosure(BlockClosure)>>renderOn:
WAHtmlCanvas(WARenderer)>>render:
WAHtmlCanvas(WACanvas)>>render:
[
		self before.
		canvas render: anObject.
		self after ] in WAGenericTag(WATagBrush)>>with: in Block: [...
FullBlockClosure(BlockClosure)>>renderOn:
WAHtmlCanvas(WARenderer)>>render:
WAHtmlCanvas(WACanvas)>>render:
WAHtmlCanvas(WACanvas)>>nest:
WAGenericTag(WABrush)>>with:
WAGenericTag(WATagBrush)>>with:
TomeScenarioErrorViewFragment(TomeScenarioViewFragment)>>renderOn:
[ :scenario | scenario renderOn: html ] in [ scenarios do: [ :scenario | scenario renderOn: html ] ] in [ 
			html div class: 'scenarios-', classTypePrefix.
			html div
				class: 'scenarios-body-', classTypePrefix;
			 	with: [ scenarios do: [ :scenario | scenario renderOn: html ] ]
		] in TomeFeatureView>>renderScenarios:on:usingClassTypePrefix: in Block: [ :scenario | scenario renderOn: html ]
OrderedCollection>>do:
[ scenarios do: [ :scenario | scenario renderOn: html ] ] in [ 
			html div class: 'scenarios-', classTypePrefix.
			html div
				class: 'scenarios-body-', classTypePrefix;
			 	with: [ scenarios do: [ :scenario | scenario renderOn: html ] ]
		] in TomeFeatureView>>renderScenarios:on:usingClassTypePrefix: in Block: [ scenarios do: [ :scenario | scenario renderO[..]
FullBlockClosure(BlockClosure)>>renderOn:
WAHtmlCanvas(WARenderer)>>render:
WAHtmlCanvas(WACanvas)>>render:
[
		self before.
		canvas render: anObject.
		self after ] in WAGenericTag(WATagBrush)>>with: in Block: [...
FullBlockClosure(BlockClosure)>>renderOn:
WAHtmlCanvas(WARenderer)>>render:
WAHtmlCanvas(WACanvas)>>render:
WAHtmlCanvas(WACanvas)>>nest:
WAGenericTag(WABrush)>>with:
WAGenericTag(WATagBrush)>>with:
[ 
			html div class: 'scenarios-', classTypePrefix.
			html div
				class: 'scenarios-body-', classTypePrefix;
			 	with: [ scenarios do: [ :scenario | scenario renderOn: html ] ]
		] in TomeFeatureView>>renderScenarios:on:usingClassTypePrefix: in Block: [ ...
FullBlockClosure(BlockClosure)>>renderOn:
WAHtmlCanvas(WARenderer)>>render:
WAHtmlCanvas(WACanvas)>>render:
[
		self before.
		canvas render: anObject.
		self after ] in WAGenericTag(WATagBrush)>>with: in Block: [...
FullBlockClosure(BlockClosure)>>renderOn:
WAHtmlCanvas(WARenderer)>>render:
WAHtmlCanvas(WACanvas)>>render:
WAHtmlCanvas(WACanvas)>>nest:
WAGenericTag(WABrush)>>with:
WAGenericTag(WATagBrush)>>with:
TomeFeatureView>>renderScenarios:on:usingClassTypePrefix:
TomeFeatureView>>renderErrorScenarios:on:
[
		self renderFailedScenarios: (testResult failures collect: [ :test | test scenarioToRun asScenarioHtml]) on: html.
		html div class: 'scenario-section-splitter'.
		
		self renderErrorScenarios: (testResult errors collect: [ :test | test scenarioToRun asScenarioHtml]) on: html.
		html div class: 'scenario-section-splitter'.
		
		self renderPassedScenarios: (testResult passed collect: [ :test | test scenarioToRun asScenarioHtml]) on: html.
	] in TomeFeatureView>>renderContentOn: in Block: [...
FullBlockClosure(BlockClosure)>>renderOn:
WAHtmlCanvas(WARenderer)>>render:
WAHtmlCanvas(WACanvas)>>render:
[
		self before.
		canvas render: anObject.
		self after ] in WAGenericTag(WATagBrush)>>with: in Block: [...
FullBlockClosure(BlockClosure)>>renderOn:
WAHtmlCanvas(WARenderer)>>render:
WAHtmlCanvas(WACanvas)>>render:
WAHtmlCanvas(WACanvas)>>nest:
WAGenericTag(WABrush)>>with:
WAGenericTag(WATagBrush)>>with:
TomeFeatureView>>renderContentOn:
WARenderVisitor>>visitPainter:
WARenderVisitor(WAPainterVisitor)>>visitPresenter:
WARenderVisitor(WAPainterVisitor)>>visitComponent:
TomeFeatureView(WAComponent)>>accept:
WARenderVisitor(WAVisitor)>>visit:
WARenderingGuide(WAPresenterGuide)>>visitPainter:
WARenderingGuide(WAPainterVisitor)>>visitPresenter:
WARenderingGuide(WAPainterVisitor)>>visitComponent:
TomeFeatureView(WAComponent)>>accept:
WARenderingGuide(WAPainterVisitor)>>visitDecorationsOfComponent:
TomeFeatureView(WAComponent)>>acceptDecorated:
WARenderingGuide(WAPresenterGuide)>>visit:
TomeFeatureView(WAPainter)>>renderWithContext:
TomeFeatureView(WAPainter)>>renderOn:
WAHtmlCanvas(WARenderer)>>render:
WAHtmlCanvas(WACanvas)>>render:
WABuilder>>render:on:
[ :aFileStream |
		WAHtmlCanvas builder 
			documentClass: WAHtmlDocument ;
			rootClass: WAHtmlRoot;
			fullDocument: true;
			rootBlock: [ :root | root style: self style ];
			render: self on: aFileStream.		
	] in TomeFeatureView>>generateSimplePageOnStream: in Block: [ :aFileStream |...
[ aBlock value: stream ] in FileReference(AbstractFileReference)>>writeStreamDo: in Block: [ aBlock value: stream ]
FullBlockClosure(BlockClosure)>>ensure:
FileReference(AbstractFileReference)>>writeStreamDo:
TomeFeatureView>>generateSimplePageOnStream:
[ :featureClass |
			TomeFeatureView new
				testResult: aTestResult;
				selectedFeatureClass: featureClass;
				generateSimplePageOnStream: (self reportingFileFor: featureClass)
		] in TomeHTMLReportingChain>>handle: in Block: [ :featureClass |...
OrderedCollection>>do:
TomeHTMLReportingChain>>handle:
TomeHTMLReportingChain(TomeScenarioReportingChain)>>templateHandle:
TomeScenarioReportingChain>>handleNext:
TomeScenarioReportingChain>>templateHandle:
TomeScenarioReportingChain>>startChainFor:
[ reportingChainObject startChainFor: aResult ] in TomeFeatureSuite>>runUnmanaged: in Block: [ reportingChainObject startChainFor: aResult ]
FullBlockClosure(BlockClosure)>>ensure:
TomeFeatureSuite>>runUnmanaged:
[
		self runUnmanaged: aResult ] in TomeFeatureSuite(TestSuite)>>run: in Block: [...
[ self value: anExecutionEnvironment.
	anExecutionEnvironment activated.
	aBlock value  ] in CurrentExecutionEnvironment class>>activate:for: in Block: [ self value: anExecutionEnvironment....
FullBlockClosure(BlockClosure)>>ensure:
CurrentExecutionEnvironment class>>activate:for:
TestExecutionEnvironment(ExecutionEnvironment)>>beActiveDuring:
DefaultExecutionEnvironment>>runTestsBy:
CurrentExecutionEnvironment class>>runTestsBy:
TomeFeatureSuite(TestSuite)>>run:
TomeFeatureSuite(TestSuite)>>run
TomeFeatureView>>renderContentOn:
WARenderVisitor>>visitPainter:
WARenderVisitor(WAPainterVisitor)>>visitPresenter:
WARenderVisitor(WAPainterVisitor)>>visitComponent:
TomeFeatureView(WAComponent)>>accept:
WARenderVisitor(WAVisitor)>>visit:
WARenderingGuide(WAPresenterGuide)>>visitPainter:
WARenderingGuide(WAPainterVisitor)>>visitPresenter:
WARenderingGuide(WAPainterVisitor)>>visitComponent:
TomeFeatureView(WAComponent)>>accept:
WARenderingGuide(WAPainterVisitor)>>visitDecorationsOfComponent:
TomeFeatureView(WAComponent)>>acceptDecorated:
WARenderingGuide(WAPresenterGuide)>>visit:
TomeFeatureView(WAPainter)>>renderWithContext:
TomeFeatureView(WAPainter)>>renderOn:
WAHtmlCanvas(WARenderer)>>render:
WAHtmlCanvas(WACanvas)>>render:
TomeReportingWebApp>>renderContentOn:
WARenderVisitor>>visitPainter:
WARenderVisitor(WAPainterVisitor)>>visitPresenter:
WARenderVisitor(WAPainterVisitor)>>visitComponent:
TomeReportingWebApp(WAComponent)>>accept:
WARenderVisitor(WAVisitor)>>visit:
WARenderingGuide(WAPresenterGuide)>>visitPainter:
WARenderingGuide(WAPainterVisitor)>>visitPresenter:
WARenderingGuide(WAPainterVisitor)>>visitComponent:
TomeReportingWebApp(WAComponent)>>accept:
TomeReportingWebApp(WAPresenter)>>renderUndecoratedWithContext:
WAToolDecoration(WADecoration)>>renderNextOn:
WAToolDecoration>>renderChildOn:
WAToolDecoration>>renderContentOn:
WARenderVisitor>>visitPainter:
WARenderVisitor(WAPainterVisitor)>>visitPresenter:
WARenderVisitor(WAPainterVisitor)>>visitDecoration:
WAToolDecoration(WADecoration)>>accept:
WARenderVisitor(WAVisitor)>>visit:
WARenderingGuide(WAPresenterGuide)>>visitPainter:
WARenderingGuide(WAPainterVisitor)>>visitPresenter:
WARenderingGuide(WAPainterVisitor)>>visitDecoration:
WAToolDecoration(WADecoration)>>accept:
WARenderingGuide(WAPainterVisitor)>>visitDecorationsOfComponent:
TomeReportingWebApp(WAComponent)>>acceptDecorated:
WARenderingGuide(WAPresenterGuide)>>visit:
TomeReportingWebApp(WAPainter)>>renderWithContext:
WARenderPhaseContinuation>>processRendering:
[ :response | self processRendering: response ] in WARenderPhaseContinuation>>handleFiltered: in Block: [ :response | self processRendering: response ]
WARequestContext>>respond:
WARenderPhaseContinuation(WASessionContinuation)>>respond:
WARenderPhaseContinuation>>handleFiltered:
[ self filter handleFiltered: aRequestContext ] in WARenderPhaseContinuation(WARequestHandler)>>handle: in Block: [ self filter handleFiltered: aRequestContext ]
[ activeProcess
			psValueAt: index
			put: anObject.
		aBlock value ] in WACurrentRequestContext(DynamicVariable)>>value:during: in Block: [ activeProcess...
FullBlockClosure(BlockClosure)>>ensure:
WACurrentRequestContext(DynamicVariable)>>value:during:
WACurrentRequestContext class(DynamicVariable class)>>value:during:
WACurrentRequestContext class(GRDynamicVariable class)>>use:during:
[ WACurrentRequestContext use: self during: aBlock ] in WARequestContext>>push:during: in Block: [ WACurrentRequestContext use: self during: aB[..]
FullBlockClosure(BlockClosure)>>ensure:
WARequestContext>>push:during:
WARenderPhaseContinuation(WARequestHandler)>>handle:
[ super handle: aRequestContext ] in WARenderPhaseContinuation(WASessionContinuation)>>handle: in Block: [ super handle: aRequestContext ]
FullBlockClosure(BlockClosure)>>on:do:
WARenderPhaseContinuation(WASessionContinuation)>>withUnregisteredHandlerDo:
WARenderPhaseContinuation(WASessionContinuation)>>handle:
WASession>>handleFiltered:
WATimingToolFilter(WARequestFilter)>>handleFiltered:
[ super handleFiltered: aRequestContext ] in WATimingToolFilter>>handleFiltered: in Block: [ super handleFiltered: aRequestContext ]
FullBlockClosure(BlockClosure)>>ensure:
WATimingToolFilter>>handleFiltered:
WADeprecatedToolFilter(WARequestFilter)>>handleFiltered:
[ super handleFiltered: aRequestContext ] in WADeprecatedToolFilter>>handleFiltered: in Block: [ super handleFiltered: aRequestContext ]
FullBlockClosure(BlockClosure)>>on:do:
WADeprecatedToolFilter>>handleFiltered:
WAMutualExclusionFilter(WARequestFilter)>>handleFiltered:
[ super handleFiltered: aRequestContext ] in WAMutualExclusionFilter>>handleFiltered: in Block: [ super handleFiltered: aRequestContext ]
FullBlockClosure(BlockClosure)>>ensure:
[
				self owner: process.
				aBlock ensure: [ self owner: nil ] ] in WAMutex>>critical: in Block: [...
[
		caught := true.
		self wait.
		blockValue := mutuallyExcludedBlock value
	] in Semaphore>>critical: in Block: [...
FullBlockClosure(BlockClosure)>>ensure:
Semaphore>>critical:
WAMutex>>critical:
WAMutualExclusionFilter>>handleFiltered:
[ self filter handleFiltered: aRequestContext ] in WASession(WARequestHandler)>>handle: in Block: [ self filter handleFiltered: aRequestContext ]
[ activeProcess
			psValueAt: index
			put: anObject.
		aBlock value ] in WACurrentRequestContext(DynamicVariable)>>value:during: in Block: [ activeProcess...
FullBlockClosure(BlockClosure)>>ensure:
WACurrentRequestContext(DynamicVariable)>>value:during:
WACurrentRequestContext class(DynamicVariable class)>>value:during:
WACurrentRequestContext class(GRDynamicVariable class)>>use:during:
[ WACurrentRequestContext use: self during: aBlock ] in WARequestContext>>push:during: in Block: [ WACurrentRequestContext use: self during: aB[..]
FullBlockClosure(BlockClosure)>>ensure:
WARequestContext>>push:during:
WASession(WARequestHandler)>>handle:
WAApplication(WARegistry)>>dispatch:to:key:
WAApplication(WARegistry)>>handleKeyed:with:context:
WAApplication(WARegistry)>>handleFiltered:
WAApplication>>handleFiltered:
WAExceptionFilter(WARequestFilter)>>handleFiltered:
[ super handleFiltered: aRequestContext ] in [
		WACurrentExceptionHandler
			use: handler
			during: [ super handleFiltered: aRequestContext ] ] in WAExceptionFilter>>handleFiltered: in Block: [ super handleFiltered: aRequestContext ]
[ activeProcess
			psValueAt: index
			put: anObject.
		aBlock value ] in WACurrentExceptionHandler(DynamicVariable)>>value:during: in Block: [ activeProcess...
FullBlockClosure(BlockClosure)>>ensure:
WACurrentExceptionHandler(DynamicVariable)>>value:during:
WACurrentExceptionHandler class(DynamicVariable class)>>value:during:
WACurrentExceptionHandler class(GRDynamicVariable class)>>use:during:
[
		WACurrentExceptionHandler
			use: handler
			during: [ super handleFiltered: aRequestContext ] ] in WAExceptionFilter>>handleFiltered: in Block: [...
FullBlockClosure(BlockClosure)>>on:do:
WAWalkbackErrorHandler(WAExceptionHandler)>>handleExceptionsDuring:
WAExceptionFilter>>handleFiltered:
[ self filter handleFiltered: aRequestContext ] in WAApplication(WARequestHandler)>>handle: in Block: [ self filter handleFiltered: aRequestContext ]
[ activeProcess
			psValueAt: index
			put: anObject.
		aBlock value ] in WACurrentRequestContext(DynamicVariable)>>value:during: in Block: [ activeProcess...
FullBlockClosure(BlockClosure)>>ensure:
WACurrentRequestContext(DynamicVariable)>>value:during:
WACurrentRequestContext class(DynamicVariable class)>>value:during:
WACurrentRequestContext class(GRDynamicVariable class)>>use:during:
[ WACurrentRequestContext use: self during: aBlock ] in WARequestContext>>push:during: in Block: [ WACurrentRequestContext use: self during: aB[..]
FullBlockClosure(BlockClosure)>>ensure:
WARequestContext>>push:during:
WAApplication(WARequestHandler)>>handle:
WADispatcher>>handleFiltered:named:
WADispatcher>>handleFiltered:
[ self filter handleFiltered: aRequestContext ] in WADispatcher(WARequestHandler)>>handle: in Block: [ self filter handleFiltered: aRequestContext ]
[ activeProcess
			psValueAt: index
			put: anObject.
		aBlock value ] in WACurrentRequestContext(DynamicVariable)>>value:during: in Block: [ activeProcess...
FullBlockClosure(BlockClosure)>>ensure:
WACurrentRequestContext(DynamicVariable)>>value:during:
WACurrentRequestContext class(DynamicVariable class)>>value:during:
WACurrentRequestContext class(GRDynamicVariable class)>>use:during:
[ WACurrentRequestContext use: self during: aBlock ] in WARequestContext>>push:during: in Block: [ WACurrentRequestContext use: self during: aB[..]
FullBlockClosure(BlockClosure)>>ensure:
WARequestContext>>push:during:
WADispatcher(WARequestHandler)>>handle:
[ self requestHandler handle: aRequestContext ] in ZnZincServerAdaptor(WAServerAdaptor)>>handleRequest: in Block: [ self requestHandler handle: aRequestContext ]
FullBlockClosure(BlockClosure)>>on:do:
ZnZincServerAdaptor(WAServerAdaptor)>>handleRequest:
ZnZincServerAdaptor(WAServerAdaptor)>>handle:
[ self handle: context.
		"URL -> String conversion in #responseFrom: needs access to request context for codec"
		context push: self requestHandler during: [ self responseFrom: context ] ] in ZnZincServerAdaptor(WAServerAdaptor)>>process: in Block: [ self handle: context....
FullBlockClosure(BlockClosure)>>ensure:
ZnZincServerAdaptor(WAServerAdaptor)>>process:
ZnSeasideServerAdaptorDelegate>>handleRequest:
[
			self delegate
				ifNil: [ ZnResponse notFound: request uri ]
				ifNotNil: [ :delegate | delegate handleRequest: request ] ] in ZnManagingMultiThreadedServer(ZnSingleThreadedServer)>>authenticateAndDelegateRequest: in Block: [...
ZnManagingMultiThreadedServer(ZnSingleThreadedServer)>>authenticateRequest:do:
ZnManagingMultiThreadedServer(ZnSingleThreadedServer)>>authenticateAndDelegateRequest:
[ self authenticateAndDelegateRequest: request ] in [ [ self authenticateAndDelegateRequest: request ]
			on: ZnRespond
			do: [ :notification | notification response ] ] in ZnManagingMultiThreadedServer(ZnSingleThreadedServer)>>handleRequestProtected: in Block: [ self authenticateAndDelegateRequest: request ]
FullBlockClosure(BlockClosure)>>on:do:
[ [ self authenticateAndDelegateRequest: request ]
			on: ZnRespond
			do: [ :notification | notification response ] ] in ZnManagingMultiThreadedServer(ZnSingleThreadedServer)>>handleRequestProtected: in Block: [ [ self authenticateAndDelegateRequest: reque[..]
FullBlockClosure(BlockClosure)>>on:do:
ZnManagingMultiThreadedServer(ZnSingleThreadedServer)>>handleRequestProtected:
ZnManagingMultiThreadedServer(ZnSingleThreadedServer)>>handleRequest:timing:
ZnManagingMultiThreadedServer(ZnMultiThreadedServer)>>executeOneRequestResponseOn:
[
		[ self executeOneRequestResponseOn: stream ] whileFalse ] in ZnManagingMultiThreadedServer(ZnMultiThreadedServer)>>executeRequestResponseLoopOn: in Block: [...
[ activeProcess
			psValueAt: index
			put: anObject.
		aBlock value ] in ZnCurrentOptions(DynamicVariable)>>value:during: in Block: [ activeProcess...
FullBlockClosure(BlockClosure)>>ensure:
ZnCurrentOptions(DynamicVariable)>>value:during:
ZnCurrentOptions class(DynamicVariable class)>>value:during:
[ ZnCurrentOptions value: self during: block ] in ZnOptions>>conditionallyDuring: in Block: [ ZnCurrentOptions value: self during: block ]
UndefinedObject>>ifNil:ifNotNil:
ZnOptions>>conditionallyDuring:
[
			self localOptions conditionallyDuring: block ] in ZnManagingMultiThreadedServer(ZnSingleThreadedServer)>>withDynamicVariablesDo: in Block: [...
[ activeProcess
			psValueAt: index
			put: anObject.
		aBlock value ] in ZnCurrentServer(DynamicVariable)>>value:during: in Block: [ activeProcess...
FullBlockClosure(BlockClosure)>>ensure:
ZnCurrentServer(DynamicVariable)>>value:during:
ZnCurrentServer class(DynamicVariable class)>>value:during:
ZnManagingMultiThreadedServer(ZnSingleThreadedServer)>>withDynamicVariablesDo:
ZnManagingMultiThreadedServer(ZnMultiThreadedServer)>>executeRequestResponseLoopOn:
[ self executeRequestResponseLoopOn: stream ] in [ [ self executeRequestResponseLoopOn: stream ]
		ensure: [ self logConnectionClosed: stream. self closeSocketStream: stream ] ] in [ [ [ self executeRequestResponseLoopOn: stream ]
		ensure: [ self logConnectionClosed: stream. self closeSocketStream: stream ] ]
			ifCurtailed: [ socket destroy ] ] in ZnManagingMultiThreadedServer(ZnMultiThreadedServer)>>serveConnectionsOn: in Block: [ self executeRequestResponseLoopOn: stream ]
FullBlockClosure(BlockClosure)>>ensure:
[ [ self executeRequestResponseLoopOn: stream ]
		ensure: [ self logConnectionClosed: stream. self closeSocketStream: stream ] ] in [ [ [ self executeRequestResponseLoopOn: stream ]
		ensure: [ self logConnectionClosed: stream. self closeSocketStream: stream ] ]
			ifCurtailed: [ socket destroy ] ] in ZnManagingMultiThreadedServer(ZnMultiThreadedServer)>>serveConnectionsOn: in Block: [ [ self executeRequestResponseLoopOn: stream [..]
FullBlockClosure(BlockClosure)>>ifCurtailed:
[ [ [ self executeRequestResponseLoopOn: stream ]
		ensure: [ self logConnectionClosed: stream. self closeSocketStream: stream ] ]
			ifCurtailed: [ socket destroy ] ] in ZnManagingMultiThreadedServer(ZnMultiThreadedServer)>>serveConnectionsOn: in Block: [ [ [ self executeRequestResponseLoopOn: strea[..]
[self value.
			"IMPORTANT: Do not step over next line of code. See method comments for details"
			Processor terminateRealActive] in FullBlockClosure(BlockClosure)>>newProcess in Block: [self value....
@jbrichau
Copy link
Member

jbrichau commented Jan 10, 2025 via email

@vitormcruz
Copy link
Author

Hello,

My workaround for now was to create a String on memory and then write it on the file, which for my use case is fine:

| html |

html := String streamContents: [ :s |
WAHtmlCanvas builder 
	documentClass: WAHtmlDocument ;
	rootClass: WAHtmlRoot;
	fullDocument: true;
	rootBlock: [ :root | root style: self style ];
	render: self on: s.	
].

aFile writeStreamDo: [ :aFileStream | 	aFileStream nextPutAll: html ].

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants