Changeset 19591
- Timestamp:
- 01/31/12 16:22:27 (4 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Jav_Moz_Wsp/src/eu/scenari/uimoz/services/SvcWspSrcSender.java
r18986 r19591 51 51 import com.scenari.m.co.univers.IWUnivers; 52 52 import com.scenari.s.co.transform.HTransformParams; 53 import com.scenari.serializer.simple.IXmlWriter; 53 54 import com.scenari.src.ISrcNode; 54 55 import com.scenari.src.feature.alternateurl.SrcFeatureAlternateUrl; … … 61 62 import com.scenari.src.feature.uris.SrcFeatureUris; 62 63 64 import eu.scenari.commons.log.ILogMsg.LogType; 63 65 import eu.scenari.commons.log.LogMgr; 64 import eu.scenari.commons.log.ILogMsg.LogType;65 66 import eu.scenari.commons.mime.MimeMgr; 66 67 import eu.scenari.commons.stream.bytes.IBlob; … … 80 81 * Un paramètre "format" spécifie le type de retour. 81 82 * 82 * <h3>Format : JSON (par défaut) </h3>83 * <h3>Format : JSON (par défaut) ou XML</h3> 83 84 * Si plusieurs refUris sont requêtés, l'objet Json racine est un tableau avec autant d'entrées que de refUris 84 85 * demandées et dans le même ordre. … … 180 181 } finally { 181 182 vWriter.close(); 183 } 184 } else if (vFormat.equals("XML")) { 185 //Envoi d'un XML 186 int vDepth = 0; 187 String vDepthStr = pReq.getParameter("depth"); 188 if (vDepthStr != null && vDepthStr.length() > 0) vDepth = Integer.parseInt(vDepthStr); 189 String vTargetsStr = pReq.getParameter("targets"); 190 String[] vTargets = null; 191 if (vTargetsStr != null && vTargetsStr.length() > 0) { 192 vTargets = sTargetSeparator.split(vTargetsStr, 0); 193 } 194 IXmlWriter vXmlWriter = hGetXmlWriterUTF8(pResp, true); 195 try { 196 //Construction des Fields à publier 197 String vFieldKeys = pReq.getParameter("fields"); 198 if (vFieldKeys == null) vFieldKeys = sDefaultFieldKeys; 199 IFieldsCollector vFields = FieldsCollectorBuilder.newFieldsCollector(vFieldKeys); 200 if (vSrcNode == null) { 201 List<ISrcNode> vSrcNodes = vDialog.getSrcNodes(); 202 if (vSrcNodes == null) { 203 sendError500(null, pResp); 204 return; 205 } 206 List<String> vRefUris = vDialog.getParamRefUris(); 207 vXmlWriter.writeOpenTag("list"); 208 for (int i = 0; i < vRefUris.size(); i++) { 209 vSrcNode = vSrcNodes.get(i); 210 if (vSrcNode != null) { 211 vFields.resetDatas(); 212 SrcFeatureFields.fillFields(vSrcNode, vFields); 213 writeFields(vSrcNode, vFields, vXmlWriter, vDepth, vTargets); 214 } else { 215 vXmlWriter.writeEmptyTag("entry"); 216 } 217 } 218 vXmlWriter.writeCloseTag("list"); 219 } else { 220 SrcFeatureFields.fillFields(vSrcNode, vFields); 221 writeFields(vSrcNode, vFields, vXmlWriter, vDepth, vTargets); 222 } 223 } finally { 224 vXmlWriter.close(); 182 225 } 183 226 } else if (vFormat.equals("stream") || vFormat.equals("download")) { … … 357 400 } 358 401 402 protected void writeFields(ISrcNode pNode, IFieldsCollector pFields, IXmlWriter pWriter, int pDepth, String[] pUriTargets) throws Exception { 403 //Serialisation Json 404 pWriter.writeStartTag("entry"); 405 pFields.startIterate(); 406 for (String vKey = pFields.nextDataKey(); vKey != null; vKey = pFields.nextDataKey()) { 407 Object vValue = pFields.getData(vKey); 408 if (vValue != null) { 409 pWriter.writeAttribute(vKey, vValue != null ? vValue.toString() : ""); 410 } 411 } 412 if (pDepth > 0 || isInTagerts(pNode.getSrcUri(), pUriTargets)) { 413 List<ISrcNode> vCh = pNode.listChildrenNodes(null); 414 if (vCh != null && vCh.size() > 0) { 415 pWriter.writeEndOpenTag(); 416 for (ISrcNode vNode : vCh) { 417 try { 418 pFields.resetDatas(); 419 SrcFeatureFields.fillFields(vNode, pFields); 420 writeFields(vNode, pFields, pWriter, pDepth - 1, pUriTargets); 421 } catch (Exception e) { 422 //En cas d'exception, on préfère perdre cet item mais préserver l'accès aux autres items de cet espace. 423 LogMgr.publishException(e, "Build srcFields failed for child : " + vNode.getSrcUri()); 424 } 425 } 426 pWriter.writeCloseTag("entry"); 427 } else { 428 pWriter.writeEndEmptyTag(); 429 } 430 } else { 431 pWriter.writeEndEmptyTag(); 432 } 433 } 434 359 435 protected boolean isInTagerts(String pSrcUri, String[] pTargets) { 360 436 if (pTargets == null) return false;
Note: See TracChangeset
for help on using the changeset viewer.