webservice接口调用报错 org.apache.cxf.service.factory.ServiceConstructionException: Failed to create servi

本文记录了在使用Apache CXF进行Web服务调用时遇到的ServiceConstructionException问题及其解决方案。通过排查发现是由jar包冲突引起,最终移除了冲突的wstx-asl-3.2.9.jar文件解决了连接被拒绝的错误。

org.apache.cxf.service.factory.ServiceConstructionException: Failed to create service.
        at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:76)
        at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:296)
        at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:241)
        at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:234)
        at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:189)
        at com.dcits.toolchain.services.OnlineTaskService.queryOnlineList(OnlineTaskService.java:74)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at com.dcits.base.utils.ActionUtils.call(ActionUtils.java:81)
        at com.dcits.base.action.CallAction.call(CallAction.java:14)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:269)
        at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:170)
        at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
        at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
        at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
        at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
        at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
        at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
        at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
        at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
        at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at com.dcits.base.filter.ActionFilter.doFilter(ActionFilter.java:92)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:85)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:800)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1471)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:748)
Caused by: javax.wsdl.WSDLException: WSDLException: faultCode=PARSER_ERROR: Problem parsing 'http://59.110.160.28:8991/oneteam/ws/queryOnlineService?wsdl'.: java.net.ConnectException: Connection refused (Connection refused)
        at com.ibm.wsdl.xml.WSDLReaderImpl.getDocument(WSDLReaderImpl.java:2198)
        at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(WSDLReaderImpl.java:2390)
        at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(WSDLReaderImpl.java:2422)
        at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:238)
        at org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.java:163)
        at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:74)
        ... 57 more
Caused by: java.net.ConnectException: Connection refused (Connection refused)
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:589)
        at java.net.Socket.connect(Socket.java:538)
        at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
        at sun.net.www.http.HttpClient.<init>(HttpClient.java:242)
        at sun.net.www.http.HttpClient.New(HttpClient.java:339)
        at sun.net.www.http.HttpClient.New(HttpClient.java:357)
        at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1202)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1138)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1032)
        at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:966)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1546)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474)
        at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:647)
        at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:148)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:805)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:770)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
        at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243)
        at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)
        at com.ibm.wsdl.xml.WSDLReaderImpl.getDocument(WSDLReaderImpl.java:2188)
        ... 62 more

 

我的是jar包冲突,删掉了wstx-asl-3.2.9.jar之后就好了。

一个问题调试了一两天。。。

 

 

 

 

 

