Saxon 9.3 (PE) から最新バージョンに切り替えています。拡張関数を使用しています (「extends ExtensionFunctionDefinition」を使用)
次のように定義された引数があります
public SequenceType[] getArgumentTypes() {
return new SequenceType[] {SequenceType.ANY_SEQUENCE, SequenceType.ANY_SEQUENCE, SequenceType.NODE_SEQUENCE, SequenceType.SINGLE_STRING};
}
XSLt では、たとえば最初の引数の変数を使用して呼び出しが行われます。これは構築された XML セクションです。
<xsl:variable name="graphXML">
<CHART>
<xsl:attribute name="FORMAT">PNG</xsl:attribute>
<xsl:attribute name="HEIGHT">
...
</xsl:variable>
お電話にて、
private static class GrapheurCall extends ExtensionFunctionCall {
private static final long serialVersionUID = 1L;
@Override
public Sequence call(XPathContext context, Sequence[] arguments) throws XPathException {
ExtensionFunctionCall インターフェイスが変更されたため、コードを変更する必要がありました (以前は、
public SequenceIterator call(SequenceIterator[] arguments, XPathContext context) throws XPathException { ...
)
私は今2つの問題を抱えています:
1) パラメータの型が SequenceIterator から Sequence に変更されました。そのような
NodeInfo dataNode = (NodeInfo) arguments[0].next();
使えなくなり、
NodeInfo dataNode = (NodeInfo) arguments[0];
実行時エラーが発生する
net.sf.saxon.value.SingletonItem cannot be cast to net.sf.saxon.om.NodeInfo
ただし、受け取ったオブジェクトは TinyTree です (実行時に行われるデバッグによる)。
2) 戻り値も異なります (SequenceIterator から Sequence へ) 以前は new ListIterator(saxon_result); を返していました。
これはもう不可能です (saxon_result は java.util.ArrayList です) そして、ここで、ArrayList をシーケンスとして送り返す方法がわかりません...
知識のある人はこれに光を当てることができますか? ありがとう!ファビアン