在Java EE应用中常遇到针对xml文件的处理而针对这种处理有JDK自带的类开源组件自带的实现类。 由于从JDK1.8移植到JDK11以上 JDK默认不带一些类从weblogic、websphere、tomcat移植到TongWeb上默认的xml解析类不同导致一些解析问题。如下把一些常用的xml解析类列出来供大家参考当出现xml解析问题时要根据实际应用调整。xml解析参数#JDK1.8默认实现类-Djavax.xml.parsers.DocumentBuilderFactorycom.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl#开源xerces.jar实现类-Djavax.xml.parsers.DocumentBuilderFactoryorg.apache.xerces.jaxp.DocumentBuilderFactoryImpl#JDK1.8默认实现类-Djavax.xml.stream.XMLInputFactorycom.sun.xml.internal.stream.XMLInputFactoryImpl#开源实现类-Djavax.xml.stream.XMLInputFactorycom.ctc.wstx.stax.WstxInputFactory-Djavax.xml.stream.XMLInputFactorycom.bea.xml.stream.MXParserFactory#JDK1.8默认实现类-Djavax.xml.stream.XMLOutputFactorycom.sun.xml.internal.stream.XMLOutputFactoryImpl#开源实现类-Djavax.xml.stream.XMLOutputFactorycom.ctc.wstx.stax.WstxOutputFactory#JDK1.8默认实现类-Djavax.xml.bind.JAXBContextcom.sun.xml.internal.bind.v2.ContextFactory#开源实现类-Djavax.xml.bind.JAXBContextcom.sun.xml.bind.v2.ContextFactory#weblogic默认实现类。 xml的双引号会转义成-Djavax.xml.bind.JAXBContextorg.eclipse.persistence.jaxb.JAXBContextFactory#jakarta命名空间的-Djakarta.xml.bind.JAXBContextorg.glassfish.jaxb.runtime.v2.JAXBContextFactory#JDK1.8默认实现类-Djavax.xml.parsers.SAXParserFactorycom.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl#开源实现类-Djavax.xml.parsers.SAXParserFactorycom.ctc.wstx.sax.WstxSAXParserFactory#JDK1.8默认实现类-Djavax.xml.datatype.DatatypeFactorycom.sun.org.apache.xerces.internal.jaxp.datatype.DatatypeFactoryImpl#开源实现类-Djavax.xml.datatype.DatatypeFactoryorg.apache.xerces.jaxp.datatype.DatatypeFactoryImpl#开源实现类-Djavax.xml.soap.SAAJMetaFactorycom.sun.xml.messaging.saaj.soap.SAAJMetaFactoryImpl#JDK1.8默认值-Djavax.xml.soap.SAAJMetaFactorycom.sun.xml.internal.messaging.saaj.soap.SAAJMetaFactoryImpl通常xml解析实现类的优先级由高到低依次为1. 以-D参数指定的类为最优先。2. 其次若无-D参数则以jar文件META-INF/services目录下设置的为准如图。3. 若无以上配置则以代码中指定为准。案例应用在TongWeb下报错如下Caused by: jakarta.xml.bind.JAXBException: Exception Description: Invalid XmlElementRef on property rPrOrAliasOrLock on class org.docx4j.wml.SdtPr. Referenced Element not declared. at com.tongweb.persistence.jaxb.JAXBContext$TypeMappingInfoInput.createContextState(JAXBContext.java:1151) at com.tongweb.persistence.jaxb.JAXBContext.init(JAXBContext.java:186) at com.tongweb.persistence.jaxb.JAXBContextFactory.createContext(JAXBContextFactory.java:153) at com.tongweb.persistence.jaxb.JAXBContextFactory.createContext(JAXBContextFactory.java:140) at com.tongweb.persistence.jaxb.JAXBContextFactory.createContext(JAXBContextFactory.java:100) at com.tongweb.persistence.jaxb.JAXBContextFactory.createContext(JAXBContextFactory.java:90) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at jakarta.xml.bind.ContextFinder.newInstance(ContextFinder.java:262) at jakarta.xml.bind.ContextFinder.newInstance(ContextFinder.java:249) at jakarta.xml.bind.ContextFinder.find(ContextFinder.java:456) at jakarta.xml.bind.JAXBContext.newInstance(JAXBContext.java:656) at jakarta.xml.bind.JAXBContext.newInstance(JAXBContext.java:599) at com.glodon.ureport.customize.WordDefaultStyle.setTheme4NoItalic(WordDefaultStyle.java:59)从异常上看是应用 jakarta.xml.bind.JAXBContext 的实现类找到了TongWeb自带的 com.tongweb.persistence.jaxb.JAXBContextFactory 导致解析xml文件出错这时可以增加参数 -Djakarta.xml.bind.JAXBContextcom.sun.xml.bind.v2.ContextFactory 或 com.sun.xml.internal.bind.v2.ContextFactory来解决问题。