gpt4 book ai didi

java - 如何处理 SOAP :mustUnderstand ="1" in webservice

转载 作者:太空宇宙 更新时间:2023-11-04 06:55:19 25 4
gpt4 key购买 nike

在传入的 SOAP 请求中, SOAP 头中有一个 SOAP :必须理解=“1”元素,我如何在我的网络服务中处理这个元素。如果soap:mustUnderstand="1",当它为0时(soap:mustUnderstand="0")它会抛出异常,它会按预期运行。

这是我的部分 SOAP 请求是这样的

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header xmlns="http://www.xxxxxxx/zzzzz-msg/schema/msg-header-1_0.xsd">
<MessageHeader ResponseRequested="true" version="1.0" Terminate="true" Reverse="true" id="0002P559C1" soap:mustUnderstand="1">

.......
......

我正在使用 Apache CXF 进行 Web 服务。

最佳答案

您的服务应明确告诉 CXF 给定的 header 已被理解和处理。

一种方法是注册 SOAPHandler 的子类负责实际处理您的 header 。在该接口(interface)中,实现方法 Set<QName> getHeaders() 很重要并返回处理程序关心的一组 header 名称。

CXF 将把所有这些 header 视为已理解

示例:

在 Spring 上下文 XML 中:

<jaxws:endpoint ...>
<jaxws:handlers>
<bean class="example.MySOAPHandler" />
</jaxws:handlers>
</jaxws:endpoint>

在 Java 代码中:

public class MySOAPHandler implements SOAPHandler<SOAPMessageContext> {
public static final String MY_NS_URI = "http://www.xxxxxxx/zzzzz-msg/schema/msg-header-1_0.xsd";
public static final String MY_HEADER_NAME = "MessageHeader";

@Override
public Set<QName> getHeaders() {
// This will tell CXF that the following headers are UNDERSTOOD
return Collections.singleton(new QName(MY_NS_URI, MY_HEADER_NAME));
}

// other handler methods here
}

关于java - 如何处理 SOAP :mustUnderstand ="1" in webservice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22832595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com