2012-10-30 3 views
2

I 오전 수석 자바 개발자 (새로운 유래에서) 클라이언트 - 서버 프로젝트를 진행 :일반는 Crud Restfull 서비스

  • 서버 : javaee6 웹 프로젝트 (휴식, EJB3.1, JPA)
  • 클라이언트 : javaee6 웹 프로젝트 (JSF2.0) 및 Android 디바이스. 고객이 요청할 것 : 일부 상점 절차의 순항 및 실행.
  • 엔티티 : 모두 JPA 및 공급자와 JAXB 주석이있는 Eclipse 링크로 생성 된 엔티티 클래스가있는 자바 프로젝트에 있습니다. jar 파일이 서버 프로젝트에 추가되었으며 클라이언트에서도 사용됩니다.

모든 엔티티 클라이언트는 엔티티의 클래스 유형을 전달하기 만하면 원하는 기능을 갖게됩니다.

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

} 
:

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

} 클라이언트 웹 프로젝트에서

, 나는 이런 식으로 뭔가를 가지고 :

그래서 나는이 좋아 findall은 평안한 방법이있는 일반 세션 빈을 가지고 노력

관리 대상 :

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 

: 6,

하지만 실행 한 후 나는 오류가 발생합니다. 나는 GenericEntity와 GenericType을 저지 API와 Google의 gson api에서 시도했지만 작동하지 않았다.

어떤 도움을 주시면 감사하겠습니다.

답변

1

귀하의 방법은 findAll이지만, PUT을 허용합니다. 그것은 RESTful 서비스가 빌드되는 방식이 아닙니다.

GET 일부 유형의 리소스 인스턴스가 필요합니다. RESTful 서비스에서 Resources는 Java 클래스와 아무런 관련이 없다. 당신이 일반적인findAllGET 방법을 원한다면, 같은 것을 할 :

@GET 
public Response findAll(@QueryParam("class") String clazz) { 
    List<Object> instances = findAllInstancesOfClazz(clazz); 
    return Response.ok(instances).build(); 
} 

콜이 방법을 :

GET http://example.com/DAOFacade/?class=SomeClassName 

는 기억 REST는 RPC하지 않습니다!

관련 문제