IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

XML généré avec tous les xmlns : comment les virer ? [JAXB]


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Points : 30
    Points
    30
    Par défaut XML généré avec tous les xmlns : comment les virer ?
    Bonjour,

    Je suis débutant en JAXB et je sollicite vos lumières. J'essaie de développer des webservices RESTfull, et je me suis tourné vers JAXB et JAXWS.

    Mon problème est que le XML généré en retour de mes WebService contient TOUS les namespaces de mes beans, pas seulement celui de l'objet retourné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <ns5:ResultsCompanyVO
    	xmlns:ns2="urn:UserWSVO" 
    	xmlns:ns3="urn:WSProcessingProblem" 
    	xmlns:ns4="urn:Societe4SearchWSVO" 
    	xmlns:ns5="urn:ResultsCompanyVO" 
    	xmlns:ns6="urn:Contact4SearchWSVO" 
    	xmlns:ns7="urn:ResultsContactVO" 
    	xmlns:ns8="urn:SocieteWSVO">
    ...
    ...
    </ns5:ResultsCompanyVO>
    Je pense que je pêche sur les mapping, schéma XSD, annotations Java, etc... (je n'ai aucun .xsd ou .xml décrivant mes classes java) mais impossible de retrouver mes petits sur les tutoriaux du web.

    Que dois-je faire pour virer ces xmlns en trop dans mon XML généré ?

    Voici mon code :

    bean résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class ResultsCompanyVO {
    	private List<Societe4SearchWSVO> companies;
    	//...
    }
    (j'ai essayé de rajouter des @XmlType(name = "ResultsCompanyVO", namespace = "urn:ResultsCompanyVO") mais ça ne change rien)

    autre bean
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class Societe4SearchWSVO extends WSVO {
    	private long id;
    	private String nom = "";
    	//...
    }
    génération du XML résultat :
    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
    @javax.xml.ws.WebServiceProvider
    @javax.xml.ws.ServiceMode(value = javax.xml.ws.Service.Mode.MESSAGE)
    @BindingType(value=HTTPBinding.HTTP_BINDING)
    public class SocieteWSImpl implements Provider<Source> {
    	private JAXBContext jc;
    	@javax.annotation.Resource(type = Object.class)
    	protected WebServiceContext wsContext;
     
    	private Source post(Source source, MessageContext mc) throws JAXBException {
    		mc.put(MessageContext.HTTP_RESPONSE_CODE, 201);
     
    		Unmarshaller u = jc.createUnmarshaller();
    		JAXBElement o = (JAXBElement) u.unmarshal(source);
    		Societe4SearchWSVO request = (Societe4SearchWSVO) o.getValue();
    			List<Societe4SearchWSVO> response = societeService.getByName4WS(request.getNom());
    			ResultsCompanyVO results = new ResultsCompanyVO();
    			results.setCompanies(response);
    			return new JAXBSource(jc, new ObjectFactory().createResultsCompanyVO(results));
            }
    	}
    ObjectFactory
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    @XmlRegistry
    public class ObjectFactory {
     
        private static final QName WSFAULT_QNAME = new QName("urn:WSProcessingProblem", "WSProcessingProblem");
        private static final QName USER_QNAME = new QName("urn:UserWSVO", "UserWSVO");
        private static final QName SOCIETE4SEARCHWSVO_QNAME = new QName("urn:Societe4SearchWSVO", "Societe4SearchWSVO");
        private static final QName RESULTSCOMPANYVO_QNAME = new QName("urn:ResultsCompanyVO", "ResultsCompanyVO");
        private static final QName CONTACT4SEARCHWSVO_QNAME = new QName("urn:Contact4SearchWSVO", "Contact4SearchWSVO");
        private static final QName RESULTSCONTACTVO_QNAME = new QName("urn:ResultsContactVO", "ResultsContactVO");
        private static final QName SOCIETEWSVO_QNAME = new QName("urn:SocieteWSVO", "SocieteWSVO");
     
     
        /**
         * Create an instance of {@link WSProcessingProblem }.
         * @return WSProcessingProblem
         * 
         */
        public WSProcessingProblem createWSProcessingProblem() {
        	return new WSProcessingProblem();
        }
     
    	/**
         * Create an instance of {@link JAXBElement }{@code <}{@link WSProcessingProblem }{@code >}}.
         * @param value WSProcessingProblem
         * @return JAXBElement
         * 
         */
        @XmlElementDecl(namespace = "urn:WSProcessingProblem", name = "WSProcessingProblem")
        public JAXBElement<WSProcessingProblem> createWSProcessingProblem(WSProcessingProblem value) {
            return new JAXBElement<WSProcessingProblem>(WSFAULT_QNAME, WSProcessingProblem.class, null, value);
        }
     
        /**
         * Create an instance of {@link UserWSVO }.
         * @return UserWSVO
         * 
         */
        public UserWSVO createUserWSVO() {
        	return new UserWSVO();
        }
        /**
         * Create an instance of {@link JAXBElement }{@code <}{@link UserWSVO }{@code >}}.
         * @param value UserWSVO
         * @return JAXBElement
         * 
         */
        @XmlElementDecl(namespace = "urn:UserWSVO", name = "UserWSVO")
        public JAXBElement<UserWSVO> createUserWSVO(UserWSVO value) {
            return new JAXBElement<UserWSVO>(USER_QNAME, UserWSVO.class, null, value);
        }
     
        /**
         * Create an instance of {@link Societe4SearchWSVO }.
         * @return Societe4SearchWSVO
         * 
         */
        public Societe4SearchWSVO createSociete4SearchWSVO() {
        	return new Societe4SearchWSVO();
        }
        /**
         * Create an instance of {@link JAXBElement }{@code <}{@link Societe4SearchWSVO }{@code >}}.
         * @param value Societe4SearchWSVO
         * @return JAXBElement
         * 
         */
        @XmlElementDecl(namespace = "urn:Societe4SearchWSVO", name = "Societe4SearchWSVO")
        public JAXBElement<Societe4SearchWSVO> createSociete4SearchWSVO(Societe4SearchWSVO value) {
            return new JAXBElement<Societe4SearchWSVO>(SOCIETE4SEARCHWSVO_QNAME, Societe4SearchWSVO.class, null, value);
        }
     
        /**
         * Create an instance of {@link ResultsCompanyVO }.
         * @return ResultsCompanyVO
         * 
         */
        public ResultsCompanyVO createResultsCompanyVO() {
        	return new ResultsCompanyVO();
        }
        /**
         * Create an instance of {@link JAXBElement }{@code <}{@link ResultsCompanyVO }{@code >}}.
         * @param value ResultsCompanyVO
         * @return JAXBElement
         */
        @XmlElementDecl(namespace = "urn:ResultsCompanyVO", name = "ResultsCompanyVO")
        public JAXBElement<ResultsCompanyVO> createResultsCompanyVO(ResultsCompanyVO value) {
            return new JAXBElement<ResultsCompanyVO>(RESULTSCOMPANYVO_QNAME, ResultsCompanyVO.class, value);
        }
    }
    sun-jaxws.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0" encoding="UTF-8"?>
    <endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0">
        <endpoint name="SocieteWebService" 
            implementation="com.abw.rest.SocieteWSImpl"  
    		binding="http://www.w3.org/2004/08/wsdl/http"
    		url-pattern='/company/*'/>
    </endpoints>
    web.xml
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
      <display-name>ERP Web Services</display-name>
      <listener>
        <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
      </listener>
      <servlet>
        <display-name>SocieteServiceImpl</display-name>
        <servlet-name>SocieteServiceImpl</servlet-name>
        <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>SocieteServiceImpl</servlet-name>
        <url-pattern>/company/*</url-pattern>
      </servlet-mapping>

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Points : 30
    Points
    30
    Par défaut
    Solution :

    dans le ObjectFactory.java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        private static final QName USER_QNAME = new QName("", "UserWSVO");
     
        @XmlElementDecl(namespace = "", name = "UserWSVO")
        public JAXBElement<UserWSVO> createUserWSVO(UserWSVO value) {
            return new JAXBElement<UserWSVO>(USER_QNAME, UserWSVO.class, null, value);
        }
    Dans les beans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    @XmlType(name = "AffaireWSVO")
    public class AffaireWSVO extends WSVO {
    et les appels :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <AffaireWSVO>
    ...
    ...
    </AffaireWSVO>
    sans avoir de namespace.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 27/03/2015, 18h19
  2. Réponses: 6
    Dernier message: 11/07/2013, 12h04
  3. [XL-2003] macro dans tous les classeur comment les enlever
    Par Patnel dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/04/2009, 08h01
  4. vclskin avec delphi 5/6, comment les installer?
    Par avogadro dans le forum EDI
    Réponses: 1
    Dernier message: 09/05/2006, 19h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo