2012-10-10 4 views
0

저는 C# 코드에서 IKVM과 함께 Apache FOP를 사용하고 있습니다. xslt 스타일 시트를 사용하여 xsl fo와 같은 결과를 얻는 방법으로 pdf 파일을 생성합니다. 하나의 문제, 즉 사용자 정의 함수를 사용하고 있습니다. 내 스타일 선언 :xall에 대한 xalan 및 사용자 정의 함수

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:fo="http://www.w3.org/1999/XSL/Format" 
       xmlns:cal="xalan://m.test" 
       extension-element-prefixes="cal" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.w3.org/2001/XMLSchema-instance http://www.xmlblueprint.com/documents/fop.xsd"> 

사용자 정의 기능 :

namespace m 
{ 
    public class test 
    { 
     public static string zzz(ExpressionContext x, object d) 
     { 
      return "test"; 
     } 
    } 
} 

그리고 XSLT에서이 전화 :

<xsl:value-of select="cal:zzz(1)"/> 

코드하는 컴파일하기 :

FopFactory fopFactory = FopFactory.newInstance(); 
      fopFactory.ignoreNamespace("http://www.w3.org/2001/XMLSchema-instance"); 
      fopFactory.setUserConfig(new File("fop.xconf")); 

      OutputStream o = new DotNetOutputMemoryStream(); 

      try 
      { 
       Fop fop = fopFactory.newFop("application/pdf", o); 

       TransformerFactory factory = TransformerFactory.newInstance(); 

       Source xsltSrc = new StreamSource(new File("data.xsl")); 
       Transformer transformer = factory.newTransformer(xsltSrc); 

       var bytes = System.IO.File.ReadAllBytes("data.xml"); //"HR_CV.fo"); 
       var stream = new DotNetInputMemoryStream(new System.IO.MemoryStream(bytes)); 

       Source src = new StreamSource(stream); 

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

       transformer.transform(src, res); 
      } 
      finally 
      { 
       o.close(); 
      } 

Exceptio n got : java.lang.NoSychMethodExtension : 확장 기능을 위해 메소드 org.apache.xml.utils.NodeVector.zzz ([ExpressionContext,])를 찾을 수 없습니다.

내가 잘못하고있는 것은 무엇입니까?

답변

0

당신은 하나의 인수 (1)로 zzz 함수를 호출하고 있습니다. 그러나 당신의 기능은 두 가지 주장을 기대합니다. 두 인수를 모두 제공하면 성공할 가능성이 있습니다.