找不到泽西岛MessageBodyReader

时间:2019-02-11 22:29:13

标签: java jersey jersey-2.0 jersey-client

我正在使用jersey-client:2.28,jersey-hk2:2.28和jersey-media-jaxb:2.28 maven目标来创建将使用RESTful服务的客户端。所有bean均具有XmlRootElement批注和默认的空构造函数。然而,当这样调用服务时:

JAXBElement<XYZ> post = target.request( MediaType.APPLICATION_XML ).post( Entity.entity( xzyRequest, MediaType.APPLICATION_XML ), JAXBElement.class );

我得到:

javax.ws.rs.client.ResponseProcessingException: org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyReader not found for media type=application/xml, type=class javax.xml.bind.JAXBElement, genericType=class javax.xml.bind.JAXBElement

我知道正在发现jersey-media-jaxb提供程序,因为在启动请求时将其用于编写消息正文。我知道响应具有有效的xml,因为我可以像这样解析它:

String responseString = target.request( MediaType.APPLICATION_XML )
        .post( Entity.entity( xyzRequest, MediaType.APPLICATION_XML ), String.class );
Unmarshaller unmarshaller= JAXBContext.newInstance( XYZ.class ).createUnmarshaller();
XYZ zyx = ( ( JAXBElement<XYZ> ) unmarshaller.unmarshal( new StringReader( xmlResponse ) ) ).getValue();

我并不特别介意解析XML,但是我想知道为什么Jersey无法这样做。

0 个答案:

没有答案