3

Spring 3 で記述された Restful サービスを EJB2 クライアントから呼び出す方法の例を探しています。REST を正しく理解していれば、サービスがどのテクノロジ/言語で記述されているかは問題ではないため、EJB2 クライアントからサービスを呼び出すことができるはずです。

RESTful サービスを呼び出すことができる EJB2 クライアントを実装する方法を説明する簡単な例や参照が見つかりませんでした。これは、EJB2 クライアントから Restful サービスを呼び出すことができないということですか? 可能であれば、この 2 つがどのように相互接続/対話できるかを示しているか説明しているドキュメントまたは例を教えてください。

私が遭遇する参照/ドキュメントのほとんどは、EJB を Web サービスとして公開する方法に関連していますが、EJB2 から Web サービスを呼び出す方法に興味があります。

XML ドキュメントをサービスに送信する方法に特に関心があります。たとえば、Jersey クライアントと JAXB を EJB2 で使用することは可能ですか? また、EJB2 を使用して非整列化された XML を HTTP 経由で渡すにはどうすればよいですか?

前もって感謝します。

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();

ジャージー 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 に答える