문제

내 리소스가 있으며 게시물 요청을 처리하는 일반적인 재정의 방법입니다.

public void acceptRepresentation(Representation rep) {

  if (MediaType.APPLICATION_XML.equals(rep.getMediaType())) {
      //Do stuff here
  }
  else {
      //complain!
  }
}

내가 알고 싶은 것은 XML 패킷을 처리하는 모범 사례입니다. 나는 양식을 사용하여 많은 예를 보았지만 분명히 표현 객체 자체로 작업하거나 유용한 XML 객체에 캐스트하는 방법이 있습니다.

리소스에서 들어오는 XML을 구문 분석 해야하는 방법에 대한 도움은 대단히 감사합니다.

도움이 되었습니까?

해결책

이것은 내가 찾고 있던 종류의 반응에 더 가깝습니다. 감사합니다 Thierry Boileau 답을 위해 :

두 가지 종류의 "XML 표현"이라는 두 가지 종류의 DomRepresentation 및 SaxRepresentation을 사용할 수 있습니다. 게시 된 표현으로 두 가지를 인스턴스화 할 수 있습니다. EG : DomRepresentation XMLREP = 새로운 DOMREPRESENTATION (REP);

DomRepresentation은 DOM 문서에 대한 액세스를 제공합니다. SaxRepresentation을 사용하면 XML 문서를 자신의 Contenthandler와 구문 분석 할 수 있습니다. 여기 1과 여기에서 Javadocs를 참조하십시오.

  1. http://www.restlet.org/documentation/1.1/api/org/restlet/res ource/domrepresentat ition.html

  2. http : //www.restlet.o rg/docut

다른 팁

우리는 현재 대체 JAX-RS 구현 인 RESTEASY를 사용 하여이 작업을 수행합니다. 우리는 XML과 모델 pojos 사이를 매핑하기 위해 jaxb 바인딩 (주석)을 사용하여 A를 지정합니다. JAXB 제공 업체 Jax-Rs에게 방법을 알고 있습니다. 이것은 우리에게 설명되어 있습니다 RESEASY (JAX-RS) 기사와 함께 Java EE의 편안한 웹 서비스, 도움이 될 수 있습니다.

업데이트 : Restlet의 경우 JAXB 확장 필요한 것일 수 있습니다.

Through the representation.getText() 메소드는 색소폰 파서 또는 DOM 리더에 공급할 수있는 문자열을 얻을 수 있습니다.

@simon e

이해가 안 돼요 : 어떤 Java를 사용하고 있습니까?

그래서 나는 당신에게 Jax-Rs를 사용하는 예를 제공합니다 (Jersey 구현)

서버 부분 (일부 휴식 클래스의 방법) :

@POST
@Path("/upload")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.TEXT_PLAIN)
public static Response upload(
        @FormParam("name") String name,
        @FormParam("content") String content)
        throws Exception {

    // NOTE: you get your content as String
    // (do something here)

    return Response.ok().build();
}

클라이언트 부분 (일부 주니트 테스트 방법) :

@Test
public void uploadFile()
        throws Exception {

    String address = "http://0.0.0.0:8000/r/upload";

    WebResource r = Client.create().resource(address);
    Form form = new Form();
    form.add("name", "test");
    form.add("content", "SOME CONTENT GOES HERE");
    String s = r.post(String.class, form);

    System.out.println(s);
}

그게 다야 !!!

수입에 어려움이있는 경우 :
서버는 javax.ws.rs.* 및 javax.ws.rs.rs.core가 필요합니다.*
클라이언트는 com.sun.jersey.api.client를 필요로합니다.* 및 com.sun.jersey.api.representation.*

JAX-RS가 다가오는 곳의 일부가 될 것이기 때문에 어쨌든 대체 구현보다는 JAX-R을 사용하라는 조언을 드릴 것입니다. Java EE 6

Restlet 2.0에서도 동일한 절차입니까 ??

Restlet 2.0M6을 사용하고 여기에 사용하는 코드 스 니펫이 있습니다.

@게시하다

공개 대표 과정 (표현 엔티티)

{

노력하다

{

domrepresentation dom = 새로운 domrepresentation (엔티티);

문서 d = dom.getDocument ();

.

.

} catch (예외 E)

{e.printstacktrace (); }

그리고 dom.getDocument () 행에서 Null 포인터 예외를 던집니다. 이는 실제로 데이터가 도착하지 않았 음을 의미합니다.

그리고 내 플렉스 비트는 다음과 같습니다 - var 서비스 : httpservice = new httpservice (); service.method = "post"; service.contentType = "application/xml"service.url = url; var 토큰 : asynctoken = service.send (params);

여기서 Params는 XML 객체입니다.

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