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

SOAPAction HTTP头识别异常:第三方预订SOAP服务调用故障排查

解决SOAP客户端的"Unrecognized value of HTTP Header SOAPAction"错误

这个问题的核心原因很明确:你的SOAP客户端没有正确设置SOAPAction HTTP请求头,而你调用的ASMX SOAP服务(从端点.asmx能看出来)对这个头的正确性有严格要求。

第一步:获取正确的SOAPAction值

你可以通过两种方式拿到这个值:

  • 打开你验证过的SOAPUI请求,切换到"Headers"标签页,找到SOAPAction字段的值(通常是一个类似"http://webservices.****/FutureBookingSummaryRequest"的URI);
  • 直接查看目标服务的WSDL文档,找到对应<operation>节点下的<soap:operation>元素,它的soapAction属性值就是你需要的。

第二步:在Java代码中添加SOAPAction头设置

修改你现有的WebServiceMessageCallback实现,在处理SOAP Header的逻辑前后,添加设置SOAPAction的代码:

@Override
public void doWithMessage(WebServiceMessage message) throws IOException, TransformerException{
    try {
        // 先设置SOAPAction头
        SoapMessage soapMessage = (SoapMessage) message;
        // 替换成你从SOAPUI/WSDL中拿到的实际SOAPAction值
        soapMessage.setSoapAction("http://webservices.****/FutureBookingSummaryRequest");

        // 你原来的OG Header处理逻辑...
        OGHeader ogHeader = new OGHeader();
        ogHeader.setTransactionID("****");
        ogHeader.setPrimaryLangID("**");
        ogHeader.setChannelValidation(false);
        log.debug("Created ogHeader");
        
        OGHeaderAuthentication ogHeaderAuth = new OGHeaderAuthentication();
        OGHeaderAuthenticationUserCredentials ogHeaderAuthUserCredentials = new OGHeaderAuthenticationUserCredentials();
        ogHeaderAuthUserCredentials.setUserName("******");
        ogHeaderAuthUserCredentials.setUserPassword("****");
        ogHeaderAuthUserCredentials.setDomain("***");
        ogHeaderAuth.setUserCredentials(ogHeaderAuthUserCredentials);
        ogHeader.setAuthentication(ogHeaderAuth);

        SoapHeader soapHeader = soapMessage.getSoapHeader();
        log.debug("Got header from the SOAP message");

        ObjectFactory factory = new ObjectFactory();
        OGHeader futureBookingsummarySoapHeaders = factory.createOGHeader();
        futureBookingsummarySoapHeaders.setAuthentication(ogHeaderAuth);
        JAXBElement<OGHeader> headers = factory.createOGHeader(futureBookingsummarySoapHeaders);
        log.debug("Header element created");

        JAXBContext context = JAXBContext.newInstance(OGHeader.class);
        Marshaller marshaller = context.createMarshaller();
        log.debug("Marshaller created");

        marshaller.marshal(headers, soapHeader.getResult());
    } catch (Exception e) {
        log.error("error during marshalling of the SOAP headers", e);
    }
}

额外检查点

还要确认你的JAXB生成的OGHeader类的命名空间是否和SOAPUI请求中的一致(即http://webservices.****),如果命名空间不匹配,服务端也可能无法正确解析你的请求头,导致后续错误。

修改完成后重新测试,应该就能解决这个SOAPAction头的错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:15:24