Camel-fop无法与ServiceMix 5.4.0一起正常运行 - 创建XSL-FO时出错

时间:2015-06-02 17:07:33

标签: eclipse xslt apache-camel xalan apache-servicemix

我尝试使用ServiceMix的camel-fop。 我在Eclipse中做了一个路径,在Eclipse中测试它 - 一切都很好。

但是在ServiceMix中部署之后我得到了错误: “javax.xml.transform.TransformerException:org.apache.fop.fo.ValidationException:Element”fo:simple-page-master“缺少必需属性”master-name“

这是xsl-fo(来自ServiceMix日志)的一部分 - 不正确的一个:

char

.....

如你所见 - 很多人都迷失了。

当我尝试通过Eclipse获取它时,这是正确的:

varchar

...

非常感谢任何帮助!

这是我的xsl:

<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:fox="http://xml.apache.org/fop/extensions">
<fo:layout-master-set>
<fo:simple-page-master>
<fo:region-body/>
</fo:simple-page-master>
<fo:simple-page-master>
<fo:region-body/>
</fo:simple-page-master>
<fo:page-sequence-master>
<fo:repeatable-page-master-alternatives>
<fo:conditional-page-master-reference/>
<fo:conditional-page-master-reference/>
</fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>
</fo:layout-master-set>
<fo:page-sequence>
<fo:flow>
<fo:block>
<fo:block>
<fo:inline/>
</fo:block>
</fo:block>
<fo:block>

和xml:

<?xml version="1.0" encoding="UTF-8"?><fo:root xmlns:fox="http://xml.apache.org/fop/extensions" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="first" margin-right="0.8cm" margin-left="0.8cm" margin-bottom="1.0cm" margin-top="1.5cm" page-width="29.7cm" page-height="21cm">
<fo:region-body margin-bottom="0.5cm" margin-top="0cm"/>
</fo:simple-page-master>
<fo:simple-page-master master-name="rest" margin-right="0.8cm" margin-left="0.8cm" margin-bottom="1.0cm" margin-top="1.5cm" page-width="29.7cm" page-height="21cm">
<fo:region-body margin-bottom="0.5cm" margin-top="0cm"/>
</fo:simple-page-master>
<fo:page-sequence-master master-name="document">
<fo:repeatable-page-master-alternatives>
<fo:conditional-page-master-reference page-position="first" master-reference="first"/>
<fo:conditional-page-master-reference page-position="rest" master-reference="rest"/>
</fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>
</fo:layout-master-set>

1 个答案:

答案 0 :(得分:1)

找到了解决方案!

http://camel.apache.org/xslt(部分关于使用XSLT和Java版本的注释)中说:

  1. 在路由中使用transformerFactory选项(&#34; xslt:my-transformer.xsl?transformerFactory = tFactory&#34;),并在spring = context#4; org的spring上下文中定义了bean的tFactory bean。 apache.xalan.xsltc.trax.TransformerFactoryImpl&#34;
  2. 将Xalan jar添加到我的maven pom中。
  3. 正如我上面所说,我使用它 - 没有成功:&#34; org.apache.camel.ResolveEndpointFailedException:无法解析端点:xslt:// classpath:xslt / m11.xsl?transformerFactory = tFactory由于: Translet类已加载,但无法创建translet实例。&#34;

    但经过一些研究,我发现xalan有两种不同的TransformerFactoryImpl:

    一个。 org.apache.xalan.xsltc.trax.TransformerFactoryImpl - 这是Translet的JAXP1.1 TransformerFactory的实现。&#34;这个类构建了编译的模板对象。

    B中。 org.apache.xalan.processor.TransformerFactoryImpl - 这是&#34; TransformerFactoryImpl,它实现了TRaX TransformerFactory接口,将XSLT样式表处理成一个Templates对象(StylesheetRoot)。&#34;并且此工厂构建模板对象,这些对象被解释为处理传入的XML文档。 (见https://developer.jboss.org/thread/173303

    所以相反:

    <bean id="tFactory" class="org.apache.xalan.xsltc.trax.TransformerFactoryImpl" />
    

    我用过:

     <bean id="tFactory" class="org.apache.xalan.processor.TransformerFactoryImpl" />
    

    现在我已经在ServiceMix 5.4.0上启动了我的骆驼路线,并且我已经获得了正确的pdf文档。