<think>嗯,用户现在想了解org.apache.cxf.service.factory.ServiceConstructionException的原因和解决方法,同时还想知道之前解释的那个SQL语句是否与此有关。首先,我需要回忆一下CXF框架中这个异常的常见原因。通常,ServiceConstructionException在创建Web服务时发生,可能涉及服务类配置错误、依赖缺失或注解问题。 用户提到的SQL语句部分是关于启用标志和日期有效性的条件,看起来是数据查询的条件,可能与后端服务逻辑有关。但需要判断是否直接导致CXF的服务构造异常。可能的情况是,如果服务类在初始化时调用了包含该SQL的DAO方法,而SQL执行出错,可能间接导致服务构造失败。不过更可能的是两者独立,用户可能是在不同的上下文中遇到这两个问题,需要分别处理。 接下来,要整理CXF异常的常见原因:比如服务类缺少必要的注解(如@WebService)、依赖注入问题(如Spring配置错误)、WSDL生成问题或版本冲突。对于解决方案,需要检查服务类是否正确使用注解,依赖是否完整,配置是否正确,以及日志中的具体错误信息。 关于SQL部分,用户之前的问题已经详细解释过,可能用户现在想知道这个SQL是否在服务构造时被调用,导致异常。比如,如果getUserById方法执行这个SQL时出错,可能在服务初始化时触发,但通常服务构造异常更多与配置相关,而不是运行时SQL错误。需要指出两者的关联可能性较低,但可以建议用户检查服务初始化过程中是否有数据库交互,并确保DAO层配置正确。 最后,确保回答结构清晰,分点说明异常原因和解决步骤,并适当关联之前的SQL解释,同时生成相关问题帮助用户深入理解。</think>### 分步解析与解决方案 --- #### 一、`org.apache.cxf.service.factory.ServiceConstructionException` 根本原因 该异常表明 **CXF框架在构建Web服务时发生核心配置错误**,常见于以下场景: --- ### 核心问题定位表 | 错误表现 | 关联代码特征 | 典型触发场景 | |------------------------------|-------------------------------|---------------------------| | "Failed to create service" | `@WebService`注解类初始化失败 | Spring + CXF整合配置错误 | | 缺少端点接口实现 | WSDL生成失败 | 依赖缺失或版本冲突 | | 服务类方法签名不匹配 | XML配置与Java类定义不一致 | 动态代理生成失败 | --- #### 二、**直接关联原因**(基于引用代码[^1]分析) 1. **`@WebService` 注解配置错误** ```java @WebService(targetNamespace = "http://service.qlq.cn") public class UserServiceImpl implements UserService {...} ``` - **关键问题**: - 未显式指定 `serviceName`/`portName` 导致WSDL生成冲突 - 接口 `UserService` 未添加 `@WebService` 注解(需接口与实现类双重注解) - **解决方案**: ```java // 接口添加注解 @WebService(targetNamespace = "http://service.qlq.cn") public interface UserService {...} // 实现类补充serviceName @WebService( targetNamespace = "http://service.qlq.cn", serviceName = "UserService", portName = "UserServicePort" ) public class UserServiceImpl implements UserService {...} ``` 2. **依赖注入失败** - **现象**:`userDao` 注入失败导致服务类初始化中断 ```java @Autowired private UserDao userDao; // 可能因未配置扫描路径或Bean名称冲突 ``` - **验证步骤**: 1. 检查 `UserDao` 接口是否被 `@Mapper` 或 `@Repository` 注解 2. 确认Spring扫描路径包含 `cn.qlq.dao` 包 3. **方法签名冲突** - **风险点**:Web服务方法需遵守 **JAX-WS规范** ```java Map<String, Object> getUserMapById(int id); // 复杂类型需定义XML映射 ``` - **优化方案**: - 改用DTO对象替代 `Map` 类型 - 添加 `@XmlSeeAlso` 注解声明可序列化类型 --- #### 三、**与SQL条件的关联性分析** 1. **间接关联场景**: - 若服务类方法(如 `getUserById`)执行时触发SQL错误(例如无效的 `end_date` 逻辑),可能 **导致服务请求处理失败**,但不会直接影响服务构建阶段。 - **典型表现**:服务正常启动,但调用时返回数据库错误(与 `ServiceConstructionException` 无直接关联) 2. **直接隔离验证**: - **步骤1**:注释SQL相关代码,仅保留空方法体 - **步骤2**:若异常消失,则说明问题出在DAO层执行过程 (需检查SQL语句、数据库连接池配置) --- #### 四、**完整解决方案步骤** 1. **基础配置检查** ```xml <!-- pom.xml 必需依赖 --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.5.5</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>3.5.5</version> </dependency> ``` 2. **日志诊断命令** ```bash # 启用CXF调试日志(log4j.properties) log4j.logger.org.apache.cxf=DEBUG ``` 3. **WSDL生成验证** ``` http://localhost:8080/your-app-context-path/UserService?wsdl ``` - 成功:显示完整WSDL定义 - 失败:检查防火墙、端点路径配置 --- ### 关联问题 1. 如何在Spring Boot中整合CXF实现WebService? 2. JAX-WS与JAX-RS在Web服务开发中的核心区别是什么? 3. 如何通过Wireshark抓取分析SOAP协议报文?
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值