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:
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:
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:
1 2 3 4 5
| public class Societe4SearchWSVO extends WSVO {
private long id;
private String nom = "";
//...
} |
génération du XML résultat :
Code:
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:
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:
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:
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> |