閱讀JDK源碼javax.xml.parsers.FactoryFinder,javax.xml.parsers.SAXParserFactory以及DocumentBuilderFactory能夠發現JDK按照以下順序來尋找XML解析器:java
1. 系統屬性javax.xml.parsers.DocumentBuilderFactory或javax.xml.parsers.SAXParserFactoryapache
2. 在jdk-dir/lib/jaxp.properties中設定的javax.xml.parsers.DocumentBuilderFactory或 javax.xml.parsers.SAXParserFactory屬性ui
3. 運行時jar包中META-INF/services/javax.xml.parsers.DocumentBuilderFactory或 javax.xml.parsers.SAXParserFactory文件中設定的值xml
4. 若是上面的解析器都沒有找到,則使用Crimson。若是尚未那隻能ClassNotFound了。源碼
這樣,咱們能夠經過調用 System.setProperty("javax.xml.parsers.DocumentBuilderFactory"," org.apache.crimson.jaxp.DocumentBuilderFactoryImpl")來設定相應的XML解析器,或者生成 jaxp.properties文件,在其中加入以下內容class
javax.xml.parsers.DocumentBuilderFactory = org.apache.crimson.jaxp.DocumentBuilderFactoryImpl
或者在打jar包的時候加上文件名爲javax.xml.parsers.DocumentBuilderFactory的文件,而後再其中寫org.apache.crimson.jaxp.DocumentBuilderFactoryImpljdk