// XXX: If we return null, a NPE is raised in SchemaBuilder.
// If we return new InputSource(), a XmlSchemaException is raised
// but without any nice error message. So let's just throw a nice error here.
if (in == null) {
throw new XmlSchemaException("Unable to locate imported document "
+ "at '" + schemaLocation + "'"
+ (baseUri == null
? "."
: ", relative to '" + baseUri + "'."));
} else if (in.getByteStream() != null
&& !(in.getByteStream() instanceof ByteArrayInputStream)) {
//workaround bug in XmlSchema - XmlSchema is not closing the InputStreams
//that are returned for imports. Thus, with a lot of services starting up
//or a lot of schemas imported or similar, it's easy to run out of
//file handles. We'll just load the file into a byte[] and return that.
try {
InputStream ins = IOUtils.loadIntoBAIS(in.getByteStream());
in.setByteStream(ins);
} catch (IOException e) {
throw new XmlSchemaException("Unable to load imported document "
+ "at '" + schemaLocation + "'"
+ (baseUri == null
? "."
: ", relative to '" + baseUri + "'."),
e);