我正在使用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无法这样做。