Question

Je dois générer du XML en utilisant jaxb comme ci-dessous :

<item>
    <key1 id="default">value1</key1>
    <key2 id="default">value2</key2>
    <key3 id="default">value3</key3>
</item>

comment faire cela en utilisant @XmlPath dans jaxb ?

j'en ai utilisé un en dessous.Mais j'ai plusieurs clés autour de 50.comment y parvenir ?

   @XmlPath("key1/@id")
    private String attrValue = "default";
Était-ce utile?

La solution

@XmlPath est une extension dans le EclipseLink MOXy implémentation de JAXB (JSR-222).Vous devrez utiliser l'équivalent dans le fichier de mappage de MOXy pour obtenir le comportement souhaité.

oxm.xml

Ce que vous recherchez, c'est la possibilité d'appliquer plusieurs mappages inscriptibles pour un champ/propriété.Cela ne peut actuellement pas être fait via des annotations, mais peut être fait en utilisant le document de cartographie externe de MOXy.

<?xml version="1.0"?>
<xml-bindings
    xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
    package-name="forum12704491">
    <java-types>
        <java-type name="Item">
            <java-attributes>
                <xml-element java-attribute="attrValue" xml-path="key1/@id"/>
                <xml-element java-attribute="attrValue" xml-path="key2/@id" write-only="true"/>
                <xml-element java-attribute="attrValue" xml-path="key3/@id" write-only="true"/>
            </java-attributes>
        </java-type>
    </java-types>
</xml-bindings>

Article

package forum12704491;

import javax.xml.bind.annotation.*;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Item {

    private String attrValue;
    private String key1;
    private String key2;
    private String key3;

}

jaxb.propriétés

Afin de spécifier MOXy comme fournisseur JAXB, vous devez ajouter un fichier appelé jaxb.properties dans le même package que votre modèle de domaine avec l'entrée suivante (voir : http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html)

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

Démo

Le code de démonstration ci-dessous montre comment démarrer à l'aide du document de mappage externe de MOXy.

package forum12704491;

import java.io.File;
import java.util.*;
import javax.xml.bind.*;
import org.eclipse.persistence.jaxb.JAXBContextProperties;

public class Demo {

    public static void main(String[] args) throws Exception {
        Map<String, Object> properties = new HashMap<String, Object>(1);
        properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, "forum12704491/oxm.xml");
        JAXBContext jc = JAXBContext.newInstance(new Class[] {Item.class}, properties);

        File xml = new File("src/forum12704491/input.xml");
        Unmarshaller unmarshaller = jc.createUnmarshaller();
        Item item = (Item) unmarshaller.unmarshal(xml);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(item, System.out);
    }

}

entrée.xml/Sortie

<?xml version="1.0" encoding="UTF-8"?>
<item>
   <key1 id="default">value1</key1>
   <key2 id="default">value2</key2>
   <key3 id="default">value3</key3>
</item>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top