Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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
Java 配置xmlstants.html#FEATURE(安全)处理时XSLT和FOP出现问题_Java_Xml_Xslt_Xsl Fo_Apache Fop - Fatal编程技术网

Java 配置xmlstants.html#FEATURE(安全)处理时XSLT和FOP出现问题

Java 配置xmlstants.html#FEATURE(安全)处理时XSLT和FOP出现问题,java,xml,xslt,xsl-fo,apache-fop,Java,Xml,Xslt,Xsl Fo,Apache Fop,我在使用XSLFO和XSLT从Java对象生成PDF时遇到了一个问题: 我有以下代码: TransformerFactory.newInstance("org.apache.xalan.processor.TransformerFactoryImpl", Thread.currentThread().getContextClassLoader()); templates = factory.newTemplates(new StreamSource(Pdf

我在使用XSLFO和XSLT从Java对象生成PDF时遇到了一个问题:

我有以下代码:

TransformerFactory.newInstance("org.apache.xalan.processor.TransformerFactoryImpl",
                    Thread.currentThread().getContextClassLoader());
templates = factory.newTemplates(new StreamSource(PdfGenerator.class.getResourceAsStream(ORDERS_XSL)));
FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
Source src = getSourceForCommandList(commandeList);
try {
        Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out);

        Result res = new SAXResult(fop.getDefaultHandler());

        templates.newTransformer().transform(src, res);
    } finally {
        out.flush();
    }
我的xslt使用fo命名空间:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.1"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:fo="http://www.w3.org/1999/XSL/Format">



    <xsl:template match="orders">
        <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
            <fo:layout-master-set>
                <fo:simple-page-master master-name="simpleA4"
                    page-height="29.7cm" page-width="21cm" margin-top="2cm"
                    margin-bottom="1cm" margin-left="0.5cm" margin-right="0.5cm">
                    <fo:region-body />
                </fo:simple-page-master>
            </fo:layout-master-set>
            <xsl:apply-templates select="order" />
        </fo:root>
    </xsl:template>
    ...
    </xsl:template>
</xsl:stylesheet>

问题是因为加载了xalan TransformerFactory实现,而不是JDK的嵌入式实现com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl

我将xalan排除在依赖项之外:

        <exclusions>
            <exclusion>
                <artifactId>xalan</artifactId>
                <groupId>xalan</groupId>
            </exclusion>
        </exclusions>

沙兰
沙兰

它起作用了

只是一个建议,是否可以在SAXResult中设置
格式化对象
的名称空间和前缀。我想象你操纵了这个物体的属性。。。祝你好运:-)
        <exclusions>
            <exclusion>
                <artifactId>xalan</artifactId>
                <groupId>xalan</groupId>
            </exclusion>
        </exclusions>