我一直在寻找如何从EJB2客户端调用Spring 3中编写的Restful服务的示例。如果我正确理解REST,那么服务编写的技术/语言应该无关紧要,因此我应该能够从EJB2客户端调用该服务。
我找不到一个简单的示例或引用来指导我如何实现可以调用restful服务的EJB2客户端。这是否意味着无法从EJB2客户端调用Restful服务?如果有可能,请您指出一个文档或示例,显示或描述两者如何相互接口/交谈。
我遇到的大多数参考/文档都与如何将EJB公开为Web服务有关,而我对如何从EJB2调用Web服务感兴趣。
我对如何将XML文档发送到服务特别感兴趣。例如,是否可以使用Jersey客户端和JAXB与EJB2以及如何使用EJB2通过HTTP传递未编组的XML?
提前致谢。
答案 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());
}
}
了解更多信息