BizTalk 2020 Saxon XSLT 3.0 转换异常
Posted
技术标签:
【中文标题】BizTalk 2020 Saxon XSLT 3.0 转换异常【英文标题】:BizTalk 2020 Saxon XSLT 3.0 Transformation exception 【发布时间】:2021-01-01 01:32:55 【问题描述】:我正在尝试进行概念验证以使用 saxon xslt 3.0 运行 BizTalk 地图 有一种方法,我们可以使用自定义扩展(xml)扩展对象来执行方法。
我正在关注此链接,但在执行 TestMap
时出现错误Saxon 变换的扩展类 Test.TestMethod 无效,其类型应为“ExtensionFunction”或“ExtensionFunctionDefinition”
BizTalk Server 2020: A review of the new XSLT 3.0 & Custom Transform Features: Custom Engine Options (social.technet.microsoft.com)
自定义扩展 xml
<ExtensionObjects>
<ExtensionObject Namespace="http://schemas.microsoft.com/BizTalk/2003/ScriptNS0" AssemblyName="Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=11f992b93de945f2,processorArchitecture=MSIL" ClassName="Test.TestMethod" /></ExtensionObjects>
自定义扩展 xml 文件中是否缺少任何内容? 我不确定这里出了什么问题。
注意:在 BizTalk 2020 中部署应用程序后,我在运行时遇到同样的错误
【问题讨论】:
您的代码看起来如何?你实现ExtensionFunctionDefinition
和ExtensionFunctionCall
了吗?并且不应该ClassName="Test.TestMethod"
而是命名例如ClassName="MyNamespace.MyExtensionClass"
?但后者取决于你的代码看起来如何,所以在你的问题中显示出来。
@MartinHonnen :是的,我尝试使用相同的示例 --CSharpExtension 类来实现(ExtensionFunctionDefinition 和 ExtensionFunctionCall)。在该示例链接中,您是否将 MyExtensionClass 称为“ExtensionFunctionDefinition”?
不,实现ExtensionFunctionDefinition
的类例如从示例中它是CSharpExtensions.Sqrt
。在该示例中,CSharpExtensions
是命名空间,Sqrt
是该命名空间中实现 ExtensionFunctionDefinition
的类的名称。
是的,我已经用c#实现了。只是使用了不同的类和方法名。其余都一样
【参考方案1】:
不需要添加扩展对象。 测试地图并运行 saxon xslt 3.0,但您无法从 VS 调试 xslt。
按照这个操作:
-
转到
c:\Program Files (x86)\Microsoft BizTalk Server\Developer Tools\CustomTransform.xml
复制TypeAssemblyQualifiedName
的值
打开 regedit.exe 并在以下注册表中创建字符串值“XsltEngine”:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\BizTalk Server\3.0\Configuration
32 位主机实例:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\BizTalk Server\3.0\Configuration
-
粘贴
TypeAssemblyQualifiedName
的值作为值
重启服务器
【讨论】:
【参考方案2】:如果您仍然需要这方面的帮助,请在 MSDN Q&A Logic Apps 论坛上发布请求。
【讨论】:
以上是关于BizTalk 2020 Saxon XSLT 3.0 转换异常的主要内容,如果未能解决你的问题,请参考以下文章
Saxon 中的 BaseUri 在尝试编译 xslt 内容时导致问题
BizTalk Server 2016 映射中是不是支持 XSLT 2.0 或 3.0?