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

如何将Azure订阅密钥头添加到JAX-WS SOAP消息,azure,soap,header,jax-ws,Azure,Soap,Header,Jax Ws,我正试图通过Azure发送SOAP消息,我需要将订阅密钥添加到我的JAX-WS消息中 NewSubscription_Service test = new NewSubscription_Service(); NewSubscription newSubscription = test.getNewSubscription(); WSBindingProvider binding = (WSBindingProvider) newSubscription; bi

我正试图通过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发出请求时包含订阅密钥


我应该以另一种方式添加标题吗?我不太习惯SOAP消息,所以欢迎提供任何帮助。

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

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