【问题标题】:SOAP request is returned when used headers in logging在日志记录中使用标头时返回 SOAP 请求
【发布时间】:2018-09-29 07:35:31
【问题描述】:

Ashish 又来了。

我开发了一个路由来解析传入的 SOAP 请求并记录请求中的一些信息。 我使用标头和 XPATH 从 SOAP 服务请求中获取信息。该路由成功解析并记录了相应的信息。

路线如下:

 <route streamCache="true">

        <from uri="<some URI>"/>  

        <setHeader headerName="SOAPAction">
            <constant>http://www.something.com/constant>
        </setHeader>

         <setHeader headerName="actionId">
            <xpath resultType="java.lang.String">//ws:actionId/text()</xpath>
          </setHeader>


    <choice>

            <when>
                <xpath>//ws:actionId = '1'</xpath>
                <to ref="callService" />                   
            </when>

            <otherwise>

                <log message="Wrong Action ID : ${in.headers.actionId}" 
                          loggingLevel="ERROR"/>                  

            </otherwise>   

        </choice>

    </route>

根据逻辑,如果 actionId 为 1,路由必须重定向到 callService URI,否则它应该记录错误的 action Id 而没有任何响应。

如果 actionId 为 1,则该逻辑有效,它重定向到 callService 并向调用者发送适当的响应。如果 actionId 不是 1,它会用 action Id 写入关于错误 action Id 的日志,但它会向调用者发送与响应相同的请求。

我使用soapUI和Java Socket Programming检查了它。但是输出是一样的,准确地记录了actionId但是向调用者发送了相同的请求作为响应。

我不希望与响应相同的请求。响应必须为空白。

谁能帮我找到解决办法。

问候,

阿什

【问题讨论】:

    标签: apache-camel apache-servicemix fuseesb


    【解决方案1】:

    您需要将响应设置为 empty 或者在这种情况下空对您意味着什么。 并且响应需要符合 WSDL 协定的响应。

    所以在其他情况下添加代码来设置空响应 例如类似的东西:

    <otherwise>
        ...
        <transform>
          <constant>NO DATA</constant>
        </transform>
     </constant>
    

    如果您使用 camel-cxf 也请注意 dataFormat 选项可能会影响应如何创建空响应。

    【讨论】:

    • 再次感谢...我使用了您的建议来设置响应并且它有效。我忘了在我的帖子中问真实的事情。为什么请求作为响应返回?我想知道响应返回的真正原因。当我不使用标头时,请求不会作为响应返回。是因为使用了Headers而退回的吗?请回答我的问题...
    猜你喜欢
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多