当前位置: 首页 > 知识库问答 >
问题:

如何向apache axis 2 Java添加消息上下文头

贡念
2023-03-14

我正在研究web服务。我想知道我们如何在JAX-WS类型的web服务中将头添加到SOAP请求中。

想想我的头球就像这样。

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

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

SimpleSTub stub = new Simplestub();

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

MessageContext.HTTP_REQUEST_HEADERS, headers

编辑

正常类中的实际实现

私有静态最终字符串WS_URL=“http://localhost:9999/ws/hello?wsdl”;

public static void main(String[]args)引发异常{

URL URL=新URL(WS_URL);QName QName=新的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个答案

王建华
2023-03-14

你正在用你已有的东西找到解决办法。实现这一点的最基本方法是

>

  • 在客户端代码中,通过SimpleStub上的BindingProvider获取对MessageContext的引用

    Map<String,Object> context = ((BindingProvder)stub).getRequestContext()
    Map<String,List> headers = context.get(MessageContext.HTTP_REQUEST_HEADERS)
    

    更新映射并将其填充回请求上下文对象

    context.put(MessageContext.HTTP_REQUEST_HEADERS,headers)
    

    以上都是不错的。但是,如果您试图添加身份验证参数,那么推荐的方法是

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

  •  类似资料:
    • 我正在将我的java项目从Rabbit MQ迁移到Kafka(出于某些原因)。 在当前的工作流中,我将所有消息发布到rabbit mq exchange中,并根据消息的路由密钥将消息重定向到一个或多个队列中。我也想保留Kafka同样的功能。(我知道Kafka本来就不适合,但我想要一个变通办法)。 基本上,我想要这样的东西:每当一个主题接收到一个消息时,基于消息中存在的元,该消息应该被重定向到其他一

    • 我是新手颤动,我使用Firebase消息发送通知到设备,我们使用Web API发送请求到Firebase发送通知和Firebase发送通知到Android。我想在通知标题和身体显示两个按钮(接受和拒绝)像瓦特应用程序通知标记为已读选项我想要这样的东西。 我添加的Android清单文件: 颤振码 Web api服务代码

    • 我是springboot kafka的新手,我在这篇文章后面创建了一个例子。 https://www.codenotfound.com/spring-kafka-boot-example.html 我发现您可以将kafka元数据设置为标题,但这不符合我的目的。 我能做到这一点吗?如果可能的话,我很感激你能分享一个例子。

    • 在纯模式下将Quarkus服务从版本 2.5 迁移到 2.6 时,我遇到了以下情况,如下所示: 我们有一个JAR,它包含几个服务使用的遍历对象的定义,其中包含javax.validation中使用的验证消息。约束:在名为ValidationMessages.properties的文件中定义的注释 在版本 2.5 之前,我可以将此 jar 作为服务依赖项的一部分,它执行服务的本机编译,并设法通过上下