IVY throws IOException when ivy.xml file is larger than 10000 bytes -------------------------------------------------------------------
Key: IVY-1289 URL: https://issues.apache.org/jira/browse/IVY-1289 Project: Ivy Issue Type: Bug Components: Core Affects Versions: 2.2.0 Environment: All environments Reporter: Martin Wursthorn We habe an ivy.xml file which is 10060 bytes large. It starts with an '<ivy-module>' tag, there is no xml header before this tag. When processing this file we get the following error: {noformat} java.io.IOException: Resetting to invalid mark at java.io.BufferedInputStream.reset(BufferedInputStream.java:416) at org.apache.ivy.plugins.parser.xml.XmlModuleDescriptorUpdater.update(XmlModuleDescriptorUpdater.java:1215) at org.apache.ivy.plugins.parser.xml.XmlModuleDescriptorUpdater.update(XmlModuleDescriptorUpdater.java:147) at org.apache.ivy.plugins.parser.xml.XmlModuleDescriptorParser.toIvyFile(XmlModuleDescriptorParser.java:153) at org.apache.ivy.core.module.descriptor.DefaultModuleDescriptor.toIvyFile(DefaultModuleDescriptor.java:547) at org.apache.ivy.core.resolve.ResolveEngine.resolve(ResolveEngine.java:248) at org.apache.ivy.core.resolve.ResolveEngine.resolve(ResolveEngine.java:195) at org.apache.ivy.Ivy.resolve(Ivy.java:502) at org.apache.ivy.ant.IvyResolve.doExecute(IvyResolve.java:244) at org.apache.ivy.ant.IvyTask.execute(IvyTask.java:277) at org.apache.ivy.ant.IvyPostResolveTask.ensureResolved(IvyPostResolveTask.java:217) at org.apache.ivy.ant.IvyPostResolveTask.prepareAndCheck(IvyPostResolveTask.java:164) at org.apache.ivy.ant.IvyRetrieve.doExecute(IvyRetrieve.java:57) at org.apache.ivy.ant.IvyTask.execute(IvyTask.java:277) at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291) at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) at org.apache.tools.ant.Task.perform(Task.java:348) at org.apache.tools.ant.Target.execute(Target.java:390) at org.apache.tools.ant.Target.performTasks(Target.java:411) at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1360) at org.apache.tools.ant.Project.executeTarget(Project.java:1329) at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) at org.apache.tools.ant.Project.executeTargets(Project.java:1212) at org.apache.tools.ant.Main.runBuild(Main.java:801) at org.apache.tools.ant.Main.startAnt(Main.java:218) at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280) at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109) {noformat} Theproblem seem to be the following block of code in XmlModuleDescriptorUpdater: {code} in.mark(MAX_HEADER_LENGTH); // assume the header is never larger than 10000 bytes. copyHeader(in, out); in.reset(); // reposition the stream at the beginning {code} The first line sets markpos to 0, and readLimit to 10000. But after the call to copyHeader the position pointer is set to the end of the file not just the end of the header. Since this position is beyond 10000 markpos is set to -1 and the above exception is thrown. Note that in our case the header is empty. -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira