Bonjour à tous,
Voilà j'utilise AXIS depuis peu. J'ai créé un webservice qui a pour vocation d'exposer des données provenant d'une base de données oracle.
Par exemple, une des méthodes que l'on peut invoquer sur mon webservice est :
WSResultSet getCommunes(String codeCentre);
ou WSResultSet est une classe contenant un tableau de tableau contenant les résultats, un tableau contenant le nom des colonnes et le type de leur données.
J'arrive à un moment ou le volume des résultats fournis par le service web est assez énorme, puisque les réponses sont encapsulée dans un SOAPMessage structuré à partir de balises XML.
Voici un exemple de réponse du serveur à l'invocation de ma méthode getCommunes
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlnssd="http://www.w3.org/2001/XMLSchema" xmlns
si="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<ns1:getCommunesInCentreResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="urn:WSBDP">
<getCommunesInCentreReturn href="#id0"/>
</ns1:getCommunesInCentreResponse>
<multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns2:WsBdpResultSet" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2="urn:WSBDP">
<colmetadatas soapenc:arrayType="ns2:WsBdpResultSetColumnMetaData[4]" xsi:type="soapenc:Array">
<colmetadatas href="#id1"/>
<colmetadatas href="#id2"/>
<colmetadatas href="#id3"/>
<colmetadatas href="#id4"/>
</colmetadatas>
<request xsi:type="xsd:string">SELECT distinct eco.ID_SIG,eco.NOM, eco.CODE_INSEE1,eco.CODE_AGGLOMERATION FROM APP_WEBDIRAC_BT.E_Poste_electrique epe, APP_WEBDIRAC_BT.E_COMMUNE eco WHERE epe.CENTRE=? AND epe.E_COMMUNE=eco.ID_SIG order by eco.NOM</request>
<results soapenc:arrayType="xsd:anyType[][1031]" xsi:type="soapenc:Array">
<results soapenc:arrayType="xsd:anyType[4]" xsi:type="soapenc:Array">
<results xsi:type="soapenc:decimal">6022</results>
<results xsi:type="soapenc:string">ABAINVILLE</results>
<results xsi:type="soapenc:string">55001</results>
<results xsi:type="soapenc:string">Zone EDF à caractère rural</results>
</results>
<results soapenc:arrayType="xsd:anyType[4]" xsi:type="soapenc:Array">
<results xsi:type="soapenc:decimal">6027</results>
<results xsi:type="soapenc:string">ABAUCOURT HAUTECOURT</results>
<results xsi:type="soapenc:string">55002</results>
<results xsi:type="soapenc:string">Zone EDF à caractère rural</results>
</results>
J'aimerais arriver à réduire la taille de cette réponse, sans trop perdre en performance concernant la deserialisation. (Notamment pouvoir retirer results xsi:type="soapenc:string" dans la réponse serait pas mal)
Je ne sais pas comment procéder, faut-il :
(1) implémenter de nouveaux serializer/deserializer dédié à mon objet WSResultSet ?
dans quel cas j'éviterais peut être un balisage inutile pour une array d'array ...
(2) Utiliser un outil de compression des flux xml ?
(3) Désactiver la validation xml des messages SOAP ?
Comme je suis nouveau, j'ai énormément de mal à trouver des documentations, des exemples et tutoriels pour les 3 méthodes citées, pour peu qu'elles soient envisageable ...
Auriez-vous déjà rencontré ce genre de problème ? Quelles solutions ?
Partager