Bonjour,
L'exception que je rencontre est la suivante : javax.xml.bind.PropertyException: name: com.sun.xml.internal.bind.namespacePrefixMapper
l'origine du souci: je souhaite générer un fichier xml avec une ligne d'entête ou je précise les préfixes et namespace, une ligne qui ressemble à ceci:
donc j'ai écris dans le @XmlRootElement(name = "mon-element-root", namespace="http://toto.titi.com/truc/blabla") dans ma classe root, exemple:<mon_prefixe:element-compose xmlns:mon_prefixe="http://toto.titi.com/truc/blabla" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://toto.titi.com/truc/blabla mon_xsd.xsd">
@XmlRootElement(name = "element-compose", namespace="http://toto.titi.com/truc/blabla")
@XmlType(propOrder={"status" , "maListeDePers"}) //l'ordre des elements
public class ElementCompose extends IdentifiableXmlType{....}
dans ma classe ElementComposeAccess, la méthode marshal est la suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 public void marshal(final ElementCompose elementCompose, final OutputStream output) throws JAXBException { final JAXBContext ctx = JAXBContext.newInstance(ElementCompose.class,Personne.class); final Marshaller marshaller = ctx.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, "http://toto.titi.com/truc/blabla mon_xsd.xsd"); NamespacePrefixMapper mapper = new NamespacePrefixMapper() { @Override public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) { if ("http://toto.titi.com/truc/blabla".equals(namespaceUri)) { return "p"; } return suggestion; //retourne xsi pour "http://www.w3.org/2001/XMLSchema-instance", si on met rien elle retourne ns3 ou autre... } }; marshaller.setProperty("com.sun.xml.internal.bind.namespacePrefixMapper", mapper); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); marshaller.marshal(elementCompose, output); }
dans le pom.xml, j'utilise ces deux jar:
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.2</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.1.12</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
donc avant de vouloir personnaliser le prefixe du namespace, je n'avais pas l'exception mais elle est apparue quand j'ai rajouté le , namespace="http://toto.titi.com/truc/blabla" dans @XmlRootElement(name = "mon-element-root") et impléménter NamespacePrefixMapper mapper = new NamespacePrefixMapper() {..;
Merci
Partager