【问题标题】:soap_envelope_1__1.Fault detail nodesoap_envelope_1__1.故障细节节点
【发布时间】:2015-05-01 07:19:43
【问题描述】:

我遇到了 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>

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

在我的编排中,我为soap_envelope_1__1.Fault 设置了故障。 我在范围形状中的捕获接收到错误。 在构造消息形状中,我构造了由故障生成的对象到我的故障消息:Message_myFault = myFault;

然后我使用 xslt 映射来映射故障消息中的代码和信息标签。我的问题是我似乎无法为 INFO 和 CODE 标签找到正确的 xpath,它们在我的消息中显示为空白,但如果我使用 faultcode 或 faultstring 它会填充。 继承人:&lt;xsl:value-of select="InputMessagePart_0/s0:Fault/s0:detail/ns6:sendFault/code/text()" /&gt;

这是我的样式表标签:

<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 xslt biztalk


    【解决方案1】:

    查看(仅)您的 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 元素不在命名空间中。

    【讨论】:

      【解决方案2】:

      我建议只使用 Orchestration 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

      【讨论】:

        【解决方案3】:

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

        问题是我在 1_1 故障的详细节点中添加了一个命名空间。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-11-22
          • 2013-12-30
          • 1970-01-01
          • 1970-01-01
          • 2021-05-27
          • 2015-12-05
          • 2013-06-16
          • 1970-01-01
          相关资源
          最近更新 更多