J'ai généré des classes Java à partir de XSD, tout fonctionne très bien d'un point de vue anti-marshalling.
Cependant, lorsque je rassemble des classes JAXB, j'obtiens ce qui suit:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<message xmlns="http://poc.cmc.com/ScreenLayout">
<Data>
<Type>Sample</Type>
. . .
</message>
Mais, j'ai besoin
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns0:message xmlns:ns0="http://poc.cmc.com/ScreenLayout">
<ns0:Data>
<ns0:Type>Sample</ns0:Type>
. . .
comment puis-je contrôler cela à partir de Java?
Merci beaucoup
Vous pouvez utiliser le @XmlSchema
annotation sur un package-info
classe pour attribuer un préfixe à l'espace de noms:
@XmlSchema(
namespace = "http://poc.cmc.com/ScreenLayout",
elementFormDefault = XmlNsForm.QUALIFIED,
xmlns={@XmlNs(prefix="ns0", namespaceURI="http://poc.cmc.com/ScreenLayout")})
package your.package;
import javax.xml.bind.annotation.*;
Je ne peux pas poster ceci en tant que commentaire!
parce que l'application consommatrice est très stupide et a besoin du préfixe
Dans ce cas, l'application stupide ne consomme pas vraiment de XML. Jetez un œil à ce lien http://bdoughan.blogspot.com/2010/08/jaxb-namespaces.html et jouez avec les options de l'espace de noms. Plus précisément
@XmlSchema (
xmlns = {
@javax.xml.bind.annotation.XmlNs(prefix = "ns1", namespaceURI="http:test"),
@javax.xml.bind.annotation.XmlNs(prefix = "xsd", namespaceURI="http:www.w3.org2001XMLSchema")
},
namespace = "http:test",
elementFormDefault = XmlNsForm.UNQUALIFIED,
attributeFormDefault = XmlNsForm.UNSET
)
utilisé dans un fichier package-info.Java.
@XmlType(namespace="http://www.example.org/type")
Utilisé sur une déclaration de classe
@XmlElement(namespace="http://www.example.org/property")
Utilisé sur une propriété.
Une combinaison ou une seule de ces options peut vous donner ce que vous voulez. Cependant, vous devez comprendre que vous livrez une bataille difficile lorsque vous passez d'un xml valide à un xml qui doit contenir un préfixe d'espace de noms spécifique sur tous les éléments.
Selon la spécification XML, les deux xml sont identiques, car xmlns = "" définit l'espace de noms par défaut qui s'applique aux éléments actuels et à tous les éléments enfants. Les analyseurs XML devraient vous donner le même DOM ou SAX dans les deux cas