如何在xslt中使用java并避免出现以下错误:
找不到名为1的参数函数 {的java:com.poc.XSDDateTimeFormatter} toXSD()。对Java的反身调用 Saxon-HE下没有方法,也找不到2个参数 功能命名 {瓮:JAVA:com.poc.NLDataUnitTestTimeCalc} computeTestTime()。自反 Saxon-HE
下无法调用Java方法
computeTestTime
类的 NLDataUnitTestTimeCalc
方法
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; }
<xsl:template match="/Event">
<bus:Timestamp>
<xsl:value-of xmlns:XSDDateTimeFormatter="java:com.amd.pde.integration.XSDDateTimeFormatter"
select="XSDDateTimeFormatter:toXSD( //TimeStamp)"
/>
</bus:Timestamp>
<Event>
<Message>BEGINEXECUTION</Message>
<TimeStamp>20080111000419146</TimeStamp>
<EquipmentID>stack</EquipmentID>
</Event>
答案 0 :(得分:3)
正如错误消息所示,您使用Saxon-HE,但Java中的扩展函数仅受Saxon-PE和Saxon-EE支持。 Saxon-Docs明确提到这一点。
我猜你有两个选择