You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WSO2的<send>中介器中使用动态端点URL避免传输信息推断错误

WSO2动态Endpoint报错:无法从URL推断传输信息

问题场景

已验证TokenEndpoint为有效的HTTPS URL(日志输出确认正常),尝试使用替代标签、将URL包装到属性传入<send>标签后,WSO2仍报错无法推断传输信息。

配置代码

<iterate expression="json-eval($.systemList)" preservePayload="false" attachPath="$">
    <target>
        <sequence>
            <log level="custom">
                <property name="Step" value="Fetching token for a system"/>
                <property expression="json-eval($.tokenEndpoint)" name="TokenEndpoint"/>
                <property expression="json-eval($.client_id)" name="client_id"/>
                <property expression="json-eval($.client_secret)" name="client_secret"/>
            </log>
            <!-- Extract API Credentials -->
            <property name="TokenEndpoint" scope="default" expression="json-eval($.tokenEndpoint)"/>
            <property name="client_id" scope="default" expression="json-eval($.client_id)"/>
            <property name="client_secret" scope="default" expression="json-eval($.client_secret)"/>
            <!-- Debugging Log to Ensure Values Are Extracted -->
            <log level="full">
                <property expression="get-property('client_id')" name="Extracted Client ID"/>
                <property expression="get-property('client_secret')" name="Extracted Client Secret"/>
            </log>
            <!-- Set Headers Dynamically -->
            <property name="Content-Type" scope="transport" type="STRING" value="application/x-www-form-urlencoded"/>
            <property name="Accept" scope="transport" type="STRING" value="application/json"/>
            <header name="client_id" scope="transport" expression="get-property('client_id')"/>
            <header name="client_secret" scope="transport" expression="get-property('client_secret')"/>
            <!-- Store Token URL in a Final Property -->
            <property name="resolvedUrl" scope="default" type="STRING" expression="get-property('TokenEndpoint')"/>
            <log level="full">
                <property expression="get-property('resolvedUrl')" name="Final Resolved Token URL"/>
            </log>
            <!-- Send Request -->
            <send>
                <endpoint>
                    <address uri="{get-property('resolvedUrl')}"/>
                </endpoint>
            </send>
        </sequence>
    </target>
</iterate>

错误信息

[2025-02-09 19:07:06,168] ERROR {ClientUtils} - 系统无法从{get-property('finalUrl')} URL推断传输信息。
[2025-02-09 19:07:06,168] ERROR {ClientUtils} - 系统无法从{get-property('finalUrl')} URL推断传输信息。

解决方案

问题根源

WSO2的<address>端点在编译阶段需要确定传输协议,直接在uri中使用动态属性引用的方式,无法让运行时正确识别HTTPS协议类型,导致传输信息推断失败。

修复方案

替换原有<send>块中的端点配置,使用HTTP动态端点的uri-template语法,适配动态URL场景:

<send>
    <endpoint>
        <http uri-template="{get-property('resolvedUrl')}">
            <suspendOnFailure>
                <initialDuration>-1</initialDuration>
                <progressionFactor>1.0</progressionFactor>
            </suspendOnFailure>
            <markForSuspension>
                <retriesBeforeSuspension>0</retriesBeforeSuspension>
            </markForSuspension>
        </http>
    </endpoint>
</send>

额外检查项

  1. 确认resolvedUrl属性的取值是完整的HTTPS格式(以https://开头,无多余空格或特殊字符)
  2. 如果需要处理响应,可考虑使用<call> mediator替代<send>,配合<respond>或<reply>完成流程

内容的提问来源于stack exchange,提问作者Roy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 14:05:19