1

我想使用 CXF 创建一个休息客户端。以下代码抛出异常

JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
        sf.setResourceClasses(Blogger.class);
        sf.getInInterceptors().add(new LoggingInInterceptor());
        sf.getOutInterceptors().add(new LoggingOutInterceptor());
        sf.setAddress("http://myservice");
        Map<Object, Object> mappings = new HashMap<Object, Object>();
        mappings.put("xml", "application/xml");
        mappings.put("json", "application/json");
        sf.setExtensionMappings(mappings);
        sf.create();

我得到的例外是

Exception in thread "main" java.lang.NoClassDefFoundError: javax/ws/rs/WebApplicationException
    at com.test.LoggingTest.main(LoggingTest.java:26)
Caused by: java.lang.ClassNotFoundException: javax.ws.rs.WebApplicationException
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    ... 1 more
4

2 回答 2

4

类路径中javax.ws.rs缺少 API .jar。更正依赖管理工具的设置或手动将其添加到类路径中。来自Apache CXF 文档

  • 2.7 需要 JSR-339 api (JAX-RS 2.0):javax.ws.rs/javax.ws.rs-api/m10
  • 2.6 及更早版本使用 JSR-311 api (JAX-RS 1.0)
于 2013-10-15T08:38:00.697 回答
3

你有没有包含jsr311-api-1.1.jar在你的类路径中?如果您使用 maven,这可能会对您有所帮助(JAS-RS 1.1)

<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>jsr311-api</artifactId>
    <version>1.1.1</version>
</dependency>

或 JAX-RS 2.0 版本

<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>javax.ws.rs-api</artifactId>
    <version>2.0</version>
</dependency>
于 2013-10-15T08:40:58.420 回答