org.springframework.ws и проблема Xalan в Jboss EAP 6.x - PullRequest
0 голосов
/ 22 февраля 2019

Здравствуйте, у меня проблема с Jboss EAP 6.x после обновления org.springframework.ws - spring-xml

В моем проекте я использую Xalan в версии 2.7.2, теперь я хочу обновитьorg.springframework.ws - spring-xml с версии 2.4.0 до 2.4.4 и загрузка войн моего приложения на Jboss EAP 6.x

Во время развертывания я получил ошибку:

Вызывается: java.lang.IllegalArgumentException: не поддерживается: http://javax.xml.XMLConstants/property/accessExternalDTD в org.apache.xalan.processor.TransformerFactoryImpl.setAttribute (TransformerFactoryImpl.java:571) в __redirected .__ TransformerFactory16Factory (9) .Aset.) [jboss-modules.jar: 1.3.5.Final-redhat-1] в org.springframework.xml.transform.TransformerFactoryUtils.defaultSettings (TransformerFactoryUtils.java:56) [spring-xml-2.4.4.RELEASE.jar:] в org.springframework.xml.transform.TransformerFactoryUtils.newInstance (TransformerFactoryUtils.java:32) [spring-xml-2.4.4.RELEASE.jar:] в org.springframework.ws.server.endpoint.mapping.nayloadRot.hodEndpointMapping. (PayloadRootAnnotationMethodEndpointMapping.java:58) [spring-ws-core-2.4.4.RELEASE.jar:] ... еще 31

После быстрого исследования я обнаружил, что в spring-xmlверсия 2.4.4 - это новый TransformerFactoryUtils, который использует TransformerFactory из того же пакета, что и Xalan, и это приводит к проблеме с загрузчиком классов.

Я пытаюсь следовать решениям из TransformerFactory и Xalan Dependency Conflict и xalan и xerces в jboss eap 6.0.1 но оба не будут работать для меня.

Я также нашел какое-то решение на сайте redhat: https://access.redhat.com/solutions/1410603 но без подписки я неу него нет доступа к нему ...

И у одного человека такая же проблема?Может быть, есть какое-то решение, которое может работать в этом случае?Большое спасибо заранее.

1 Ответ

0 голосов
/ 22 марта 2019

У меня такая же проблема даже для JBoss EAP 7.2

Поскольку JBoss работает на JDK 6, 7 и 8, именно поэтому включенный Xalan делаетне поддерживается ACCESS_EXTERNAL_DTD, как это было добавлено в JDK 7 .

Вы можете заставить JBoss использовать TransformerFactory из Oracle JDK 8. Установите переменную transformerFactoryClassдо com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.Смотрите снимок ниже.

final Jaxb2Marshaller marshaller = new Jaxb2Marshaller();

final WebServiceTemplate webServiceTemplate = new WebServiceTemplate();
webServiceTemplate.setDefaultUri(uri);
webServiceTemplate.setMarshaller(marshaller);
webServiceTemplate.setUnmarshaller(marshaller);

try {
    logger.debug("Getting class for name: {}", transformerFactoryClass);
    final Class<?> clazz = Class.forName(transformerFactoryClass);
    Assert.isAssignable(TransformerFactory.class, clazz, "Must be instance of Class<? extends TransformerFactory>");
    webServiceTemplate.setTransformerFactoryClass((Class<? extends TransformerFactory>) clazz);
} catch (ClassNotFoundException e) {
    logger.error("Unable to get class for name: {}", transformerFactoryClass);
    throw new IllegalArgumentException(e);
}
...