3

我一直在寻找如何从 EJB2 客户端调用用 Spring 3 编写的 Restful 服务的示例。如果我正确理解 REST,那么服务是用什么技术/语言编写的都无关紧要,所以我应该能够从 EJB2 客户端调用服务。

我找不到一个简单的示例或参考来指导我如何实现可以调用 RESTful 服务的 EJB2 客户端。这是否意味着无法从 EJB2 客户端调用 Restful 服务?如果可能的话,请您指点我一个文档或示例,以显示或描述两者如何相互接口/对话。

我遇到的大多数参考/文档都与如何将 EJB 公开为 Web 服务有关,而我对如何从 EJB2 调用 Web 服务感兴趣。

我对如何将 XML 文档发送到服务特别感兴趣。例如,是否可以将 Jersey 客户端和 JAXB 与 EJB2 一起使用,我将如何使用 EJB2 通过 HTTP 传递未编组的 XML?

提前致谢。

4

1 回答 1

4

下面是在 Java 中访问 RESTful 服务的几个编程选项。

使用 JDK/JRE API

下面是使用 JDK/JRE 中的 API 调用 RESTful 服务的示例

String uri =
    "http://localhost:8080/CustomerService/rest/customers/1";
URL url = new URL(uri);
HttpURLConnection connection =
    (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Accept", "application/xml");

JAXBContext jc = JAXBContext.newInstance(Customer.class);
InputStream xml = connection.getInputStream();
Customer customer =
    (Customer) jc.createUnmarshaller().unmarshal(xml);

connection.disconnect();

使用 Jersey API

大多数 JAX-RS 实现都包含使访问 RESTful 服务更容易的 API。客户端 API 包含在 JAX-RS 2 规范中。

import java.util.List;
import javax.ws.rs.core.MediaType;
import org.example.Customer;
import com.sun.jersey.api.client.*;

public class JerseyClient {

    public static void main(String[] args) {
        Client client = Client.create();
        WebResource resource = client.resource("http://localhost:8080/CustomerService/rest/customers");

        // Get response as String
        String string = resource.path("1")
            .accept(MediaType.APPLICATION_XML)
                .get(String.class);
        System.out.println(string);

        // Get response as Customer
        Customer customer = resource.path("1")
            .accept(MediaType.APPLICATION_XML)
                .get(Customer.class);
        System.out.println(customer.getLastName() + ", "+ customer.getFirstName());

        // Get response as List<Customer>
        List<Customer> customers = resource.path("findCustomersByCity/Any%20Town")
            .accept(MediaType.APPLICATION_XML)
                .get(new GenericType<List<Customer>>(){});
        System.out.println(customers.size());
    }

}

了解更多信息

于 2012-12-23T19:31:56.603 回答