如何将 Azure 订阅密钥 header 添加到 JAX-WS SOAP 消息

How to add Azure subscription key header to JAX-WS SOAP message

我正在尝试通过 Azure 发送 SOAP 消息,我需要将订阅密钥添加到我的 JAX-WS 消息中。

    NewSubscription_Service test = new NewSubscription_Service();
    NewSubscription newSubscription = test.getNewSubscription();
    WSBindingProvider binding = (WSBindingProvider) newSubscription;

    binding.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, soapEndpointUrlAzure);
    binding.setOutboundHeaders(
            Headers.create(new QName("Ocp-Apim-Subscription-Key"),"xxx")
    );

当我尝试发送此消息时,它会给我一个 401 并给出以下解释: 由于缺少订阅密钥,访问被拒绝。确保在向 API.

发出请求时包含订阅密钥

我应该以其他方式添加 header 吗?我不太习惯 SOAP 消息,所以欢迎任何帮助。

我发现您不应该为此使用 outboundHeaders。 下面的代码是您应该如何添加 headers:

    Map<String, List<String>> requestHeaders = new HashMap<>();
    requestHeaders.put("Ocp-Apim-Subscription-Key", Arrays.asList("xxx"));
    binding.getRequestContext().put(MessageContext.HTTP_REQUEST_HEADERS, requestHeaders);