gpt4 book ai didi

java - 如何使用 spring-ws 和 jaxb 从 WS 响应中提取 SOAP header

转载 作者:行者123 更新时间:2023-11-30 08:59:11 25 4
gpt4 key购买 nike

我们在我们的应用程序上使用 spring-ws 2.2 来使用 Web 服务。我们已经很高兴地这样做了很长一段时间,并且一切正常,只是现在我需要访问响应中的 SOAP header ,而我只是找不到执行此操作的方法。

我们正在使用配置有 Jaxb2Marshaller 的 WebServiceTemplate(来自 springs-ws)。 jaxb 文件是使用 xjc 从 wsdl 生成的。我的回复中的标题元素看起来像这样:

   <soapenv:Header>
<v1:ResponseHeader status="OK">
<v1:description>test</v1:description>
</v1:ResponseHeader>
</soapenv:Header>

在我的 java 类中,解析响应的代码如下所示(我删除了一些不相关的代码):

public CalculationData getValues(Integer id) throws IntegrationException {
WebServiceMessageCallback callback = createCallback(soapAction);

GetValuesRequest request = toGetValues(id);
GetValuesResponse response = null;
try {
response = (GetValuesResponse) webServiceTemplate.marshalSendAndReceive(request, callback);
} catch (SOAPFaultException fault) {
log.error("Soap fault occurred during getValues " + id);
throw new IntegrationException(fault);
}

CalculationData data = fromGetValues(response);

return data;
}

请帮我找到一个从响应中提取 SOAP header 信息的解决方案。我必须能够解析作为属性发送的状态代码。

顺便说一下。我还有一个从模式生成的 ResponseHeader.java jaxb 类。

根据最终更改更新:

这是内联 ClientInterceptor 实现后我的 handleResponse 方法的样子:

@Override
public boolean handleResponse(MessageContext messageContext) throws WebServiceClientException {
SoapMessage message = (SoapMessage) messageContext.getResponse();
Iterator<SoapHeaderElement> responseHeaderElements =
message.getSoapHeader().examineAllHeaderElements();
SoapHeaderElement header = null;
if (responseHeaderElements.hasNext()) {
header = responseHeaderElements.next();
} else {
log.error("Error! No ResponseHeader found in response.");
return false;
}

String responseCode = header.getAttributeValue(new QName(STATUS_QNAME));
responseMsg.put(RESPONSE_MSG_KEY, responseCode);
return true;
}

我尝试通过 QName 获取 ResponseHeader 元素,但由于某些原因似乎不起作用。但是,无论如何,我只希望在 soap header 中获得一个元素,这样可以正常工作吗?

最佳答案

对于这个用例,最好的解决方案是使用自定义 WebServiceMessageExtractor,如下所述:

http://veithen.github.io/2015/01/03/spring-ws-extracting-soap-headers-from-responses.html

关于java - 如何使用 spring-ws 和 jaxb 从 WS 响应中提取 SOAP header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27362148/

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