gpt4 book ai didi

java - SOAP 响应正文是没有任何节点的纯文本

转载 作者:搜寻专家 更新时间:2023-10-31 20:17:38 25 4
gpt4 key购买 nike

如何处理如下所示的 SOAP 消息响应?

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:new="http://foo/bar">
<S:Header/>
<S:Body>OK</S:Body>
</S:Envelope>

这是我在 WSDL 中的定义:

<wsdl:operation name="MyRequest">
<wsdl:input message="tns:MyRequest" name="MyRequest">
</wsdl:input>
<wsdl:output message="tns:MyRequestResponse" name="MyRequestResponse">
</wsdl:output>
</wsdl:operation>

<xs:element name="MyRequestResponse" type="xs:string"/>

服务:

 @WebMethod(operationName = "MyRequest")
@WebResult(name = "MyRequestResponse", targetNamespace = "http://foo/bar", partName = "parameters")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public String MyRequest(
@WebParam(name = "MyRequest", targetNamespace = "http://foo/bar", partName = "parameters")
MyRequest parameters);

我确实尝试过使用拦截器并用节点包装响应“OK”。但是,想知道是否有任何更简洁的方法通过在 JAXB/WSDL 层本身中处理来实现。

最佳答案

这不是有效的 SOAP 1.1 Body根据规范的元素。所以它实际上不是 SOAP 响应。

因为它不是有效的 SOAP 响应并且您不发送任何复杂的参数,所以尝试使用 SOAP 框架调用此类服务​​实际上没有什么值(value)。

将其视为具有专有格式的普通 HTTP 服务会更有意义。发送 HTTP POST 请求并从响应中提取正文中的“OK”部分。如果不希望 namespace 前缀发生变化,您甚至可以在不解析 XML 的情况下进行更改。

尽管看起来像一个“hack”,但与使用不明显的拦截器和模糊设置来破解框架并强制其执行规范之外的事情相比,它是一种更加干净和可维护的方法。任何跟在您后面检查代码的人都必须花时间了解处理这个独眼 SOAP 背后的所有装置。

但是,如果有时存在符合规范的有效复杂 SOAP 主体,有时存在无效的任意内容(如 OK),则重新实现 SOAP 解析是不合理的,拦截器是将无效消息与规范。在混合情况下,我认为没有简单干净的方法来使用 SOAP/WSDL 规范进行映射,除非消息被拦截器预处理和修复。

关于java - SOAP 响应正文是没有任何节点的纯文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40840423/

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