En Java 6, toda la implementación del xerces XML parser/serializer está ahora en el tiempo de ejecución de Java (rt.jar). Los paquetes se han movido debajo del espacio de nombres com.sun. *, Lo que los hace fuera de los límites de referencia explícita dentro del código del cliente. Esto no es un problema cuando se usa el analizador sintáctico, que se crea una instancia a través de fábricas definidas por la API javax.serialización de xerces en Java 6
Sin embargo, nuestro código también utiliza la serialización xerces (org.apache.xml.serialize. *). AFAICT, no hay fábricas definidas por API javax.xml para crear instancias de Serializer y OutputFormat. Esto parece implicar que la única forma de obtener uno es llamar explícitamente a las API com.sun.org.apache.xml.serialize. *.
He encontrado las clases de serialización en javax.xml.stream, pero no parecen proporcionar ningún control de formato de salida como la clase xerces OutputFormat.
Pregunta:
¿Hay una manera de acceder a la funcionalidad de serialización xerces (que es en rt.jar) a través de una API estándar javax, sin incluir xerces.jar y también sin crear instancias explícitamente com. sol. * clases?
Si no es así, ¿existe una forma compatible con javax API para lograr el mismo efecto?
Aquí es donde comenzamos, y es la conclusión a la que hemos llegado también. Si desea utilizar las partes de Xerces que no son de Java-Java (específicamente la serialización), no hay forma de que incluya Xerces. Modificamos nuestra base de código para eliminar cualquier mención explícita de las clases Xerces en las propiedades del sistema, permitiéndole usar los valores predeterminados al crear instancias de analizadores y analizadores. Esto debería evitar conflictos de carga de clases ya que todos los valores predeterminados están en com.sun. * –