当前位置: 首页 > 知识库问答 >
问题:

Apache CXF(Mule)映射中的QName无效:SOAP-ENV:Client

韦晟睿
2023-03-14

我在Mule ESB 3.5.0 CE中使用Apache CXF 2.5.9作为网络服务客户端。如果在服务器上的皂消息验证失败,我就会得到一个皂错误(自然),看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Fault xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
               xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
   <faultcode>SOAP-ENV:Client</faultcode>
   <faultstring>https://10.1.104.105:8444/DohvatiIzOIBaF2FAServiceTest: cvc-simple-type 1: element {http://www.apis-it.hr/fin/2008/elements/DohvatIzOIBa}OIB value '716500116650' is not a valid instance of type {http://www.apis-it.hr/fin/2008/types/f63}String11BrojType</faultstring>
   <faultactor>OIB CIS pristupni čvor</faultactor>
</soapenv:Fault>

..但当客户端试图消除错误时,我得到了一个例外:

2014-12-13 13:52:34,199 [WARN] org.apache.cxf.phase.PhaseInterceptorChain - Interceptor for {http://www.apis-it.hr/fin/2010/services/DohvatiIzOIBaF2FAService}DohvatiIzOIBaF2ServicePortTypeService#{http://www.apis-it.hr/fin/2010/services/DohvatiIzOIBaF2FAService}DohvatiFOPoOIBu has thrown exception, unwinding now
java.lang.RuntimeException: Invalid QName in mapping: SOAP-ENV:Client
    at org.apache.cxf.staxutils.StaxUtils.readQName(StaxUtils.java:1399)
    at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.unmarshalFault(Soap11FaultInInterceptor.java:59)
    at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:46)
    at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:35)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
    at org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:114)
    at org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:69)
    at org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:34)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
    at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:801)

我希望CXF客户端将肥皂故障解除为异常。如何绕过这个错误?

共有3个答案

扈阳辉
2023-03-14

或者,您可以使用CXF转换功能

你需要:

这将把服务器的原始无效故障映射为以下有效故障,以便cxf客户端可以接受

<soapenv:Fault>
 <faultcode>soapenv:Client</faultcode>
 <faultstring>An error occurred</faultstring>
</soapenv:Fault>

卫开济
2023-03-14

骡子自己抓不到异常。您可能应该使用cxf故障拦截器。从那里你可以撰写你所期待的信息。

甘骞尧
2023-03-14

试着把SOAP-ENV:Client做成类似于12345的东西,把错误代码变成一个数字,帮我解决了这个问题。

 类似资料:
  • 问题内容: 上面是Tomcat的片段web.xml。NEXTEVENT启动时的网址格式 映射中无效的 如果有人可以提示错误,将不胜感激。 问题答案: 网址格式无效。它可以以星号结尾或以一个星号开头(表示文件扩展名映射)。 url-pattern规范: 以’/’字符开头并以’/ ‘后缀结尾的字符串用于路径映射。 以“ ”开头的字符串。前缀用作扩展名映射。 仅包含“ /”字符的字符串表示应用程序的“默

  • 我知道我遵循了servlet-mapping规范,并且还使用Netbeans 7.0创建了servlet。 这是我的web.xml

  • 目前,这就是我如何捕捉异常并设置有效负载的方法 但是,CXF SOAP组件设置实际响应对象的有效负载。而我想在SOAP错误中发送一个错误对象。我怎么能那样做? 默认异常策略发送带有错误消息的SOAP错误。最初,我的目的只是添加记录器,让缺省错误消息在SOAP错误中运行。我添加了Catch exception策略,但后来发现它不会发送SOAP错误。然后我使用回滚策略发送SOAP错误。但是,使用Mul

  • 我使用springdoc-openapi-用户界面为Spring启动API留档,并面临以下问题- 我添加了所有必要的配置,如下所示- maven依赖- 使用java版本11,不确定问题出在哪里,项目无法运行。

  • 我试图通过PHP实现AAA Cooper的SOAP API。当我将XML请求发送到http://wsportal.aaacooper.com:8188/wsportal20/wsGenEst,它通过邮递员,工作正常,但使用CURL时,它不会返回任何内容 我使用直接url(来自wsdl文件),因为他们的wsdl文件似乎已损坏,并且无法使用:http://wsportal.aaacooper.com:

  • 我面临的情况是,我们不能使用模式来验证传入请求(基本上模式是存在的,但它接受请求中的任何字符串,wsdl设计人员有自己的理由这样做,以接受来自不同来源的请求和灵活性)。但是当收到请求时,我会验证请求包装器的子元素是我们所期望的(为此使用XPath)。现在,如果子元素不是预期的,我想抛出和代码,并且可能包含模式验证失败、请求不包含有效元素的错误消息。 我正在使用Mule3.3,并在元素中执行验证,我