在我们的项目中,我们在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”,这意味着我无法手动配置它,不是吗?
我很感激我需要查看的任何建议。感谢
答案 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>