【发布时间】:2011-09-24 20:49:44
【问题描述】:
我编写了一个与 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");
}
}
}
感谢您的宝贵时间!
【问题讨论】:
-
进行wireshark跟踪。我的想法是Web服务可能使用(错误地)HTTP 200OK而不是500 Internal Server错误发送SOAP错误,并且您的客户端尝试将其作为有效响应处理
-
你是对的!这就是正在发生的事情。那我该如何解决这个问题呢?感谢用户384706的回复!
-
user544192,能否请您指出您的一些代码,或者提供有关如何调用/使用 UPS 网络服务和传递/接收 POJO 的有用链接?我在理解将 POJO 发送到需要调用的 Web 服务的方式时遇到了一些麻烦。您是否将任何 POJO 参数发送到 Web 服务?如果是这样,那么您如何在您的应用程序中制作只有 UPS Web 服务才能理解的 POJO?感谢你的帮助。谢谢。
标签: java web-services spring jaxb spring-ws