title: Relative paths in XML catalogs are treated differently on windows and linux using XJC
body: <p>We use XJC version "JAXB 2.1.10 in JDK 6" (by using jaxb2-maven-plugin) to generate JAXB classes based on OGC's WFS 2.0. 
  We use a catalog file for resolving schemas the WFS schema depends on. The entries in the catalog file reference schemas on the file system by using relative paths, e.g.</p>
  
  <pre><code>&lt;catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog" prefer="system"&gt;
  
      &lt;rewriteSystem
          systemIdStartString="http://www.w3.org/2001/"
          rewritePrefix="../../2001/"/&gt;
  
      &lt;rewriteSystem
          systemIdStartString="http://www.w3.org/1999/"
          rewritePrefix="../../w3c/"/&gt;
  
      &lt;rewriteSystem
          systemIdStartString="http://schemas.opengis.net/ows/1.1/"
          rewritePrefix="../../ows/1.1.0/"/&gt;
  
      &lt;rewriteSystem
          systemIdStartString="http://schemas.opengis.net/ows/1.1.0/"
          rewritePrefix="../../ows/1.1.0/"/&gt;
  
      &lt;rewriteSystem
          systemIdStartString="http://schemas.opengis.net/filter/2.0/"
          rewritePrefix="../../filter/2.0/"/&gt;
  
  &lt;/catalog&gt;
  </code></pre>
  
  <p>This is working fine on linux, but on windows, we get a <em>java.io.FileNotFoundException</em> for each file defined in the catalog. It makes no difference whether XJC is called by the maven plugin or directly, the behaviour is the same. 
  In fact, we didn't manage to make XJC work on windows using relative paths in the catalog at all.</p>
  
  <p>Excerpt of the log running mvn -X clean install:</p>
  
  <pre><code>+ Error stacktraces are turned on.
  Apache Maven 2.2.1 (r801777; 2009-08-06 21:16:01+0200)
  Java version: 1.6.0_20
  Java home: C:\Program Files\Java\jdk1.6.0_20\jre
  Default locale: de_DE, platform encoding: Cp1252
  OS name: "windows 7" version: "6.1" arch: "amd64" Family: "windows"
  [DEBUG] Configuring mojo 'org.codehaus.mojo:jaxb2-maven-plugin:1.5:xjc' --&gt;
  [DEBUG]   (f) bindingDirectory = C:\dev\depot\myproject\src\main\xsd\wfs\2.0
  [DEBUG]   (f) catalog = C:\dev\depot\myproject\src\main\xsd\wfs\2.0\wfs.cat
  [DEBUG]   (f) clearOutputDir = false
  [DEBUG]   (f) dtd = false
  [DEBUG]   (f) enableIntrospection = false
  [DEBUG]   (f) encoding = UTF-8
  [DEBUG]   (f) explicitAnnotation = false
  [DEBUG]   (f) extension = false
  [DEBUG]   (f) failOnNoSchemas = true
  [DEBUG]   (f) npa = false
  [DEBUG]   (f) nv = false
  [DEBUG]   (f) outputDirectory = C:\dev\depot\myproject\target\generated-sources\jaxb
  [DEBUG]   (f) project = MavenProject: com.myproject:MyProject:1.0.0-SNAPSHOT @ C:\dev\depot\myproject\pom.xml
  [DEBUG]   (f) quiet = false
  [DEBUG]   (f) readOnly = false
  [DEBUG]   (f) relaxng = false
  [DEBUG]   (f) relaxngCompact = false
  [DEBUG]   (f) schemaDirectory = C:\dev\depot\myproject\src\main\xsd\wfs\2.0
  [DEBUG]   (f) staleFile = C:\dev\depot\myproject\target\stale\wfs\2.0
  [DEBUG]   (f) verbose = false
  [DEBUG]   (f) wsdl = false
  [DEBUG]   (f) xmlschema = true
  [DEBUG] -- end configuration --
  [INFO] [jaxb2:xjc {execution: wfs}]
  [DEBUG] Using XJC of JAXB Reference Implementation  version 2.1.13
  [DEBUG] The schema Directory is C:\dev\depot\myproject\src\main\xsd\wfs\2.0
  [DEBUG] accept false for file C:\dev\depot\myproject\src\main\xsd\wfs\2.0\CVS
  [DEBUG] accept false for file C:\dev\depot\myproject\src\main\xsd\wfs\2.0\wfs.cat
  [DEBUG] accept false for file C:\dev\depot\myproject\src\main\xsd\wfs\2.0\wfs.xjb
  [DEBUG] accept true for file C:\dev\depot\myproject\src\main\xsd\wfs\2.0\wfs.xsd
  [DEBUG] The binding Directory is C:\dev\depot\myproject\src\main\xsd\wfs\2.0
  [INFO] Generating source...
  [DEBUG] C:\dev\depot\myproject\target\classes
  [DEBUG] D:\mvnrep\commons-codec\commons-codec\1.3\commons-codec-1.3.jar
  [DEBUG] D:\mvnrep\commons-lang\commons-lang\2.6\commons-lang-2.6.jar
  [DEBUG] D:\mvnrep\org\apache\httpcomponents\httpclient\4.1.2\httpclient-4.1.2.jar
  [DEBUG] D:\mvnrep\org\apache\httpcomponents\httpcore\4.1.2\httpcore-4.1.2.jar
  [DEBUG] D:\mvnrep\commons-logging\commons-logging\1.1.1\commons-logging-1.1.1.jar
  [DEBUG] The binding Directory is C:\dev\depot\myproject\src\main\xsd\wfs\2.0
  [DEBUG] accept false for file C:\dev\depot\myproject\src\main\xsd\wfs\2.0\CVS
  [DEBUG] accept false for file C:\dev\depot\myproject\src\main\xsd\wfs\2.0\wfs.cat
  [DEBUG] accept false for file C:\dev\depot\myproject\src\main\xsd\wfs\2.0\wfs.xjb
  [DEBUG] accept true for file C:\dev\depot\myproject\src\main\xsd\wfs\2.0\wfs.xsd
  [DEBUG] JAXB XJC args: [-xmlschema, -catalog, C:\dev\depot\myproject\src\main\xsd\wfs\2.0\wfs.cat, -d, C:\dev\depot\myproject\target\generated-sources\jaxb, -classpath, C:\dev\depot\myproject\target\classes;D:\mvnrep\commons-codec\commons-codec\1.3\commons-codec-1.3.jar;D:\mvnrep\commons-lang\commons-lang\2.6\commons-lang-2.6.jar;D:\mvnrep\org\apache\httpcomponents\httpclient\4.1.2\httpclient-4.1.2.jar;D:\mvnrep\org\apache\httpcomponents\httpcore\4.1.2\httpcore-4.1.2.jar;D:\mvnrep\commons-logging\commons-logging\1.1.1\commons-logging-1.1.1.jar;, -b, C:\dev\depot\myproject\src\main\xsd\wfs\2.0\wfs.xjb, C:\dev\depot\myproject\src\main\xsd\wfs\2.0]
  [INFO] parsing a schema...
  [ERROR] null[-1,-1]
  java.io.FileNotFoundException: C:\dev\depot\myproject\owsGetResourceByID.xsd (Das System kann die angegebene Datei nicht finden)
      at com.sun.tools.xjc.ErrorReceiver.error(ErrorReceiver.java:90)
      at com.sun.tools.xjc.reader.internalizer.DOMForest.parse(DOMForest.java:401)
      at com.sun.tools.xjc.reader.internalizer.DOMForest.parse(DOMForest.java:300)
      at com.sun.tools.xjc.reader.internalizer.AbstractReferenceFinderImpl.startElement(AbstractReferenceFinderImpl.java:95)
      at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501)
      at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:179)
      at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:377)
      at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2755)
      at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
      at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
      at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
      at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
      at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
      at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
      at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
      at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
      at com.sun.tools.xjc.reader.internalizer.DOMForest.parse(DOMForest.java:393)
      at com.sun.tools.xjc.reader.internalizer.DOMForest.parse(DOMForest.java:300)
      at com.sun.tools.xjc.reader.internalizer.AbstractReferenceFinderImpl.startElement(AbstractReferenceFinderImpl.java:95)
      at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501)
      at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:179)
      at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:377)
      at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2755)
      at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
      at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
      at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
      at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
      at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
      at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
      at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
      at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
      at com.sun.tools.xjc.reader.internalizer.DOMForest.parse(DOMForest.java:393)
      at com.sun.tools.xjc.reader.internalizer.DOMForest.parse(DOMForest.java:273)
      at com.sun.tools.xjc.ModelLoader.buildDOMForest(ModelLoader.java:321)
      at com.sun.tools.xjc.ModelLoader.loadXMLSchema(ModelLoader.java:374)
      at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:167)
      at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:113)
      at com.sun.tools.xjc.Driver.run(Driver.java:313)
      at org.codehaus.mojo.jaxb2.AbstractXjcMojo.execute(AbstractXjcMojo.java:327)
      at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)
      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:556)
      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:535)
      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387)
      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:348)
      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)
      at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
      at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
      at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
      at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:597)
      at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
      at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
      at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
      at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
  ...
  [INFO] Failed to parse a schema.
  [INFO] ------------------------------------------------------------------------
  [ERROR] BUILD ERROR
  [INFO] ------------------------------------------------------------------------
  [INFO] Could not process schema files in directory C:\dev\depot\myproject\src\main\xsd\wfs\2.0
  [INFO] ------------------------------------------------------------------------
  [DEBUG] Trace
  org.apache.maven.lifecycle.LifecycleExecutionException: Could not process schema files in directory C:\dev\depot\myproject\src\main\xsd\wfs\2.0
      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:719)
      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:556)
      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:535)
      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387)
      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:348)
      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)
      at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
      at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
      at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
      at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:597)
      at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
      at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
      at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
      at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
  Caused by: org.apache.maven.plugin.MojoExecutionException: Could not process schema files in directory C:\dev\depot\myproject\src\main\xsd\wfs\2.0
      at org.codehaus.mojo.jaxb2.AbstractXjcMojo.execute(AbstractXjcMojo.java:343)
      at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)
      ... 17 more
  [INFO] ------------------------------------------------------------------------
  [INFO] Total time: 1 second
  [INFO] Finished at: Tue Nov 11 06:56:54 CET 2014
  [INFO] Final Memory: 25M/181M
  [INFO] ------------------------------------------------------------------------
  </code></pre>
  
  <p>Did somebody face similar problems and was able to find a solution?</p>
  
  <p><strong>Note:</strong><br>
   - Using absolute paths is not a solution as we want it to work on both linux and windows<br>
   - Using a newer version of XJC/JAXB is not an option at the moment<br>
   - Using the "OGC Schemas and Tools Project" is not an option as we want full control of the generation process and the classes for the WFS schema are just a side product of the generation of classes for custom schemas. Generating classes for WFS is just an example.</p>