私はクライアントサーバープロジェクトに取り組んでいるシニアJava開発者(stackoverflowの新人でもあります)です:
- サーバー:javaee6 Webプロジェクト(Rest、EJB3.1、JPA)
- クライアント:javaee6 Webプロジェクト(JSF2.0)およびAndroidデバイス。クライアントは次のことを要求します:Crudといくつかのストアドプロシージャの実行。
- エンティティ:これらはすべてJavaプロジェクトにあり、JPAとeclipse-linkをプロバイダーとして、JAXBアノテーションを使用して生成されたエンティティクラスがあります。そのjarファイルはサーバープロジェクトに追加されており、クライアントによっても使用されます。
すべてのエンティティについて、クライアントはエンティティのクラスタイプを渡すだけで、必要な機能を備えています。
そこで、RestfulメソッドfindAllを持つ汎用セッションBeanを次のように作成しようとしました。
@Stateless
@Path("/DAOFacad/")
public class DAOFacade<T> {
@PersistenceContext EntityManager entityManager;
@PUT
@Consumes("application/json")
@Produces("application/json")
public List findAll(Class type) {
CriteriaQuery cq = entityManager.getCriteriaBuilder().createQuery();
cq.select(cq.from(type));
return entityManager.createQuery(cq).getResultList();
}
}
クライアントWebプロジェクトでは、次のようなものがあります。
public class Consumer {
private WebResource webResource;
private Client client;
private static final String BASE_URI = "http://localhost:8181/ServerPRS/webresources";
public Consumer() {
com.sun.jersey.api.client.config.ClientConfig config = new com.sun.jersey.api.client.config.DefaultClientConfig();
client = Client.create(config);
webResource = client.resource(BASE_URI).path("DAOFacad");
}
public <T> T findAll(Class<T> responseType, Object requestEntity) throws UniformInterfaceException {
return webResource.type(javax.ws.rs.core.MediaType.APPLICATION_JSON).put(responseType, requestEntity);
}
public void close() {
client.destroy();
}
}
管理された:
public class AdminContollerMB {
Consumer consumer;
/**
* Creates a new instance of AdminContollerMB
*/
public AdminContollerMB() {
consumer = new Consumer();
}
public List<Bank> getAllBanks(){
GenericType<List<Bank>> respT = new GenericType<List<Bank>>(){};
return (List<Bank>) consumer.findAll(respT.getClass(),Bank.class);
}
しかし、実行した後、エラーが発生します:
com.sun.jersey.api.client.ClientHandlerException: A message body writer for Java type, class java.lang.Class, and MIME media type, application/json, was not found
私はたくさん検索しました。ジャージAPIとグーグルのgsonAPIでGenericEntityとGenericTypeを試しましたが、うまくいきませんでした。
どんな助けでもありがたいです。