私はパラメータとして渡すJavaインスタンス上でメソッドを呼び出す必要があります。これまでは、XSLT自体にインスタンスを作成するだけで、動作させることができます。私は渡されたインスタンス上で、それを呼び出そうとした場合には、XSLTに渡されたJavaインスタンスのメソッドを呼び出すにはどうすればよいですか?
Exception in thread "main" javax.xml.transform.TransformerConfigurationException:
Cannot find external method 'Test.get' (must be public).
で失敗し、私は(それがのtoStringとして出てくる)のインスタンスは、それを出力して[OK]を渡されていることを証明することができます。ここに私のJavaです:
public class Test {
public static void main(String[] args) throws Exception {
Transformer transformer = TransformerFactory.newInstance()
.newTransformer(
new StreamSource(Test.class.getResourceAsStream("test.xsl")));
transformer.setParameter("test1", new Test());
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
transformer.transform(new StreamSource(
new ByteArrayInputStream(
"<?xml version=\"1.0\"?><data></data>".getBytes())),
new StreamResult(outputStream));
System.out.println(outputStream.toString());
}
public String get() {
return "hello";
}
@Override
public String toString() {
return "An instance of Test";
}
}
、ここでは私のXSLです:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:test="xalan://Test"
exclude-result-prefixes="test"
>
<xsl:param name="test1" />
<xsl:variable name="test2" select="$test1"/>
<xsl:variable name="test3" select="test:new()"/>
<xsl:template match="/">
<data>
<!-- proves that the instance is really being passed -->
<xsl:value-of select="$test1"/>
</data>
<data>
<!-- first two do not work -->
<!--<xsl:value-of select="test:get($test1)"/>-->
<!--<xsl:value-of select="test:get($test2)"/>-->
<!-- this one does work -->
<xsl:value-of select="test:get($test3)"/>
</data>
</xsl:template>
</xsl:stylesheet>
誰もが、私は渡されたパラメータで、この作品を作ることができる方法を知っていますか?私の実際のユースケースでは、XSLTでインスタンシエートすることはできません。ありがとう。このライン作業を取得するために
あなたが使用しているXSLTプロセッサ言う必要があります。 JAXP APIは、XSLTからJavaへの呼び出しのメカニズムを定義しておらず、規約はJAXP APIを実装するプロセッサによって異なります。 –
@Michael Kay私はJava 8を使用していますが、Xalanをピックアップしているようです –
残念ながら、私はXalanを手伝ってはいけません。 –