@@ -246,19 +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 ());
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 ());
261259 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 ());
262264 } catch (Exception ex ) {
263265 throw new net .sf .saxon .trans .XPathException (ex );
264266 }
0 commit comments