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é :
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.
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>
Que dois-je faire pour virer ces xmlns en trop dans mon XML généré ?
Voici mon code :
bean résultat
(j'ai essayé de rajouter des @XmlType(name = "ResultsCompanyVO", namespace = "urn:ResultsCompanyVO") mais ça ne change rien)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public class ResultsCompanyVO { private List<Societe4SearchWSVO> companies; //... }
autre bean
génération du XML résultat :
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 = ""; //... }
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 @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)); } }
sun-jaxws.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
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); } }
web.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>
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>
Partager