Skip to content

Commit 8b8fe65

Browse files
committed
fix stream closed bug
1 parent 2177e58 commit 8b8fe65

1 file changed

Lines changed: 13 additions & 12 deletions

File tree

src/main/java/nl/mpi/oai/harvester/action/TransformAction.java

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -246,20 +246,21 @@ public Source resolve (ResourceRequest req) throws net.sf.saxon.trans.XPathExcep
246246
logger.debug("Transformer resolver: loaded ["+cacheDir.resolve(cacheFile).toFile().toString()+"] from cache");
247247
} else {
248248
try {
249-
if (resolver == null)
249+
if (resolver == null)
250250
resolver = new DirectResourceResolver(Saxon.getProcessor().getUnderlyingConfiguration());
251-
//ResourceRequest request = new ResourceRequest();
252-
//request.relativeUri = uri;
253-
//request.baseUri = base;
254-
//request.uri = uri;
255-
//request.nature = ResourceRequest.XML_NATURE;
256-
//request.purpose = ResourceRequest.ANY_PURPOSE;
257-
//res = request.resolve(resolver);
258-
//res = resolver.resolve(request);
259-
res = req.resolve(resolver);
260-
Saxon.save(res, cacheDir.resolve(cacheFile).toFile());
261-
res = new StreamSource(cacheDir.resolve(cacheFile).toFile());
251+
252+
// Resolve the resource and immediately cache it to avoid stream closure issues
253+
Source resolvedSource = req.resolve(resolver);
254+
255+
// Save to cache file immediately to buffer the entire content
256+
// This prevents "stream is closed" errors that occur when the HTTP connection
257+
// closes before the XML parser finishes reading
258+
Saxon.save(resolvedSource, cacheDir.resolve(cacheFile).toFile());
262259
logger.debug("Transformer resolver: stored ["+cacheFile+"] in cache ["+cacheDir.resolve(cacheFile).toFile().toString()+"]");
260+
261+
// Return a new Source pointing to the cached file
262+
// This ensures the parser reads from a file stream, not an HTTP stream that may be closed
263+
res = new StreamSource(cacheDir.resolve(cacheFile).toFile());
263264
} catch (Exception ex) {
264265
throw new net.sf.saxon.trans.XPathException(ex);
265266
}

0 commit comments

Comments
 (0)