Question

J'ai un service Web JAX-RS (maillot à l'aide) qui accepte un objet JAXB comme l'entité de demande. Lorsque nous obtenons une erreur, nous voulons connecter la chaîne XML d'origine qui nous a été envoyé. À l'heure actuelle, je suis triage des wagons tout l'objet JAXB, mais puisque nous avons plusieurs énumérations java dans ces classes, les valeurs ENUM qui ne sont pas correctement orthographié dans la chaîne XML d'origine sont perdus, ce qui est inacceptable pour nos besoins.

Quelqu'un sait-il un moyen d'obtenir l'entité demande à la fois une chaîne et de l'objet JABX? Je préférerais ne pas écrire un MessageBodyReader personnalisé et je préférerais ne pas essayer d'obtenir le MessageBodyReader pour le JAXB si possible. Vous êtes libre d'utiliser des classes spécifiques à Jersey ainsi. Nous utilisons la version 1.0.x.

Était-ce utile?

La solution

il est hors Transforme pas difficile de le faire avec l'API JAX-RS. Voici ce que je l'ai fait:

@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();
    }
}

Cela vous donnera le code XML sous forme de chaîne et comme un objet JAXB en seulement quelques lignes de code.

Autres conseils

Comme une idée, vous pouvez ajouter un filtre de servlet pour votre application web qui intercepter toutes les demandes et la charge utile de la capture dans un contexte de fil où il peut être extrait de la suite si nécessaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top