2011-09-28 2 views
0

나는 이상한 문제가 있습니다. @Provider를 사용하여 Mapper Exception을 주석 처리하고 작업을 정상적으로 처리하지만 아래 클래스에 주석을 달 때이 클래스를 사용하면 전혀 작동하지 않습니다.JBoss AS7 + RestEasy : @Provider를 사용하여 Custom MessageBodyReader를 활성화하는 방법이 없습니다.

@Consumes("application/x-java-serialized-object") 
@Provider 
public class JAXBSpecificMarshaller implements MessageBodyReader 
{ 

    @PersistenceContext(unitName = "primary", type = PersistenceContextType.EXTENDED) 
    private EntityManager em; 

    @Override 
    public boolean isReadable(Class type, Type genericType, Annotation[] annotations, MediaType mediaType) 
    { 
    return type.isAnnotationPresent(XmlRootElement.class); 
    } 

    @Override 
    public Object readFrom(Class type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap httpHeaders, InputStream entityStream) throws IOException, WebApplicationException 
    { 
    try 
    { 
     // DataAdapter dataAdapter = new DataAdapter(em); 
     //unmarshaller.setAdapter(dataAdapter); 
     System.out.println(type.getName()); 
     JAXBContext ctx = JAXBContext.newInstance(type); 
     Unmarshaller unmarshaller = ctx.createUnmarshaller(); 
     return unmarshaller.unmarshal(entityStream); 
    } 
    catch (JAXBException ex) 
    { 
     throw new RuntimeException(ex); 
    } 
    } 


} 

내 주된 이유는 특정 어댑터를 사용하여 해당 ID를 입력 XML에 전달하여 개체를 검색 할 수 있어야한다는 것입니다. 나는 이것을 따라 갔다 Serialize a JAXB object via its ID?. 하지만 내 enitymanger와 어댑터를 초기화하려면 그렇게하기 위해 MessageBodyReader를 사용해야한다고 들었다.

도움 주셔서 감사합니다.

+0

'MessageBodyReader'가 배포 중이라는 것을 알고 있습니까? isReadable 메소드가 항상 false를 돌려주는 것이 가능한가? –

+0

하지만 isReadable에서 항상 true를 보내더라도 작동하지 않습니다. 디버거를 사용하여 내가 deserialize 할 내 Entity 클래스 매개 변수화 된 형식이 아니므로 marshaller 그것을 사용하지 않는 및 CollectionProvider prefere 찾습니다. – Ghostwan

답변

0

배포 할 응용 프로그램 서버와 사용중인 JAX-RS 구현에 대한 컨텍스트를 제공 할 수 있습니까?

일부 JAXB 주석 클래스에 @Produces @Provider를 구현하려고 JBoss AS 7에서 RESTeasy와 비슷한 문제가 있었지만 RESTeasy에서 제공된 JAXB marshaller 공급자가 항상 우선 순위를 가지며 내 Marshaller가 실행되지 않았습니다.

내 솔루션은 사용자 지정 JAXBContextFinder, ContextResolver 및 JAXBContext에 대한 구현을 작성했습니다. 나 자신의 핸들러 구현을위한 레서피로 resteasy-jettison-provider 소스 코드를 사용했습니다. http://docs.jboss.org/resteasy/docs/2.0.0.GA/userguide/html/Built_in_JAXB_providers.html

+0

Jboss 7에 전쟁을 배포하고 있습니다. 만약 내가 만약 http://stackoverflow.com/questions/7278406/serialize-a-jaxb-object-via-its-id/7285517#7285517 내 프로젝트에서 작동하지만, 형식을 변경할 때 내 타입에 의한 MessageBodyWriter도 작업하지 않을 것이다. – Ghostwan

+0

나는 당신과 같은 문제가 있다고 생각합니다. 공급자를 보았으므로 그것을 선택하지 않을 것이기 때문입니다. JAXBContextFinder, ContextResolver, JAXBContext에 대한 소스가 있습니까? 감사합니다 – Ghostwan

+0

늦은 응답을 위해 유감스럽게 생각하고, 아마 너 자신 그것을 발견했다. 참조 : http://grepcode.com/file/repository.jboss.org/nexus/content/repositories/releases/org.jboss.resteasy/resteasy-jettison-provider/1.2.1.GA/org/jboss/resteasy /plugins/providers/jaxb/json/JsonJAXBContextFinder.java?av=f – hovenko

관련 문제