如何在 xslt 中使用 java

how to use java in xslt

如何在 xslt 中使用 java 并避免以下错误:

Cannot find a 1-argument function named {java:com.poc.XSDDateTimeFormatter}toXSD(). Reflexive calls to Java methods are not available under Saxon-HE and Cannot find a 2-argument function named {urn:java:com.poc.NLDataUnitTestTimeCalc}computeTestTime(). Reflexive calls to Java methods are not available under Saxon-HE

computeTestTime NLDataUnitTestTimeCalc 的方法 class

public static long computeTestTime( String startDateStr, String endDateStr) {

  long testTime= 0;
  long longStartDate= 0;
  long longEndDate= 0; 

  for( String format: formats) {
     try {
        SimpleDateFormat formatter = new SimpleDateFormat(format);

        Date startdate = formatter.parse(startDateStr);
        Date enddate = formatter.parse(endDateStr);
        longStartDate=startdate.getTime();
        longEndDate=enddate.getTime();
        testTime = (Math.abs(longEndDate-longStartDate)/1000);
        break; 
     }
     catch (ParseException ex) {
        //ignore
     }
  }
  return testTime; 

}

toXSD method of XSDDateTimeFormatter class

public static String toXSD( String dateStr) {
  for( String format: formats) {
     try {
        Date date = new SimpleDateFormat( format).parse( dateStr);
        String xsd = new SimpleDateFormat( XSDdateTimeFormat).format( date);

        //special case for xsd:dateTime timezone format
        return 
                xsd.substring(0, xsd.length() - 2) + 
                ':' +
                xsd.substring(xsd.length() - 2);
     } catch (ParseException ex) {
        //ignore
     }
  }

  return dateStr;   }

xslt

<xsl:template match="/Event">

        <bus:Timestamp> 
          <xsl:value-of                   xmlns:XSDDateTimeFormatter="java:com.amd.pde.integration.XSDDateTimeFormatter"
              select="XSDDateTimeFormatter:toXSD( //TimeStamp)"
           />   
        </bus:Timestamp>

样本xml

<Event>   
<Message>BEGINEXECUTION</Message>
<TimeStamp>20080111000419146</TimeStamp>
<EquipmentID>stack</EquipmentID>
</Event>

正如错误消息所说,您使用 Saxon-HE,但 Java 中的扩展函数仅受 Saxon-PE 和 Saxon-EE 支持。 Saxon-Docs 明确提到了这一点。

我猜你有两个选择

  • 购买 Saxon-PE 或 Saxon-EE
  • 在 XSL 中实现您的功能