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:


<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">
donc j'ai écris dans le @XmlRootElement(name = "mon-element-root", namespace="http://toto.titi.com/truc/blabla") dans ma classe root, exemple:
@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