2014-10-22 3 views
1

mt 나머지 웹 서비스에 액세스 할 수있는 간단한 Resteasy 클라이언트를 작성하려고합니다. 불행하게도 나는 오류를 얻고있다 :클라이언트가 예외를 throw하는 중임

Exception in thread "main" org.jboss.resteasy.client.ClientResponseFailure: Unable to find a MessageBodyReader of content-type application/json and type null 
    at org.jboss.resteasy.client.core.BaseClientResponse.createResponseFailure(BaseClientResponse.java:523) 
    at org.jboss.resteasy.client.core.BaseClientResponse.createResponseFailure(BaseClientResponse.java:514) 
    at org.jboss.resteasy.client.core.BaseClientResponse.readFrom(BaseClientResponse.java:415) 
    at org.jboss.resteasy.client.core.BaseClientResponse.getEntity(BaseClientResponse.java:377) 
    at org.jboss.resteasy.client.core.BaseClientResponse.getEntity(BaseClientResponse.java:350) 
    at org.jboss.resteasy.client.core.BaseClientResponse.getEntity(BaseClientResponse.java:344) 
    at com.test.client.rest.employee.EmployeeClient.main(EmployeeClient.java:29) 

클라이언트 코드 :

ClientRequest request = new ClientRequest(ROOT_URL + "getEmp/GS"); 

    ClientResponse<Employee> resp = request.get(Employee.class); 
    //Response resp = request.get(); 
    if(resp.getResponseStatus().getStatusCode() == 200) 
    { 
     System.out.println("resp ok!!!"); 
    } 

    Employee e = resp.getEntity(Employee.class); 
    System.out.println("path:" + e); 

나머지 서비스 코드 :

@GET 
    @Path("getEmp/{name}") 
    @Produces("application/json") 
    public Employee getEmployee(@PathParam("name") String name) 
    { 
     if(em.containsKey(name)) 
      return em.get(name); 
     else 
      throw new EmployeeNotFoundException("Employee with name '" + name + "' does not exists!"); 
    } 

클라이언트 코드 응답이 괜찮습니다. 즉 200입니다. Mozilla Rest 클라이언트에서 동일한 URL이 올바르게 작동합니다. 어떤 도움을 주시면 감사하겠습니다.

답변

0

jettison 공급자 jars를 추가 한 후 문제가 해결되었습니다.

여전히 나는 Resteasy-2.3.2에 약간의 문제가 있다고 생각하며 결국 내 Reateasy를 2.3.5으로 업그레이드했으며 클라이언트가 완벽하게 작동하고 있습니다.

1

클라이언트 프로젝트에 모든 jackson 라이브러리가 있는지 확인하십시오. 당신이 받는다는을 사용하는 경우, 당신이해야 :

<dependency> 
    <groupId>org.jboss.resteasy</groupId> 
    <artifactId>resteasy-jackson-provider</artifactId> 
    <version>xxx</version> 
</dependency> 

편집 : RESTEasy가-jaxrs 및 RESTEasy가 - 잭슨 - 공급자가 사용하는 항아리를 또한 설정을 시도 할 수

[INFO] +- org.jboss.resteasy:resteasy-jaxrs:jar:2.2.1.GA:compile 
[INFO] | +- org.jboss.resteasy:jaxrs-api:jar:2.2.1.GA:compile 
[INFO] | +- org.scannotation:scannotation:jar:1.0.3:compile 
[INFO] | | \- javassist:javassist:jar:3.12.1.GA:compile 
[INFO] | +- javax.annotation:jsr250-api:jar:1.0:compile 
[INFO] | +- javax.activation:activation:jar:1.1:compile 
[INFO] | +- commons-httpclient:commons-httpclient:jar:3.1:compile 
[INFO] | | +- commons-logging:commons-logging:jar:1.0.4:compile 
[INFO] | | \- commons-codec:commons-codec:jar:1.2:compile 
[INFO] | +- org.apache.httpcomponents:httpclient:jar:4.0.3:compile 
[INFO] | | \- org.apache.httpcomponents:httpcore:jar:4.0.1:compile 
[INFO] | \- net.jcip:jcip-annotations:jar:1.0:compile 
[INFO] \- org.jboss.resteasy:resteasy-jackson-provider:jar:2.2.1.GA:compile 
[INFO] +- org.codehaus.jackson:jackson-core-asl:jar:1.6.3:compile 
[INFO] +- org.codehaus.jackson:jackson-mapper-asl:jar:1.6.3:compile 
[INFO] +- org.codehaus.jackson:jackson-jaxrs:jar:1.6.3:compile 
[INFO] \- org.codehaus.jackson:jackson-xc:jar:1.6.3:compile 

있는 콘텐츠 유형을 수용 클라이언트 구현시

request.accept("application/json"); 
+0

불행히도 나는 maven을 사용하지 않습니다. 나는 간단한 메인 클래스를 만들고 프로젝트의 빌드 경로에'resteasy-jackson-provider.2.3.2.Final.jar' 및'resteasy-jackson-provider.2.3.2.Final = jandex.jar'를 추가했습니다. 저는 JBOSS 집에서 가져 왔습니다. –

+0

필요한 모든 항아리를 게시했습니다. 도움이되지 않으면이 게시물을 확인하십시오. http://stackoverflow.com/questions/12175564/unable-to-find-a-messagebodyreader-of-content-type-application -json-and-type-cla – mendieta

+0

해답을 찾아 주셔서 대단히 감사드립니다. 그러나 방류 항아리가 범인이었다. 나는 그들을 추가했고 오류는 사라졌다. –

관련 문제