gpt4 book ai didi

soap - 更改 CXF SOAP Fault 中的 HTTP 响应代码

转载 作者:行者123 更新时间:2023-12-04 16:50:29 26 4
gpt4 key购买 nike

我有这个错误

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>Message part {http://soap.ws.server.wst.fit.cvut.cz/}createOrders was not recognized. (Does it exist in service WSDL?)</faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>

这完全没问题。但问题是 CXF 正在返回内部服务器错误 (HTTP 500)。我希望它返回 400 Bad Request 因为错误的请求导致了这个。我该如何改变它?

详情

产生上述错误的错误请求 - 应该有 <soap:createOrder/>而不是 <soap:createOrders/> .

POST http://localhost:8080/wst-server-1.0.0/services/soap/order

POST data:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="http://soap.ws.server.wst.fit.cvut.cz/">
<soapenv:Header/>
<soapenv:Body>
<soap:createOrders/>
</soapenv:Body>
</soapenv:Envelope>

[no cookies]

Request Headers:
Content-Length: 238
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded

最佳答案

我知道这可能为时已晚,但另一种处理 HTTP 状态代码的方法是使用 CXF 拦截器。

您可以在您的服务器 CXF 配置中添加一个拦截器

 public class ServiceConfigurer implements CxfConfigurer {

@Override
public void configureServer(Server server) {
server.getEndpoint().getOutFaultInterceptors().add(new ChangingStatusCodeInterceptor();
}
}

在你的拦截器中,你可以改变这个

public class SaveInfluxDataInterceptor extends WSS4JOutInterceptor {

@Override
public void handleMessage(SoapMessage soapMessage) {
((Fault)exchange.get(Exception.class)).setStatusCode(202); // this is because of soap12OutFaultInterceptor look to this fault
// or you can use this
// exchange.getOutFaultMessage().put(Message.RESPONSE_CODE, 202);
}
}

我将 Camel 与 CXF 结合使用。也许这个解决方案应该在您的解决方案中改变。

关于soap - 更改 CXF SOAP Fault 中的 HTTP 响应代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14146476/

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