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

使用Apache Camel 3.11.1 Milo调用OPCUA方法无法获取outputArguments求助

Camel Milo调用OPC UA方法无法获取输出参数解决方案

问题根因

你使用的Apache Camel 3.11.1版本中,camel-milo组件的方法调用逻辑存在设计疏漏:底层Milo SDK已经正确接收到OPC UA服务端返回的输出参数,但组件层没有将输出参数写入请求响应的Body中,仅将输出参数存入了消息Header,因此直接调用requestBody获取返回值会得到null。

解决方案

方案1:低版本兼容方案(无需升级Camel版本)

直接从消息Header中读取输出参数,老版本camel-milo会将方法返回的输出参数以Variant[]类型存入名为CamelMiloMethodOutputArguments的Header中,修改后代码如下:

public void test() throws Exception {
    System.out.println("START CAMEL-MILO TEST");
    SpringCamelContext camelContext = applicationContext.getBean(SpringCamelContext.class); 
    if (camelContext != null) {
        ProducerTemplate producerTemplate = camelContext.createProducerTemplate();
        if (producerTemplate != null) {
            String endpointUri = "milo-client:opc.tcp://milo.digitalpetri.com:62541/milo?node=RAW(ns=2;s=Methods)&method=RAW(ns=2;s=Methods/sqrt(x))&defaultAwaitWrites=true";
            Double value = 25.0;
            // 发送请求获取完整Exchange对象
            Exchange exchange = producerTemplate.request(endpointUri, ex -> ex.getIn().setBody(new Variant(value)));
            // 从Header中读取输出参数
            Variant[] outputArgs = exchange.getIn().getHeader("CamelMiloMethodOutputArguments", Variant[].class);
            if (outputArgs != null && outputArgs.length > 0) {
                Double outputArguments = outputArgs[0].getValue();
                System.out.println("RESULT: " + outputArguments);
            } else {
                System.out.println("ERROR: outputArguments is null");
            }
        } else {
            System.out.println("ERROR: ProducerTemplate unavailable");
        }
    } else {
        System.out.println("ERROR: SpringCamelContext unavailable");
    }
}

方案2:版本升级方案

将Apache Camel版本升级到3.14.0及以上,该版本已经修复了camel-milo方法调用返回值的透出问题,方法调用成功后:

  • 单输出参数的方法会直接将参数值写入响应Body,你原有代码不需要修改即可正常获取返回值
  • 多输出参数的方法会将所有参数封装为List写入响应Body

补充注意事项

如果调用的方法存在多个输入参数,不要直接传入单个Variant对象,需要传入Variant[]数组,按顺序对应方法的输入参数列表。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:39:03