【问题标题】:Getting error DOM Level 3 Not implemented after removing xalan.jar删除 xalan.jar 后出现错误 DOM 级别 3 未实现
【发布时间】:2016-04-01 09:53:20
【问题描述】:

我的项目中有一个奇怪的问题,比如我在 web 服务调用程序中遇到错误

ERROR:  'DOM Level 3 Not implemented

在我的本地机器上使用 JAVA 1.6.0_45 运行时。从我的项目中删除 XALAN.jar 之后。 在我替换的一堂课中

import org.apache.xml.utils.QName;

import javax.xml.namespace.QName; //its from jaxrpc.jar

尝试应用转换时出现错误

TransformerFactory xf = TransformerFactory.newInstance();

        try {
            Document responseDocument = (Document) object.newDomNode(options);

            Transformer xformer = xf.newTransformer();
            xformer.setOutputProperty(OutputKeys.METHOD, "xml");
            xformer.setOutputProperty(OutputKeys.INDENT, "yes");
            xformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");

            StringWriter writer = new StringWriter();
            Result out = new StreamResult(writer);

            if (!xmlEscape) {
                ProcessingInstruction pi = responseDocument
                        .createProcessingInstruction(
                                Result.PI_DISABLE_OUTPUT_ESCAPING, "");
                responseDocument
                        .getDocumentElement()
                        .getParentNode()
                        .insertBefore(pi, responseDocument.getDocumentElement());
            }

            xformer.transform(new DOMSource(responseDocument), out);

            // remove the <![CDATA[ before returning the response
            return removeCdata(writer.getBuffer().toString());
        } catch (TransformerConfigurationException e) {
            throw new XMLSchemaException(
                    "Unable to generate request message due to " + e);
        } catch (IllegalArgumentException e) {
            throw new XMLSchemaException(
                    "Unable to generate request message due to " + e);
        } catch (TransformerException e) {
            throw new XMLSchemaException(
                    "Unable to generate request message due to " + e);
        }

错误发生在一行

xformer.transform(new DOMSource(responseDocument), out);

如有任何帮助,我们将不胜感激。

EDIT:这个错误的主要原因是

TransformerFactory xf = TransformerFactory.newInstance();

返回weblogic.xml.jaxp.RegistrySAXTransformerFactory@16849e2a的实例

而不是

com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl

它是 JAVA 6 中transformerfactory 的默认实例。

【问题讨论】:

    标签: java dom soap transform


    【解决方案1】:

    做了一个临时补丁来解决这个问题,将其转换为 DOM3 编译器。而实际的解决方案是停止使用 xecers,xbean。

    Document responseDocument = (Document) object.newDomNode(options);
    DocumentBuilder builder = DocumentBuilderFactory.newInstance()
                        .newDocumentBuilder();
                Document doc3 = builder.newDocument();
                Element newRoot = (Element) doc3.importNode(
                        responseDocument.getDocumentElement(), true);
                doc3.appendChild(newRoot);
    

    对于传递新 doc3 的变换方法

    xformer.transform(new DOMSource(doc3), out);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多