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

Error 500 when trying to get WADL of jax-rs service

在我们的项目中,我们将两个 JAX-RS 服务部署到 Karaf 容器中。当我尝试通过服务 link (http://localhost:8181/cxf/myservice1?_wadl) 获取 WADL 时,出现此错误:

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。 两种服务都是通过蓝图配置的,但在这个地方所有的配置都是一样的,这就是为什么我不希望这里出现问题。

据我了解,在 CXF 的情况下,默认情况下生成 WADL 只是为了将 JAX-RS 服务 link 附加到“?_wadl”,这意味着我无法手动配置它,是吗?是吗?

对于我需要查看的任何建议,我深表感谢。谢谢

为了使 wadl link 工作,您需要添加 cxf service-description 库。

maven 依赖项为:

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

我弄明白了,如果其他人会遇到这样的问题,我想与社区分享。

原来 WADL 生成需要 Xalan XSLT processor for xml transformation. As CXF doesn't contain that library in feature set it needs to be installed as separate bundle. Also Xalan depends on Apache Commons BCEL,这意味着还需要将 bundle 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>