尝试获取jax-rs服务的WADL时出错500

时间:2016-01-15 13:52:00

标签: java rest cxf apache-karaf wadl

在我们的项目中,我们在Karaf容器中部署了两个JAX-RS服务。当我试图通过服务链接(http://localhost:8181/cxf/myservice1?_wadl)获取WADL时,我收到了这个错误:

  

引起:

     

javax.xml.transform.TransformerFactoryConfigurationError:Provider   找不到org.apache.xalan.processor.TransformerFactoryImpl   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 个答案:

答案 0 :(得分:3)

为了使wadl链接正常工作,您需要添加cxf服务描述库。

maven的依赖关系是:

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

答案 1 :(得分: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>