Java Spring Web 服务客户端故障处理

标签 java web-services spring jaxb spring-ws

我编写了一个与 UPS Web 服务一起工作的 Web 服务客户端(使用 Java Spring 和 JAXB Marshaller)。当我发送有效请求时,一切正常。当我发送无效请求(重量 > 150 磅)时,UPS 网络服务响应 SOAP 故障。客户端应用程序失败并显示

org.springframework.oxm.UnmarshallingFailureException: JAXB unmarshalling 
exception; nested exception is javax.xml.bind.UnmarshalException: 
unexpected element (uri:"http://schemas.xmlsoap.org/soap/envelope/", local:"Fault").

显然,我的程序无法破译 Web 服务返回的 SOAP 错误。我写了一个自定义的 FaultMessageResolver,但它没有被调用。这是代码:

public class UpsRateClient extends WebServiceGatewaySupport {
    public UpsRateClient(WebServiceMessageFactory messageFactory) {
        super(messageFactory);
        getWebServiceTemplate().setFaultMessageResolver(new UpsFaultMessageResolver());
    }

    public RateResponse getRate(RateRequest rateRequest) {
        return (RateResponse) getWebServiceTemplate().marshalSendAndReceive(rateRequest, new UpsRequestWSMC());
    }
    private class UpsFaultMessageResolver implements FaultMessageResolver {
        public void resolveFault(WebServiceMessage message) throws IOException{
            System.out.println("Inside UpsFaultMessageResolver");   
        }
    }
}

感谢您的宝贵时间!

最佳答案

我有同样的问题(HTTP 200OK 的 SOAP 错误),我通过将 CheckConnectionForFault 属性设置为 false 来解决它。 See .

关于Java Spring Web 服务客户端故障处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7541836/

相关文章:

java - Spring mvc - 如何根据代码显示文本值

java - 根据系统属性注入(inject) spring bean

java - 访问服务器端口@Value ("${local.server.port}")不起作用

iphone - NSJSONSerialization 返回 nil

c# - 我怎样才能异步调用这个网络服务?

web-services - Exchange Web 服务 : ExtendedPropertyDefinition IDs defined? 在哪里

Spring web 项目部署在 tomcat 中失败,但在 jetty 中工作

java - Android Studio : Can't switch to new activity

Java this.dispose 调用时不关闭窗口

java - 在 Java 中使用 SAX 解析大型 XML