문제

목표

Yahoo의 HotJobs용 Java 클라이언트 이력서 검색 REST API.

배경

저는 SOAP API용 웹 서비스 클라이언트를 작성하는 데 익숙합니다. wsimport 프록시 스텁을 생성하고 실행 중입니다.하지만 이것은 나에게 새로운 REST API입니다.

세부

진전

질문을 보니 Java용 나머지 클라이언트?, 그러나 자동화된 솔루션에서는 스키마와 REST API를 생성하기 위해 POJO에서 JAXB를 호출하여 서버와 클라이언트를 모두 제공한다고 가정합니다.

사용 저지 (ㅏ JAX-RS 구현) 수동으로 HTTP 요청을 할 수 있었습니다.

import com.sun.jersey.api.client.*;

...

ClientConfig clientConfig = new DefaultClientConfig();
Client client = Client.create(clientConfig);

WebResource webResource = client.resource("https://hj.yahooapis.com/v1/HJAuthTokens");
webResource.accept("application/xml");

// body is a hard-coded string, with replacements for the variable bits
String response = webResource.post(String.class, body);

// parse response into a org.w3c.dom.Document
// interface with Document via XPATH, or write my own POJO mappings

응답은 다음과 같습니다.

<?xml version="1.0" encoding="utf-8"?>   
<Response>   
    <ResponseCode>0</ResponseCode>   
    <ResponseMessage>Login successful</ResponseMessage>
    <Token>NTlEMTdFNjk3Qjg4NUJBNDA3MkJFOTI3NzJEMTdDNDU7bG9jYWxob3N0LmVnbGJwLmNvcnAueWFob28uY29tO0pVNWpzRGRhN3VhSS4yQVRqRi4wWE5jTWl0RHVVYzQyX3luYWd1TjIxaGx6U0lhTXN3LS07NjY2MzM1OzIzNDY3NTsxMjA5MDE2OTE5OzZCM1RBMVNudHdLbl9VdFFKMFEydWctLQ==</Token>   
</Response>  

또는 다음과 같을 수 있습니다.

<?xml version="1.0" encoding="utf-8"?>   
<yahoo:error xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" xml:lang="en-US">   
    <yahoo:description>description</yahoo:description>   
    <yahoo:detail>   
        <ErrorCode>errorCode</ErrorCode>   
    </yahoo:detail>   
</yahoo:error>  

질문

  • 자동으로 생성하는 방법이 있나요? POJO 공식적인 스키마 없이 마샬링/언마샬링할 수 있습니까?
  • POJO를 직접 생성해야 할까요? JAXB 주석?
  • 이 모든 작업을 수동으로 수행할 필요가 없도록 활용해야 하는 도구가 있습니까?
도움이 되었습니까?

해결책

스키마의 네임 스페이스 URI로서 HTTP URL을 제공하지만 실제로 스키마를 저장하지 않는 것은 흥미 롭습니다. 그것은 이메일이나 토론 목록 게시물이 수정 될 수있는 그들의 감독 일 수 있습니다.

한 가지 방법은 자신만의 스키마를 만드는 것이지만, 이것은 작은 수익을위한 많은 작업처럼 보입니다. 메시지가 얼마나 간단한지를 감안할 때, 당신이 그들을 감싸기 위해 포조가 필요한지 궁금합니다. XPath를 사용하는 데 필요한 데이터를 추출하는 핸들러가있는 이유는 무엇입니까?


편집 : 과거의 폭발, 그러나 나는 의견을보고 질문을 다시 읽었으며 첫 번째 문장이 이해하기 어렵다는 것을 깨달았습니다. 따라서 설명 :

공개적으로 액세스 할 수있는 웹 서비스를 작성하려는 매우 좋은 습관 중 하나는 스키마 네임 스페이스 URI에 사용하는 것과 동일한 URL에서 스키마 문서를 사용할 수 있도록하는 것입니다. 문서 (W3C XSD 네임 스페이스 자체가 좋은 예입니다. http://www.w3.org/2001/xmlschema).

다른 팁

나는 Bean을 직접 작성하고 필요한 경우에만 JAXB 주석으로 주석을 달 것을 제안합니다.대부분의 접근자/변경자(getter/setter)의 경우에는 그럴 필요가 없습니다.기본적으로 모든 공용 Bean 접근자와 필드가 고려되고 이름은 Bean 규칙을 사용하여 파생되며 기본값은 속성 대신 요소를 사용하는 것입니다(따라서 속성에 주석을 달아야 함).

또는 W3C 스키마가 마음에 든다면 물론 직접 스키마를 작성하고 JAXB를 사용하여 Bean을 생성할 수도 있습니다.그리고 데이터 바인딩에는 스키마가 아닌 결과 코드를 사용하면 됩니다.

POJO에 관해서:그것은 매우 간단할 수 있습니다.다음과 같은 것 :

@XmlRootElement("Response")
class Response {
  public int responseCode;
  public String responseMessage;
  public String token; // or perhaps byte[] works for automated base64?
}

다른 사람들에게도 마찬가지입니다.또는 원하는 경우 getter/setter를 사용하고 좀 더 자세한 내용을 신경쓰지 마세요.이것은 단지 데이터 컨테이너일 뿐이므로 너무 화려할 필요는 없습니다.

콘텐츠에서 유형을 자동 감지해야 하는 경우 Stax 파서를 사용하여 루트 요소가 무엇인지 확인한 다음 JAXB Unmarshaller를 사용하여 바인딩하고 해당 루트 요소를 가리키는 XMLStreamReader를 전달하는 것을 고려하세요.이렇게 하면 바인딩할 다른 개체 유형을 전달할 수 있습니다.

그리고 마지막으로:요청 보내기/받기:기존의 HttpURLConnection은 GET 및 POST 요청에 대해 정상적으로 작동합니다(예를 들어 URL.openConnection()을 사용하여 구성).필요한 경우 Jakarta HttpClient에는 더 많은 기능이 있습니다.따라서 별도의 REST 클라이언트가 실제로 필요하지 않은 경우가 많습니다. 유용할 수 있지만 일반적으로 간단한 http 클라이언트 부분을 기반으로 구축됩니다.

http4e가 휴식을 취하는 데 매우 유용하다고 생각합니다. 멋진 일식 플러그인이며, 탭, 구문 색칠, 자동 제안, 코드 생성, REST HTTP 통화 재생 등이 있습니다. HTTP 디버깅, HTTP 변조, 해킹의 큰 역할을합니다. 나는 그것으로 너무 재미있다.

http://www.ywebb.com/

노력하다 JdkRequest ~에서 JCabi-HTTP (저는 개발자입니다). 이것이 작동하는 방식입니다.

String body = new JdkRequest("http://www.google.com")
  .header("User-Agent", "it's me")
  .fetch()
  .body()

자세한 내용은이 블로그 게시물을 확인하십시오. http://www.yegor256.com/2014/04/11/jcabi-http-intro.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top