2016-01-15 1 views
0

В нашем проекте мы развернули две службы JAX-RS в контейнер Karaf. Когда я пытаюсь получить WADL по ссылке службы (http://localhost:8181/cxf/myservice1?_wadl), я получил эту ошибку:Ошибка 500 при попытке получить WADL службы jax-rs

Caused by:

javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found at javax.xml.transform.TransformerFactory.newInstance(TransformerFactory.java:121)

думал второй сервис не имеет такой вопрос и получить правильный WADL (http://localhost:8181/cxf/myservice2?_wadl):

<application xmlns="http://wadl.dev.java.net/2009/ xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
<grammars/> 
    <resources base="http://localhost:8181/cxf/dictionary"> 
     <resource path="/"> 
      <resource path="{name}"> 
       <param name="name" style="template" type="xs:string"/> 
       <method name="GET">..... 

Мы используем CXF 3.1.3. Обе службы настроены с помощью Blueprint, но в этом месте все конфигурации одинаковы, поэтому я не ожидаю этой проблемы.

Как я понимаю, в случае CXF WADL генерирует по умолчанию только для добавления сервисной ссылки JAX-RS с «? _wadl», это означает, что я не могу ее вручную скомпоновать, не так ли?

Я ценю любые предложения, на которых мне нужно посмотреть. Спасибо

ответ

2

Я понял это и хочу поделиться с сообществом, если кто-то столкнется с такой проблемой.

Оказалось, что требуется генерация WADL Xalan XSLT-процессор для преобразования xml. Поскольку CXF не содержит эту библиотеку в наборе функций, ее необходимо установить как отдельный пакет. Также Xalan зависит от Apache Commons BCEL, что означает, что пакет BCEL также необходимо добавить в Karaf (или любой другой контейнер OSGI, если они существуют вообще). В моем случае это функция отрывок выглядит следующим образом:

<bundle dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.xalan/2.7.1_7</bundle> 
<bundle dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.bcel/5.2_4</bundle> 
2

Для того, чтобы ссылка wadl работала, вам нужно добавить библиотеку описания функций cxf.

Зависимость Maven будет:

<dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-rs-service-description</artifactId> 
     <version>3.1.3</version> 
</dependency> 
+0

Спасибо за ваш совет, но в Karaf контейнере я установил CXF в целом функции, это означает, что все библиотеки, включая это тот, который вы упомянули, уже и работает. – dofamin

+0

ваше предложение подтолкнуло меня к тому, чтобы копаться другим способом, который я раньше видел. Еще раз спасибо – dofamin

+0

Спасибо Gunnar, добавив эту зависимость, я могу получить доступ к _wadl URL. – ravi