1

我正在通过 SSL 执行 SOAP 请求。一个请求正在运行,但对同一 SOAP 服务的另一个请求失败,并出现以下异常:

java.lang.reflect.UndeclaredThrowableException
    com.sun.proxy.$Proxy980.initPayment2(Unknown Source)
    com.mobimoney.emulator.rostelecom.utils.LogicImpl.executeInitPayment2(LogicImpl.java:76)
    com.mobimoney.emulator.rostelecom.servlets.InitPaymentPageServlet.execInitPayment(InitPaymentPageServlet.java:56)
    com.mobimoney.emulator.rostelecom.servlets.InitPaymentPageServlet.service(InitPaymentPageServlet.java:24)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
com.sun.xml.messaging.saaj.SOAPExceptionImpl: No NamespaceURI, SOAP requires faultcode content to be a QName
    com.sun.xml.messaging.saaj.soap.impl.FaultImpl.setFaultCode(FaultImpl.java:155)
    com.sun.xml.messaging.saaj.soap.impl.FaultImpl.setFaultCode(FaultImpl.java:171)
    org.apache.cxf.jaxws.JaxWsClientProxy.createSoapFault(JaxWsClientProxy.java:208)
    org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:142)
    com.sun.proxy.$Proxy980.initPayment2(Unknown Source)
    com.mobimoney.emulator.rostelecom.utils.LogicImpl.executeInitPayment2(LogicImpl.java:76)
    com.mobimoney.emulator.rostelecom.servlets.InitPaymentPageServlet.execInitPayment(InitPaymentPageServlet.java:56)
    com.mobimoney.emulator.rostelecom.servlets.InitPaymentPageServlet.service(InitPaymentPageServlet.java:24)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

我不明白出了什么问题。我用谷歌搜索了这个异常,没有发现任何有用的东西。也许这是 WSDL 中的一个问题,或者我是如何从 WSDL 生成类的?

4

1 回答 1

0

这是 SAAJ 中的一个错误,Java SOAP 库正在使用。

在错误响应中,SOAP“故障代码”值应该被格式化为 qname(前缀:localName)格式。旧版本的 SAAJ 对此执行过于严格,如果前缀为空,则会出现此错误。升级到 1.3.16 可修复此问题。

https://github.com/javaee/metro-saaj/issues/47

于 2020-10-23T14:07:47.523 回答