是否可以从EJB2客户端调用Restful Web服务

时间:2012-12-23 17:03:28

标签: java web-services spring rest ejb

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

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

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

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

提前致谢。

1 个答案:

答案 0 :(得分: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());
    }

}

了解更多信息