gpt4 book ai didi

java - 如何从服务端点接口(interface)抛出自定义故障(未在 wsdl 中声明的故障)

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

我有 SEI 类,它抛出在 WSDL 文件中声明的异常。在处理过程中,当抛出此异常时,SOAP 错误将成功发送到客户端。这里没有问题。然而,当我们在处理过程中遇到服务器中的任何运行时异常时,我们会创建一个自定义故障并从 SEI 类中抛出相同的异常。由于此自定义故障未在 SEI 中声明,因此我们添加了故障类来扩展 RuntimeException。但是,当应用程序代码抛出此自定义错误时,Websphere 应用程序服务器不会将 SOAP 错误返回给客户端。相反,它会引发异常,并向客户端发送 Http 错误代码 500。有没有办法将自定义错误消息发送到客户端,而无需在 WSDL 中声明相同的消息。

我的WebMethod:

public CustomerDetails enquireCustomer(Customer customer)
throws CustomerFault
{
try
{
// SOME LOGIC HERE
}
catch (Exception exception)
{
if (exception instanceof CustomerFault)
throw ((CustomerFault) exception );

if (localException instanceof CustomerFault)
{
FaultDetails faultDetails = new FaultDetails();
faultDetails.setErrorId(1);
faultDetails.setErrorDescription(errorDescription);
throw new CustomerFault("Failed in Processing and other details here... ", faultDetails);
}
}
}

我的故障类别

import javax.xml.ws.WebFault;
@WebFault(name="CustomerFault", targetNamespace="http://www.mycompany.com")
public class CustomerFault extends RuntimeException
{
private static final long serialVersionUID = 1L;
private FaultDetails faultDetails;
public ServiceExecutionFault(String message, FaultDetails faultDetails) {
super(message);
this.faultDetails = faultDetails;
}

public ServiceExecutionFault(String message)
{
super(message);
}
public ServiceExecutionFault(String message, FaultDetails faultDetails,
Throwable cause) {
super(message, cause);
this.faultDetails = faultDetails;
}
public FaultDetails getFaultInfo() {
return faultDetails;
}
}

这个问题似乎仅存在于 Websphere 中。当在 weblogic 中尝试时,同样可以正常工作,没有任何问题。我在这里缺少任何标准吗?

最佳答案

在这里找到答案:

JAX-WS server-side SOAPHandler that returns fault gets "Internal Error" on WebSphere v8

通过禁用 websphere 中的统一故障处理,效果很好。添加以下 JVM 属性。

-Dwebservices.unify.faults=false

这可以从管理控制台设置:

Server -> Server Type -> Websphere Application Server -> Process Definition -> Java Virtual Machine -> Custom Properties

Screenshot

关于java - 如何从服务端点接口(interface)抛出自定义故障(未在 wsdl 中声明的故障),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35764383/

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