Puis-je la force de JAXB de ne pas convertir " en ", par exemple, lors de la sérialisation en XML?

J'ai un Objet qui est en train d'être réunies pour XML à l'aide de JAXB. Un élément contient une Chaîne qui comprend des guillemets ("). Le XML résultant a " où le " existait.

Même si c'est normalement préférée, j'ai besoin de ma sortie pour correspondre à une héritage système. Comment puis-je la force de JAXB de ne PAS convertir les entités HTML?

--

Merci pour les réponses. Cependant, je ne vois jamais le gestionnaire d'escape() est appelé. Pouvez-vous jeter un oeil et voir ce que je fais mal? Merci!

package org.dc.model;

import java.io.IOException;
import java.io.Writer;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

import org.dc.generated.Shiporder;

import com.sun.xml.internal.bind.marshaller.CharacterEscapeHandler;

public class PleaseWork {
    public void prettyPlease() throws JAXBException {
        Shiporder shipOrder = new Shiporder();
        shipOrder.setOrderid("Order's ID");
        shipOrder.setOrderperson("The woman said, \"How ya doin & stuff?\"");

        JAXBContext context = JAXBContext.newInstance("org.dc.generated");
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        marshaller.setProperty(CharacterEscapeHandler.class.getName(),
                new CharacterEscapeHandler() {
                    @Override
                    public void escape(char[] ch, int start, int length,
                            boolean isAttVal, Writer out) throws IOException {
                        out.write("Called escape for characters = " + ch.toString());
                    }
                });
        marshaller.marshal(shipOrder, System.out);
    }

    public static void main(String[] args) throws Exception {
        new PleaseWork().prettyPlease();
    }
}

--

La sortie est ceci:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<shiporder orderid="Order's ID">
    <orderperson>The woman said, &quot;How ya doin &amp; stuff?&quot;</orderperson>
</shiporder>

et comme vous pouvez le voir, la fonction de rappel n'est jamais affiché. (Une fois que je reçois le callback qui est appelée, je vais vous soucier de l'avoir fait faire ce que je veux.)

--

  • Supprimé ma précédente réponse, puisque c'était tout à fait faux... mais c'est toujours intéressant de souligner que &quot; n'est pas une entité HTML, c'est un XML échapper.
  • C'est en fait à la fois un XML et HTML entité. en.wikipedia.org/wiki/...
  • mais dans ce contexte c'est un XML échapper. Ce n'est pas en HTML.
  • Un coéquipier de la mine compris cela sans exiger d'un Fournisseur de mise en œuvre Spécifiques. Indiqué ci-dessus.
  • J'ai couru dans le même problème. La version de JAXB utilisez-vous? Actuellement, je utiliser JAXB 2.2.4 et de la libération de la cite sont échappés seulement dans les attributs. Cependant j'ai quelques fichiers XML, produit par v2.1.13, qui ont le même "problème". Cependant, j'ai vérifié la source de MinimumEscapeHandler de 2.1.13, et il semble être OK (j'ai même vérifié 2.0.1). Peut-être, cette évasion gestionnaire n'a pas été activé (merci à @GrzegorzOledzki pour le rapport de bug).
  • Après débogage, il s'est avéré être un ridicule problème: Échapper à la politique pour les guillemets (") est différent lors de la sérialisation est effectuée à OutputStream ou de l'Écrivain.

InformationsquelleAutor Elliot | 2009-10-01