java - 如何将消息上下文 header 添加到 apache axis 2 Java

标签 java web-services jax-ws axis2 webservice-client

我从事网络服务方面的工作。我想知道我们如何在 JAX-WS 类型的 Web 服务中向 SOAP 请求添加 header 。

像这样考虑我的标题。

    Map<String, List<String>> headers = new HashMap<String, List<String>>();
    headers.put("Username", Collections.singletonList("aaaa"));
    headers.put("Password", Collections.singletonList("aaaa"));

我的客户端类中有 stub 对象。我正在使用 Apache Axis 2。所有类都是自动生成的。

SimpleSTub stub = new Simplestub();

我想在客户端添加这个头信息。

MessageContext.HTTP_REQUEST_HEADERS, headers

编辑

普通类中的实际实现为

private static final String WS_URL = "http://localhost:9999/ws/hello?wsdl";

public static void main(String[] args) 抛出异常{

网址 url = 新网址(WS_URL); QName qname = new QName("http://ws.mkyong.com/", "HelloWorldImplService");

Service service = Service.create(url, qname);
HelloWorld hello = service.getPort(HelloWorld.class);

/*******************UserName & Password ******************************/
Map<String, Object> req_ctx = ((BindingProvider)hello).getRequestContext();
req_ctx.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, WS_URL);

Map<String, List<String>> headers = new HashMap<String, List<String>>();
headers.put("Username", Collections.singletonList("mkyong"));
headers.put("Password", Collections.singletonList("password"));
req_ctx.put(MessageContext.HTTP_REQUEST_HEADERS, headers);
/**********************************************************************/

System.out.println(hello.getHelloWorldAsString());

任何人都可以告诉如何实现这一目标。

谢谢。

最佳答案

您正在使用已有的解决方案。实现这一点的最基本方法是

  1. 在您的客户端代码中,通过 SimpleStub

    上的 BindingProvider 获取对 MessageContext 的引用
    Map<String,Object> context = ((BindingProvder)stub).getRequestContext()
    Map<String,List> headers = context.get(MessageContext.HTTP_REQUEST_HEADERS)
    
  2. 更新 map 并将其填回请求上下文对象

    context.put(MessageContext.HTTP_REQUEST_HEADERS,headers)
    

    以上都很好。但是,如果您尝试执行我认为是添加身份验证参数的操作,则推荐的方法是

    context.put(BindingProvder.USERNAME_PROPERTY,"username");
    context.put(BindingProvder.PASSWORD_PROPERTY,"password");   
    

关于java - 如何将消息上下文 header 添加到 apache axis 2 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14233714/

相关文章:

web-services - token 已过期 - JSON REST API - 错误代码

java - Java 11 中的 JAX-WS 和缺少 WebParam$Mode 类

java - 我在 TLS 客户端身份验证 "javax.net.ssl.SSLHandshakeException: certificate verify format error"中遇到错误

java - 将数据库时间戳列映射到 UTC 日历 (JPA) 并通过 WebService (jax-ws) 将其作为 UTC 日期传递

java - Spring 和 JSR 303 验证。如何仅验证某些属性?

java - 为什么 null 不等于 null?

web-services - 如何在 swagger-go 中使用 golang echo web 框架?

java - 如何在创建同一个 Activity 时取消当前 Activity ?

java - 使用 spring ioc 可交换数据层

c# - 激活特定注册期间发生错误