soap_envelope_1__1.故障详细信息节点



我发现了一个类型为 soap_envelope_1__1.Fault 的错误。

当我运行调试模式并得到返回的错误时,我收到以下代码

<soapenv:Fault xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <faultcode>soapenv:Server</faultcode>
    <faultstring>Missing or Invalid Information</faultstring>
    <detail>
        <ns3:sendFault xmlns:ns3="http://thisservice.com/was/v1" xmlns:ns2="http://thisservice.com/pos/v1" xmlns:ns4="http://thisservice.com/lr/v1" xmlns:ns5="http://thisservice.com/dl/v1" xmlns:ns6="http://thisservice.com/ted/v1" xmlns:ns7="http://thisservice.com/header/v1">
            <code>Actual_Code_18</code>
            <info>Bad Information</info>
        </ns3:sendFault>
    </detail>
</soapenv:Fault>

对于我的发送端口,im使用Wcf-BasicHTTPPort,入站消息正文设置为正文,并检查传播错误消息。

在我的编排中,我为 soap_envelope_1__1.Fault 设置了错误。我在示波器形状中的捕获收到错误。在构造消息形状中,我将错误生成的对象构造为我的错误消息:Message_myFault = myFault;

然后我使用 xslt 映射来映射我的错误消息中的代码和信息标记。我的问题是我似乎找不到 INFO 和 CODE 标签的正确 xpath,它们在我的消息中显示为空白,但如果我使用错误代码或错误字符串,它会填充。这是一块: <xsl:value-of select="InputMessagePart_0/s0:Fault/s0:detail/ns6:sendFault/code/text()" />

这是我的样式表标签:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:var="http://schemas.microsoft.com/BizTalk/2003/var" exclude-result-prefixes="msxsl var s2 s0 s1 userCSharp" version="1.0" xmlns:array="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:s0="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns0="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/ABCD" xmlns:ns3="http://schemas.microsoft.com/Sql/2008/05/Types/Tables/dbo" xmlns:s2="http://schemas.microsoft.com/BizTalk/2003/aggschema" xmlns:s1="http://schemas.microsoft.com/Sql/2008/05/TypedPolling/ABC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:userCSharp="http://schemas.microsoft.com/BizTalk/2003/userCSharp" xmlns:ns6="http://thisservice.com/was/v2" xmlns:ns2="http://thisservice.com/pos/v2" >

查看(仅)您的 XML 输入,以下指令:

<xsl:value-of select="/soapenv:Fault/detail/ns3:sendFault/code" />

将返回:

Actual_Code_18

前提是以下命名空间声明在范围内:

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns3="http://thisservice.com/was/v1"

请注意,detail 元素不在命名空间中。

我建议只使用编排xpath()函数,而不是创建一个完整的地图,两个得到这个消息的两小块;就像这样

strCode= xpath(myFault, "string(/*[local-name()='Fault' and namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/']/*[local-name()='detail' and namespace-uri()='']/*[local-name()='sendFault' and namespace-uri()='http://thisservice.com/was/v1']/*[local-name()='code'])");
strInfo= xpath(myFault, "string(/*[local-name()='Fault' and namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/']/*[local-name()='detail' and namespace-uri()='']/*[local-name()='sendFault' and namespace-uri()='http://thisservice.com/was/v1']/*[local-name()='info'])");

这个博客有一些关于你的任务的好信息,可能会有所帮助:http://blogs.msdn.com/b/biztalknotes/archive/2013/02/12/how-to-handle-fault-message-in-biztalk-server.aspx

正确的命名空间原来是:InputMessagePart_0/s1:Fault/detail/ns6:sendFault/code/text()

问题是我在 1_1 错误的详细信息节点中添加了一个命名空间。

最新更新