chasing鱼 2025-08-29 14:29 采纳率: 37.5%
浏览 9

服务器,调用esb接口时,走处理类报异常

服务器测试报异常:

>第一个异常: WARN  2025-08-29 13:42:49.127 [http-bio-8080-exec-1]  - Application {http://impl.webservice.lis.sinosoft.com/}ClaimSHClaimBackService#{http://webservice.lis.sinosoft.com/}service has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: javax.wsdl.xml.WSDLReader.readWSDL(Ljavax/wsdl/xml/WSDLLocator;Lorg/w3c/dom/Element;)Ljavax/wsdl/Definition;

> 第二个异常:Caused by: java.lang.NoSuchMethodError: javax.wsdl.xml.WSDLReader.readWSDL(Ljavax/wsdl/xml/WSDLLocator;Lorg/w3c/dom/Element;)Ljavax/wsdl/Definition;
        at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:236) ~[cxf-rt-wsdl-3.1.4.jar:3.1.4]

第三个异常:WARN 2025-08-29 13:43:54.556 [http-bio-8080-exec-4] - Interceptor for {http://www.newchinalife.com}IntermediaryReceiveSrvPortType#{http://www.newchinalife.com}IntermediaryReceive has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: Unmarshalling Error: 意外的元素 (uri:"http://www.newchinalife.com/service/hd%22, local:"ManageCom")。所需元素为<{http://www.newchinalife.com/service/hd%7DPageRowNum%3E,<{http://www.newchinalife.com/service/hd%7DTotalRowNum%3E,<{http://www.newchinalife.com/service/hd%7DOrderField%3E,<{http://www.newchinalife.com/service/hd%7DOrderFlag%3E,<{http://www.newchinalife.com/service/hd%7DRowNumStart%3E,<{http://www.newchinalife.com/service/hd%7DOperator%3E,<{http://www.newchinalife.com/service/hd%7DPageFlag%3E

WARN  2025-08-29 13:42:49.127 [http-bio-8080-exec-1]  - Application {http://impl.webservice.lis.sinosoft.com/}ClaimSHClaimBackService#{http://webservice.lis.sinosoft.com/}service has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: javax.wsdl.xml.WSDLReader.readWSDL(Ljavax/wsdl/xml/WSDLLocator;Lorg/w3c/dom/Element;)Ljavax/wsdl/Definition;
        at org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:162) ~[cxf-core-3.1.4.jar:3.1.4]
        at org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker.createFault(AbstractJAXWSMethodInvoker.java:267) ~[cxf-rt-frontend-jaxws-3.1.4.jar:3.1.4]
        at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:128) ~[cxf-core-3.1.4.jar:3.1.4]
        at org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker.invoke(AbstractJAXWSMethodInvoker.java:232) ~[cxf-rt-frontend-jaxws-3.1.4.jar:3.1.4]
        at org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:85) ~[cxf-rt-frontend-jaxws-3.1.4.jar:3.1.4]
        at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:74) ~[cxf-core-3.1.4.jar:3.1.4]
        at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:59) ~[cxf-core-3.1.4.jar:3.1.4]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_201]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_201]
        at org.apache.cxf.interceptor.ServiceInvokerInterceptor$2.run(ServiceInvokerInterceptor.java:126) ~[cxf-core-3.1.4.jar:3.1.4]
        at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37) ~[cxf-core-3.1.4.jar:3.1.4]
        at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:131) ~[cxf-core-3.1.4.jar:3.1.4]
        at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308) ~[cxf-core-3.1.4.jar:3.1.4]
        at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) ~[cxf-core-3.1.4.jar:3.1.4]
        at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:251) ~[cxf-rt-transports-http-3.1.4.jar:3.1.4]
        at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234) ~[cxf-rt-transports-http-3.1.4.jar:3.1.4]
        at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208) ~[cxf-rt-transports-http-3.1.4.jar:3.1.4]
        at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160) ~[cxf-rt-transports-http-3.1.4.jar:3.1.4]
        at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:180) ~[cxf-rt-transports-http-3.1.4.jar:3.1.4]
        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:293) ~[cxf-rt-transports-http-3.1.4.jar:3.1.4]
        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:212) ~[cxf-rt-transports-http-3.1.4.jar:3.1.4]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:650) ~[servlet-api.jar:?]
        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:268) ~[cxf-rt-transports-http-3.1.4.jar:3.1.4]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) ~[catalina.jar:7.0.68]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) ~[catalina.jar:7.0.68]
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) ~[tomcat7-websocket.jar:7.0.68]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) ~[catalina.jar:7.0.68]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) ~[catalina.jar:7.0.68]
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121) ~[spring-web-4.2.6.RELEASE.jar:4.2.6.RELEASE]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.2.6.RELEASE.jar:4.2.6.RELEASE]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) ~[catalina.jar:7.0.68]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) ~[catalina.jar:7.0.68]
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) ~[catalina.jar:7.0.68]
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) ~[catalina.jar:7.0.68]
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) ~[catalina.jar:7.0.68]
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) ~[catalina.jar:7.0.68]
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) ~[catalina.jar:7.0.68]
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) ~[catalina.jar:7.0.68]
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) ~[catalina.jar:7.0.68]
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:436) ~[catalina.jar:7.0.68]
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078) ~[tomcat-coyote.jar:7.0.68]
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) ~[tomcat-coyote.jar:7.0.68]
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) ~[tomcat-coyote.jar:7.0.68]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[?:1.8.0_201]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[?:1.8.0_201]
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-coyote.jar:7.0.68]
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_201]
Caused by: java.lang.NoSuchMethodError: javax.wsdl.xml.WSDLReader.readWSDL(Ljavax/wsdl/xml/WSDLLocator;Lorg/w3c/dom/Element;)Ljavax/wsdl/Definition;
        at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:236) ~[cxf-rt-wsdl-3.1.4.jar:3.1.4]
        at org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.java:163) ~[cxf-rt-wsdl-3.1.4.jar:3.1.4]
        at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:85) ~[cxf-rt-wsdl-3.1.4.jar:3.1.4]
        at org.apache.cxf.jaxws.ServiceImpl.initializePorts(ServiceImpl.java:218) ~[cxf-rt-frontend-jaxws-3.1.4.jar:3.1.4]
        at org.apache.cxf.jaxws.ServiceImpl.initialize(ServiceImpl.java:161) ~[cxf-rt-frontend-jaxws-3.1.4.jar:3.1.4]
        at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:129) ~[cxf-rt-frontend-jaxws-3.1.4.jar:3.1.4]
        at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:82) ~[cxf-rt-frontend-jaxws-3.1.4.jar:3.1.4]
        at javax.xml.ws.Service.<init>(Service.java:77) ~[?:1.8.0_201]
        at com.sinosoft.lis.esb.zp012.CommercialInsuranceDirectClaimCancellationInterfaceSrvBindingQSService.<init>(CommercialInsuranceDirectClaimCancellationInterfaceSrvBindingQSService.java:57) ~[classes/:?]
        at com.sinosoft.lis.esb.zp012.ZP012RequestEsbToResponseJson.callWSESB(ZP012RequestEsbToResponseJson.java:120) ~[classes/:?]
        at com.sinosoft.lis.esb.zp012.ZP012RequestEsbToResponseJson.requestEsbToResponseJson(ZP012RequestEsbToResponseJson.java:42) ~[classes/:?]
        at com.sinosoft.lis.webservice.impl.ClaimSHClaimBackServiceImpl.service(ClaimSHClaimBackServiceImpl.java:97) ~[classes/:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_201]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_201]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_201]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_201]
        at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:180) ~[cxf-core-3.1.4.jar:3.1.4]
        at org.apache.cxf.jaxws.JAXWSMethodInvoker.performInvocation(JAXWSMethodInvoker.java:66) ~[cxf-rt-frontend-jaxws-3.1.4.jar:3.1.4]
        at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96) ~[cxf-core-3.1.4.jar:3.1.4]
        ... 44 more
