2010-09-01 10 views
4

lors de la sérialisation de mes ressources sur Jersey, je souhaite utiliser des espaces de noms dans certains cas.Comment personnaliser les préfixes d'espace de noms sur Jersey (JAX-WS)

Est-il possible de personnaliser les préfixes d'espace de noms sur jersey?

Par défaut:

 
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<order xmlns:ns2="http://www.w3.org/2005/Atom"> 
    <price>123</price> 
    <ns2:link rel="duh" href="/abc/123"/> 
    <ns2:link rel="abc" href="/def/234"/> 
</order> 

Je veux quelque chose comme:

 
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<order xmlns:atom="http://www.w3.org/2005/Atom"> 
    <price>123</price> 
    <atom:link rel="duh" href="/abc/123"/> 
    <atom:link rel="abc" href="/def/234"/> 
</order> 

Merci, Lucas

Répondre

2

Si vous utilisez la MOXy mise en œuvre JAXB vous pouvez contrôler vos préfixes en utilisant le package @XmlSchema niveau d'annotation:

@javax.xml.bind.annotation.XmlSchema( 
    xmlns = { 
      @javax.xml.bind.annotation.XmlNs(prefix = "atom", namespaceURI = "http://www.w3.org/2005/Atom") 
      }) 
    package org.example.domain; 

Pour utiliser Moxy JAXB vous devez avoir un fichier nommé jaxb.properties avec vos classes de modèle avec l'entrée suivante:

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

Pour un exemple d'utilisation avec Moxy Jersey voir:

+0

sonne bien =) donc il n'y a pas moyen de le faire avec la norme JAXB? –

+0

La norme JAXB (JSR-222) ne spécifie aucun moyen de le faire. L'implémentation MOXy JAXB exploite l'annotation standard pour obtenir le comportement souhaité. Metro JAXB (l'implémentation de référence) offre une extension appelée NamespacePrefixMapper pour atteindre ce résultat: http://blogs.sun.com/enterprisetechtips/entry/customizing_jaxb –

+0

Est-il possible de changer l'implémentation de JAXB sur Grizzly? Le fichier jaxb.properties ne fonctionne pas, ni init-params. Je vais devoir déployer mon application sur un serveur d'applications? –