从使用fop的xslt调用java方法时遇到问题

时间:2015-04-07 15:20:15

标签: java xslt apache-fop

我正在使用fop将xml转换为pdf,所以为此我编写了一个xslt代码。 在相同的xslt中,我使用了java代码,但不知怎的,我得到一个错误,声明nosuchmethodexception:找不到方法org.apache.xml.utils.NodeVector.input([ExpressionContext,])。

但我的java代码是用户定义的代码,它位于不同的包中。

我的xml具有local_curr属性。

我的java类名是XMLData。 包是com.pdf Java Method是输入,它接受String值并返回String

xslt代码:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"
    xmlns:java="com.pdf.XMLData">


    <xsl:output method="xml" indent="yes" />
    <xsl:template match="/">

        <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
            <!-- Defining Page Layout -->
            <fo:layout-master-set>
                <fo:simple-page-master master-name="A3-portrait"
                    page-height="29.7cm" page-width="40.0cm" margin="2cm">
                    <fo:region-body margin-bottom="20mm" />

                </fo:simple-page-master>
            </fo:layout-master-set>
            <fo:page-sequence master-reference="A3-portrait">

                <fo:flow flow-name="xsl-region-body">

                    <fo:table table-layout="fixed" width="100%" border-width="1mm"
                        border-collapse="separate">
                             <fo:table-row>
                                    <fo:table-cell background-color="#F79F81"
                                                border-width="0.1mm" border-style="solid">
                                                <fo:block wrap-option="wrap" font-size="15pt"
                                                    padding="5pt" text-align="right">

                                                    <xsl:value-of select="java:input(@local_curr)" />
                                                </fo:block>
                                            </fo:table-cell>
                                                                                          </fo:table-row>
                                              </fo:table>
                                              </fo:flow>
                                              </fo:page-sequence>
                                              </fo:root>
                                              </xsl:template>
                                                                                           </xsl:stylesheet>

2 个答案:

答案 0 :(得分:0)

问题是@local_curr可能不会返回java方法所期望的类型。

您需要将其解析为例如字符串

<xsl:value-of select="java:input(string(@local_curr))" />

或作为数字

<xsl:value-of select="java:input(number(@local_curr))" />

抛出NoSuchMethodException因为没有找到给定类型作为参数的方法。

答案 1 :(得分:0)

感谢您的帮助。 它已经解决了。实际上我必须在fop的批处理文件中添加我的jar文件,这解决了我的问题。

...谢谢