【问题标题】:RESTful web service with apache cxf带有 apache cxf 的 RESTful Web 服务
【发布时间】:2015-09-03 21:43:33
【问题描述】:

我已经使用 apache cxf 在 Java 中开发了一个 SOAP Web 服务,现在我必须在 RESTful 中开发相同的服务。

在我的 tomcat 上部署 Web 服务时遇到了一些麻烦。事实上,我不知道应该如何配置我的web.xml 或任何其他 XML 文件。

网上有很多例子,但到目前为止我尝试过的所有方法都不起作用。

为了构建项目,我使用了 Ant 构建工具。

有人知道一些好的技巧吗?

【问题讨论】:

  • 你能粘贴你的服务类吗?你已经尝试过什么? CXF 是一个可靠的框架,并具有可靠的文档。他们的文档中有许多示例来演示这种行为。因此,如果您需要帮助,您必须展示您尝试过什么以及遇到了什么错误。

标签: web-services rest soap cxf


【解决方案1】:

这里是我用来测试教程的服务类

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;

@Path("/book")
public class BookService {

@GET
@Path("{id}")
@Produces({"application/xml","application/json"})
public Book getBookForId(@PathParam("id") int id) {
    Book book = null
    book = DB.getBookForId();
    if(book == null){
        return Response.status(Response.Status.BAD_REQUEST).build();
    }else{
        return Response.ok(book).build();
    }
}

}

而我的 web.xml 大部分时间都是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
    <display-name>REST</display-name>


<servlet>
    <servlet-name>Jersey Web Application</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Jersey Web Application</servlet-name>
    <url-pattern>/services/*</url-pattern>
</servlet-mapping>

Apache CXF 的示例和其他示例“易于”理解,但很快我所做的事情将无法正常工作。

我的 web 服务部署在我的 tomcat 上,但每次都会出现这样的错误:

 Servlet.service() for servlet [Jersey Web Application] in context with path [/WebServices] threw exception [L''exécution de la servlet a lancé une exception] with root cause
java.lang.AbstractMethodError:     javax.ws.rs.core.UriBuilder.uri(Ljava/lang/String;)Ljavax/ws/rs/core/UriBuilder;
at javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:119)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:669)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)

我知道这种错误很愚蠢,但我不明白 Zzz。

我必须使用 jdk 1.6.0.45,所以我不能尝试使用 jdk 1.7 和更高版本的示例。事实是大多数例子告诉使用 Jersey 2.18...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    相关资源
    最近更新 更多