2014-10-22 2 views
0

나는이 경고 웹 서비스에서 리소스를 검색하지만 얻으려고 :으로 Restlet이 표현 컨버터 찾을 수 없습니다 : [응용 프로그램/repo.foo + XML]를

WARNING: Unable to find a converter for this representation : [application/repo.foo+xml] 

그리고 내 코드를 null 엔티티를 돌려줍니다.

  1. resource.getRequestAttributes().put("org.restlet.http.headers", new MediaType("application", "application/repo.foo+xml"));

  2. resource.setAttribute("Content-Type", "application/repo.foo+xml");

: 여기에 코드

Engine.getInstance().getRegisteredClients().clear(); 
Engine.getInstance().getRegisteredClients().add(new HttpClientHelper(null)); 
Engine.getInstance().getRegisteredConverters().add(new JacksonConverter()); 

ClientResource resource = new ClientResource(path); 
ChallengeScheme scheme = ChallengeScheme.HTTP_BASIC; 
ChallengeResponse auth = new ChallengeResponse(scheme, "user", "password"); 

resource.setChallengeResponse(auth); 

Repo entity = resource.get(Repo.class); 
System.out.println(entity); 

UPDATE

내 시도가 불행하게도 작동하지 않는 것입니다

+0

잭슨이 인식하지 못하는 콘텐츠 유형으로 다시 전송됩니다. 전체 응답은 어떻게 생겼습니까? 그것은 JSON 다음 서버가 그것에 대한 올바른 콘텐츠 유형을 설정해야합니다. – tom

+0

Restlet에서 Content-Type을 어떻게 설정할 수 있습니까? 이 하나의'resource.setAttribute ("Content-Type", "application/repo.foo + xml");은 작동하지 않습니다. – Aaron

+0

클라이언트의 액센트 유형을 설정합니다. 원하는 경우 서버에서 무시할 수 있습니다. – tom

답변

0

귀하의 질문에 약간의 혼란이 있습니다.

클라이언트를 작성하고 있습니다. 수락 헤더를 설정하도록 클라이언트에 지시 할 수 있습니다. 간단히 말하자면 응답을 원하는 콘텐츠 유형에 대한 힌트입니다. JSON, HTML, XML 등. 서버는 이것을 존중할 수도 있고 가장 좋은 추측을 보내거나 완전히 무시할 수도 있습니다.

수락 헤더를 "application/javascript"로 설정하고 어떻게 반응하는지 확인할 수 있습니다. "application/repo.foo + xml"을 보내면 jackson xml 데이터 바인드 패키지로 파싱 할 수 있습니다. 개체를 serialize하는 데 사용할 변환기를 알 수 있도록 미디어 형식과 변환기를 클라이언트에 등록해야 할 수 있습니다.

+0

실제로 그것은 커스텀'MediaType'을 등록하는 방법에 대한 질문이었습니다. 나는 연구에 많은 시간을 보내지 만, 나는 그것에 대한 해결책을 찾지 못했습니다. 이제 나는'Restlet'이 매우 나쁜 문서화 된 라이브러리라는 것을 알았습니다. – Aaron

+0

Restlet은 훌륭한 책입니다. 나중에 다시 확인해 보겠습니다. 이전에 서버 측에서이 작업을 수행했는데, 그것이 동일하게 작동하는지 확인할 수 있습니다. – tom