Mi aplicación compone un modelo de página web a partir de una cantidad de fuentes xml. Estas fuentes se analizan en la memoria como objetos DOM con el analizador Xerces normal. Desafortunadamente, los objetos Xerces DOM son no hilo seguro para operaciones de solo lectura. Me gustaría poder reutilizar el DOM analizado para leer. ¿Alguien sabe de otro analizador sintáctico o de un hilo seguro para leer la implementación de DOM que uso?Crear un DOM que sea seguro para las operaciones de lectura
5
A
Respuesta
0
No conozco ninguna solución perfecta y simple.
Una idea podría ser recrear el Dom utilizando objetos seguros para subprocesos.
En este caso, serían preferiblemente inmutables, ya que está leyendo solamente. Ser inmutable también abre la posibilidad de otras mejoras (por ejemplo, el intercambio de instancias, que reduciría la huella de memoria).
deseo que podría sugerir una biblioteca que hace esto, ya que es una buena cantidad de codificación ...
4
Saxon ofrece envolturas DOM a su estructura interna de datos e inmutable.
// create Saxon IdentityTransformer
final Transformer transformer = new TransformerFactoryImpl().newTransformer();
// set up holder for the output
final TinyBuilder outputTarget = new TinyBuilder(
new PipelineConfiguration(new Configuration()));
// transform into Saxon's immutable TinyTree
transformer.transform(xml, outputTarget);
// extract the whole XML as TinyNode
final TinyNodeImpl tinyNode = outputTarget.getTree().getNode(0);
// wrap TinyNode as DOM
final NodeOverNodeInfo nodeOverNodeInfo = DocumentOverNodeInfo.wrap(tinyNode);
// cast to DOM
final Document doc = (Document) nodeOverNodeInfo;
(probado con Saxon-él 9.5.1)
Cuestiones relacionadas
- 1. ¿Cómo configura un DateTimePicker para que sea de solo lectura?
- 2. Crear un DOM NodeList
- 3. Hacer que un método de actividad android sea seguro
- 4. ¿Este código es seguro para subprocesos? ¿Cómo puedo hacer que sea seguro para subprocesos?
- 5. Cómo hacer que Java.util.Date sea seguro para subprocesos
- 6. ¿Cómo crear un hash que sea similar para entradas similares?
- 7. ¿Es posible hacer que Oauth sea seguro en iOS?
- 8. ¿Es seguro mezclar cerraduras y operaciones de interbloqueo?
- 9. Cómo crear un hilo seguro EntityManagerFactory?
- 10. Opciones para hacer que el hilo ByteBuffer de Java sea seguro
- 11. ¿La forma más simple de hacer que todo un método sea seguro para subprocesos?
- 12. ¿Es necesario que un método organizado en el subproceso de UI sea seguro para subprocesos?
- 13. ¿Cómo diseñar la autenticación en un cliente grueso para que sea seguro?
- 14. Cómo hacer que boost asio fork sea seguro
- 15. ¿Cómo se recomienda utilizar el método de eliminación de contentResolver para que sea seguro para las inyecciones?
- 16. Boost :: Asio operaciones de lectura/escritura
- 17. ¿El proxy inverso hace que node.js sea seguro?
- 18. Comprensión de loff_t * offp para las operaciones de archivo
- 19. Cómo hacer que mi código sea más seguro
- 20. ¿Cómo puedo hacer que un fallo predeterminado sea seguro para los clientes no habituales?
- 21. Directrices para probar el código multiproceso o asegurarse de que el código sea seguro para subprocesos
- 22. Subversion: ¿es posible deshabilitar todas las confirmaciones y hacer que el repositorio solo sea de lectura?
- 23. ¿La asignación de referencia y la lectura de operaciones atómicas?
- 24. Razones para que un IBOutlet sea nulo
- 25. ¿Está leyendo un doble que no es seguro para subprocesos?
- 26. Lectura de un gran archivo XML usando stax y dom
- 27. ¿Es posible crear un Uri que no sea absoluto?
- 28. ¿Cómo puedo crear un entorno seguro Lua?
- 29. SQL de las operaciones
- 30. ¿Es posible crear un HashMap que sea Parcelable en Android?