Проблема с подтипом провайдера Stax - Tomcat - PullRequest
0 голосов
/ 23 мая 2018

У меня развернут портлет на Liferay, у которого есть вызов веб-службы и который использует библиотеки для внутренних осей.Когда вызывается веб-служба, я получаю следующую ошибку

Причина: java.util.ServiceConfigurationError: javax.xml.stream.XMLInputFactory: поставщик com.ctc.wstx.stax.WstxInputFactory не подтип

Я проверял различные другие сообщения

Я проанализировал строку ошибки, разбив ее на две части

  1. Причина: java.util.ServiceConfigurationError: javax.xml.stream.XMLInputFactory
  2. Поставщик com.ctc.wstx.stax.WstxInputFactory не подтип

И пришел к выводу, что ошибка вызвана несоответствием реализации Stax.

Итак, я проверил каталог lib и нашел следующие jar enter image description here

Я вижу, что WstxInputFactory присутствует в woodstox-core-asl-4.1.4

ToПосмотрите, откуда эта банка добавляется I чвзломал build.gradle

buildscript {
    repositories {
        maven {
            url "https://cdn.lfrs.sl/repository.liferay.com/nexus/content/groups/public"
        }
    }

    dependencies {
        classpath group: "com.liferay", name: "com.liferay.gradle.plugins.css.builder", version: "2.0.0"
    }
}

apply plugin: "com.liferay.css.builder"

dependencies {

    def withoutServletAPI = { 
        exclude group: 'javax.servlet', module: 'servlet-api'  
    }

    compile group: "org.springframework", name: "spring-webmvc-portlet", version: "4.1.5.RELEASE"

    compileOnly group: "com.liferay.portal", name: "com.liferay.portal.kernel", version: "2.6.0"
    compileOnly group: "javax.portlet", name: "portlet-api", version: "2.0"
    compileOnly group: "javax.servlet", name: "javax.servlet-api", version: "3.0.1"
    compileOnly group: "org.osgi", name: "org.osgi.service.component.annotations", version: "1.3.0"

    compile group: "org.apache.axis", name:"axis", version: "1.4"
    compile group: "org.apache.axis2", name:"axis2-adb", version: "1.6.3", withoutServletAPI
    compile group: "org.apache.axis2", name:"axis2-transport-local", version: "1.6.3", withoutServletAPI
    compile group: "org.apache.axis2", name:"axis2-transport-http", version: "1.6.3", withoutServletAPI
    compile group: "com.google.code.gson", name:"gson", version: "2.3.1"    
    compile group: "jstl", name:"jstl", version: "1.2"
    compile group: "taglibs", name:"standard", version: "1.1.2"

    //compile group: "memberservice", name:"memberservice", version: "1.0.0"


    compileOnly group: "com.liferay.portal", name: "com.liferay.util.java", version: "2.4.0"

    //compile group: "com.sun.xml.ws", name: "jaxws-rt", version: "2.2.10"

    testCompile group: 'junit', name: 'junit', version: '4.8.1'
    testCompile group: 'org.mockito', name: 'mockito-all', version: '1.9.5'

    compile files('../../modules/memberservice/build/libs/memberservice-1.0.0.jar')

}

war {
    dependsOn buildCSS
    exclude "**/*.scss"

    filesMatching("**/.sass-cache/") {
        it.path = it.path.replace(".sass-cache/", "")
    }

    includeEmptyDirs = false
}

Я проверил дерево зависимостей в gradle и обнаружил, что woodstox-core-asl-4.1.4 является транзитивной зависимостью для axis2-adb-1.6.3, которая находится в сборке.gradle.

Очевидно, что в jar есть конфликт, который вызывает вышеуказанную ошибку, но я не могу найти, какой jar вызывает его.Я подозреваю, что JDK 8 уже имеет XMLInputFactory, и в моей войне я вижу, что есть geronimo-stax-api, который снова является транзитивной зависимостью и может вызывать конфликт.

Я ищу то, что на самом деле вызывает проблему.

Примечание. Этот код создан не мной.Мой клиент дал этот код, который работал на более старой версии Liferay (6.2) на JBoss и был создан другим поставщиком, и мы переходим на более новую версию Liferay (DXP) на Tomcat.

PS: Я также проверил каталог lib в Tomcat, и там нет реализации stax

1 Ответ

0 голосов
/ 04 сентября 2018
I have a similar issue. When upgraded portlet is deployed, spring application boots up successfully. When attempted to view a portlet page, this error occurs. 

2018-08-29 14:31:50.955 ERROR [http-nio-8080-exec-8][render_portlet_jsp:131] null
java.util.ServiceConfigurationError: javax.xml.parsers.SAXParserFactory: Provider org.apache.xerces.jaxp.SAXParserFactoryImpl not a subtype
    at java.util.ServiceLoader.fail(ServiceLoader.java:239)
    at java.util.ServiceLoader.access$300(ServiceLoader.java:185)
    at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:376)
    at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
    at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
    at javax.xml.parsers.FactoryFinder$1.run(FactoryFinder.java:294)
    at javax.xml.parsers.FactoryFinder.findServiceProvider(FactoryFinder.java:289)
    at javax.xml.parsers.FactoryFinder.find(FactoryFinder.java:267)
    at javax.xml.parsers.SAXParserFactory.newInstance(SAXParserFactory.java:127)
    at org.apache.taglibs.standard.tlv.JstlBaseTLV.validate(JstlBaseTLV.java:194)
    at org.apache.taglibs.standard.tlv.JstlCoreTLV.validate(JstlCoreTLV.java:138)
    at org.apache.jasper.compiler.TagLibraryInfoImpl.validate(TagLibraryInfoImpl.java:957)
    at org.apache.jasper.compiler.Validator.validateXmlView(Validator.java:1929)
    at org.apache.jasper.compiler.Validator.validate(Validator.java:1896)
    at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:223)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:625)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:473)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:377)
...