2009-12-01 4 views
4

요청 엔티티로 JAXB 객체를 허용하는 JAX-RS 웹 서비스 (저지 사용)가 있습니다. 오류가 발생하면 우리에게 보낸 원본 xml 문자열을 기록하려고합니다. 현재 JAXB 객체를 다시 마샬링하고 있지만 이러한 클래스에 여러 자바 열거 형이 있으므로 원본 XML 문자열에서 올바르게 입력되지 않은 열거 형 값은 손실됩니다. 이는 우리의 목적에 맞지 않습니다.JAX-RS JAXB 객체 및 문자열로 객체 가져 오기

요청 엔터티를 문자열과 JABX 개체로 가져 오는 방법을 아는 사람이 있습니까? 나는 커스텀 MessageBodyReader를 쓰지 않기를 바랄 것이고 가능하다면 JAXB를위한 MessageBodyReader를 얻지 않으려 고한다. 당신은 저지 특정 클래스도 자유롭게 사용할 수 있습니다. 우리는 버전 1.0.x를 사용하고 있습니다.

답변

2

JAX-RS API로이를 수행하는 것이 어렵지 않습니다. 여기에 내가했던 일이야 :이 당신에게 문자열과 단 몇 줄의 코드에서 JAXB 객체로서 XML을 줄 것이다

@Path("/transactions") 
public class TestResource<X> { 

    private Class<X> jaxbClass; 

    @POST 
    @Path("/{transaction-id}") 
    @Consumes("application/xml") 
    public Response processPost(@Context Providers providers, @Context HttpHeaders httpHeaders, @PathParam("transaction-id") final long transactionId, 
      final String xmlString) throws WebApplicationException, IOException { 

     MessageBodyReader<X> reader = providers.getMessageBodyReader(jaxbClass, null, null, MediaType.APPLICATION_XML_TYPE); 
     InputStream entityStream = new ByteArrayInputStream(xmlString.getBytes()); 
     final X xmlObject = reader.readFrom(jaxbClass, null, null, MediaType.APPLICATION_XML_TYPE, httpHeaders.getRequestHeaders(), entityStream); 

     //insert logic here 

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

.

0

웹 응용 프로그램에 대한 모든 요청을 가로 채고 페이로드를 스레드 컨텍스트로 캡처하는 서블릿 필터를 추가하여 필요할 때 나중에 추출 할 수 있습니다.