Джерси MessageBodyReader не найден - PullRequest
0 голосов
/ 12 февраля 2019

Я использую jersey-client: 2.28, jersey-hk2: 2.28 и jersey-media-jaxb: 2.28 maven для создания клиента, который будет использовать сервис RESTful.Все компоненты имеют аннотации 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, но я хотел бы знать, почему Джерси не может это сделатьпоэтому.

...