Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java6中的xerces序列化_Java_Xml Serialization_Xerces - Fatal编程技术网

Java6中的xerces序列化

Java6中的xerces序列化,java,xml-serialization,xerces,Java,Xml Serialization,Xerces,在Java6中,整个XercesXML解析器/序列化程序实现现在都在Java运行时(rt.jar)中。这些包已移动到com.sun.*命名空间下,该命名空间禁止在客户端代码中显式引用它们。这在使用解析器时不是问题,解析器是通过javaxapi定义的工厂实例化的 但是,我们的代码也使用xerces序列化(org.apache.xml.serialize.*)。目前,还没有javax.xml API定义的工厂用于创建序列化程序和OutputFormat的实例。这似乎意味着获得一个API的唯一方法是显

在Java6中,整个XercesXML解析器/序列化程序实现现在都在Java运行时(rt.jar)中。这些包已移动到com.sun.*命名空间下,该命名空间禁止在客户端代码中显式引用它们。这在使用解析器时不是问题,解析器是通过javaxapi定义的工厂实例化的

但是,我们的代码也使用xerces序列化(org.apache.xml.serialize.*)。目前,还没有javax.xml API定义的工厂用于创建序列化程序和OutputFormat的实例。这似乎意味着获得一个API的唯一方法是显式调用com.sun.org.apache.xml.serialize.*API

我在javax.xml.stream中找到了序列化类,但它们似乎没有像xerces OutputFormat类那样提供任何输出格式控制

问题:

有没有一种方法可以通过javax标准API访问xerces序列化功能(rt.jar中的),而不包括xerces.jar,也不显式实例化com.sun.*类


如果没有,是否有一种兼容javaxapi的方法来达到同样的效果?

据我所知,没有官方API可以做到这一点。奇怪的是,JavaXMLAPI仅用于解析XML


但是,您可以使用XML转换API将DOM
文档
写入文件。请参阅。

javax.xml.bind.JAXBContext?如果您试图将对象绑定/序列化到XML,那么JAXB是标准。如果您正在进行原始解析,org.xml.sax和/或org.w3c.dom应该具有您想要的内容


更新:com.javax.transform包应该会有所帮助。看看Transformer示例。

如果您不想引用sun API,可以将Xerces放在认可的目录中。它将取代sun copy/implementation,但是您可以放心地使用API(这是“官方”的方式)

Java内置实现不能很好地控制输出,尽管使用Xerces和API属性可以更好地控制输出,因为API支持传递其他实现可能会发现有用的其他属性。我自己还没有试过最后一个(我只看文档)

编辑(回应评论):如果您想在无法控制底层JDK的环境中使用Xerces,以至于无法为JAXP指定自己的替换API,那么您必须直接引用Xerces(或引用sun包重写)

如果您可以将Xerces放在认可的目录中(或者覆盖认可的设置——坦白说,这在应用服务器中似乎不太可能,尽管我不知道Weblogic的具体情况),那么将属性设置到底层实现的“JDK”方式就是via,它取决于实现可能与之交互


我应该补充一点,如果sun bundles的底层版本足够了,并且如果Weblogic使用它(或者使用自己的Xerces,如果足够的话),那么您在这里可能会很幸运,只要能够传递属性并使其工作。

如果您想要使用未通过官方
java.*
javax.*
API公开的Xerces功能,那么您唯一真正的解决方案就是将Xerces作为第三方库。以任何方式访问Xerces的JRE内部版本都是一件危险的事情,因为没有任何东西可以保证一个有效的JRE甚至拥有这些类(替代JRE,甚至同一JRE的其他版本可能使用不同的实现来实现JAXP API,甚至只是将其移动到另一个包中)。

,我没有将Java对象绑定到XML。这只是关于序列化DOM,除了xerces/xalan序列化API之外,似乎没有任何东西可以提供对输出格式(缩进、空白等)的任何控制。我们将使用认可的目录,但我们正试图让我们的产品能够在WAR/EAR中部署,在具有非常严格的安全要求的WebSphere环境中。在API中,您在哪里看到了将附加属性传递给底层xerces实现的可能性?我现在正在研究转换API。它似乎没有足够的灵活性来指定通过OutputFormat可用的格式,除非它在幕后使用xerces序列化,并且有一种方法可以获取序列化程序的参数。这就是我们开始的地方,也是我们得出的结论。如果您想使用Xerces的非JavaAPI部分(特别是序列化),那么就没有办法包括Xerces。我们确实修改了代码库,删除了系统属性中任何对Xerces类的明确提及,允许它在实例化解析器和转换器时使用默认值。这应该可以防止类加载冲突,因为所有默认值都在com.sun中*