WARN  2025-08-29 13:43:54.556 [http-bio-8080-exec-4]  - Interceptor for {http://www.newchinalife.com}IntermediaryReceiveSrvPortType#{http://www.newchinalife.com}IntermediaryReceive has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: Unmarshalling Error: 意外的元素 (uri:"http://www.newchinalife.com/service/hd", local:"ManageCom")。所需元素为<{http://www.newchinalife.com/service/hd}PageRowNum>,<{http://www.newchinalife.com/service/hd}TotalRowNum>,<{http://www.newchinalife.com/service/hd}OrderField>,<{http://www.newchinalife.com/service/hd}OrderFlag>,<{http://www.newchinalife.com/service/hd}RowNumStart>,<{http://www.newchinalife.com/service/hd}Operator>,<{http://www.newchinalife.com/service/hd}PageFlag>
        at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:905) ~[cxf-rt-databinding-jaxb-3.1.4.jar:3.1.4]
        at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:712) ~[cxf-rt-databinding-jaxb-3.1.4.jar:3.1.4]
        at org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:179) ~[cxf-rt-databinding-jaxb-3.1.4.jar:3.1.4]


出现这些异常的原因是什么?应该怎么解决?

  • 写回答

4条回答 默认 最新

  • 檀越@新空间 2025-08-29 15:29
    关注

    下午好🌅🌅🌅
    本答案参考通义千问

    你提供的日志信息显示了两个主要的异常问题,分别是:

    1. 方法调用错误javax.wsdl.xml.WSDLReader.readWSDL(Ljavax/wsdl/xml/WSDLLocator;Lorg/w3c/dom/Element;)Ljavax/wsdl/Definition;NoSuchMethodError
    2. SOAP 解析错误Unmarshalling Error: 意外的元素 (uri:"http://www.newchinalife.com/service/hd%22, local:"ManageCom")

    下面我将逐一分析并提供解决方案。


    一、第一个异常分析与解决

    异常内容:

    Caused by: java.lang.NoSuchMethodError: javax.wsdl.xml.WSDLReader.readWSDL(Ljavax/wsdl/xml/WSDLLocator;Lorg/w3c/dom/Element;)Ljavax/wsdl/Definition;
        at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:236) ~[cxf-rt-wsdl-3.1.4.jar:3.1.4]
    

    原因分析:

    这个错误通常是因为 CXF 和 JAX-WS 的版本不兼容。具体来说,WSDLReader.readWSDL(...) 方法在某些版本中不存在或签名不同。

    • CXF 3.1.4 使用的是 JAX-WS API 2.2 或更早的版本。
    • 如果你项目中引入了 更高版本的 JAX-WS(如 2.3),就会导致方法签名不匹配,从而引发 NoSuchMethodError

    解决方案:

    1. 统一依赖版本

    确保所有相关的依赖(如 jaxws-api, jaxb-api, cxf 等)使用一致的版本,避免冲突。

    建议使用 CXF 3.1.x 时,使用 JAX-WS API 2.2 或更低版本

    2. 排除冲突的依赖

    如果你使用 Maven,可以在 pom.xml 中排除冲突的依赖项,例如:

    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxws</artifactId>
        <version>3.1.4</version>
        <exclusions>
            <exclusion>
                <groupId>javax.jws</groupId>
                <artifactId>jsr181-api</artifactId>
            </exclusion>
            <exclusion>
                <groupId>javax.xml.bind</groupId>
                <artifactId>jaxb-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.2.11</version> <!-- 显式指定兼容版本 -->
    </dependency>
    

    3. 更新 CXF 版本(可选)

    如果问题持续,考虑升级到较新的 CXF 版本(如 3.4.x),它对 JAX-WS 2.3 更加兼容。

    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxws</artifactId>
        <version>3.4.5</version>
    </dependency>
    

    二、第二个异常分析与解决

    异常内容:

    Unmarshalling Error: 意外的元素 (uri:"http://www.newchinalife.com/service/hd%22, local:"ManageCom")
    

    原因分析:

    这是一个 SOAP 消息解析错误,说明服务端返回的 XML 结构与客户端期望的结构不一致。

    可能的原因包括:

    • 命名空间不匹配:URI "http://www.newchinalife.com/service/hd%22 中的 %22 是 URL 编码的双引号 ",可能是 WSDL 或 SOAP 消息中定义的 URI 存在编码错误。
    • 字段名错误<ManageCom> 元素在 WSDL 中未被定义或不在预期的位置。
    • 数据类型不匹配:某些字段的类型或格式不符合服务端要求。

    解决方案:

    1. 检查 WSDL 文件

    • 打开 WSDL 文件,确认 <service><binding><operation> 的定义是否正确。
    • 检查 <message> 中的 <part> 是否包含 <element> 标签,并确认其命名空间和本地名称是否与实际消息匹配。

    2. 验证 SOAP 请求/响应

    • 使用工具(如 SoapUI)模拟请求,查看返回的 XML 是否符合预期。
    • 确保客户端生成的 Java 类(通过 wsimportwsdl2java)与服务端 WSDL 定义完全一致。

    3. 手动调整类或配置

    如果无法修改服务端,可以尝试以下方式:

    a. 自定义 JAXB 绑定文件

    创建 bindings.xjb 文件,覆盖默认的命名空间或字段映射:

    <jaxb:bindings version="2.1"
                   xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
                   xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <jaxb:globalBindings>
            <jaxb:javaType name="java.lang.String" xmlType="xs:string"/>
        </jaxb:globalBindings>
        <jaxb:bindings node="xs:schema[@targetNamespace='http://www.newchinalife.com/service/hd']">
            <jaxb:bindings node="xs:complexType[@name='SomeType']">
                <jaxb:property name="manageCom" xmlName="ManageCom"/>
            </jaxb:bindings>
        </jaxb:bindings>
    </jaxb:bindings>
    

    然后在 wsimport 命令中引用该绑定文件:

    wsimport -Xnocompile -Bbindings.xjb http://example.com/service?wsdl
    
    b. 使用注解覆盖字段名

    如果使用的是 JAX-WS 注解,可以在实体类上添加如下注解:

    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "SomeType", namespace = "http://www.newchinalife.com/service/hd")
    public class SomeType {
        @XmlElement(name = "ManageCom", namespace = "http://www.newchinalife.com/service/hd")
        private String manageCom;
    }
    

    三、总结

    重点解决方案总结

    1. 依赖版本一致性

      • 确保 CXF、JAX-WS、JAXB 等库版本兼容,避免 NoSuchMethodError
      • 使用 Maven 排除冲突的依赖项,显式指定兼容版本。
    2. SOAP 消息结构校验

      • 验证 WSDL 和 SOAP 消息的命名空间、字段名是否匹配。
      • 使用工具(如 SoapUI)进行调试。
    3. 自定义 JAXB 绑定或注解

      • 在无法修改服务端的情况下,通过 bindings.xjb@XmlElement 覆盖字段名和命名空间。

    如果你能提供具体的 WSDL 或 SOAP 请求/响应内容,我可以进一步帮助你定位问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 8月29日