要把项目里的业务层,用 WebService 有选择的发布出来.
碰到调用 WebService 发布的服务时,业务层中 Spring 注入的 Bean 都为空的情况.(用JUnit调用服务是正常的)
好是一顿折腾,这个问题很普遍,不知道为什么网上好的解答并不多,所以把解决过程和大家分享.
问题分析, 业务层 Bean 使用的 Spring 容器和调用 WebService 服务中使用的不是同一个 Spring 容器.
所以,在 WebService 中获得不到已经注入的业务 Bean.
为了解决这个问题,先后用到 Axis1,Axis2 和 xfire.
最后经过徐培成(传智播客授业恩师)的指导,发现最新发布的 CXF(xfire改后的名), 解决这个问题很干脆.
1. apache-cxf-2.4.1 需要导入的包. 和其他框架集成的时候,注意去掉同名的包.
commons-logging-1.1.1.jar
cxf-2.4.1.jar
geronimo-activation_1.1_spec-1.1.jar
geronimo-annotation_1.0_spec-1.1.1.jar
geronimo-javamail_1.4_spec-1.7.1.jar
geronimo-servlet_3.0_spec-1.0.jar
geronimo-ws-metadata_2.0_spec-1.1.3.jar
jaxb-api-2.2.1.jar
jaxb-impl-2.2.1.1.jar
jaxb-xjc-2.2.1.1.jar
jetty-server-7.4.2.v20110526.jar
jetty-util-7.4.2.v20110526.jar
neethi-3.0.0.jar
saaj-api-1.3.jar
saaj-impl-1.3.2.jar
wsdl4j-1.6.2.jar
wss4j-1.6.1.jar
xmlbeans-2.4.0.jar
xmlschema-core-2.0.jar
2. web.xml
<!-- WebService.CXF -->
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
注意:这里要是用到了 struts 等,要看一下过滤器或 servlet.
3. 在 Spring 的配置文件中配置. 这个是解决问题的关键.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<bean id="grupCustService" class="com.test.service.impl.GrupCustService"/>
<jaxws:endpoint id="grupCustServiceweb" address="/GrupCustServiceWeb"
implementorClass="com.test.service.impl.GrupCustService">
<jaxws:implementor ref="grupCustService"/>
</jaxws:endpoint>
</beans>
解决 Spring 注入 Bean 为空的情况,这个文件的配置是关键.
<jaxws:implementor ref="grupCustService"/>中, grupCustService 是需要发布的实现类,在 Spring 容器中注入的名.
只有加上这句, 就可以很顺利的获得业务 Bean.
4. Java 类
接口类
@WebService (必须要有)
public interface HelloWorld {
String sayHello(@WebParam(name="text") String text);
}
实现类
括号里的参数可以不写,这个和自动生成的客户端的包有关系,建议写上.
@WebService(endpointInterface = "com.test.service.HelloWorld", serviceName = "HelloWorld")
public class HelloWorldImpl implements HelloWorld {
public String sayHello(String text) {
return "Hello " + text;
}
}
5. 获得 wsdl
在 IE 中访问 http://localhost:8080/项目名/services/GrupCustServiceWeb?wsdl
分享到:
相关推荐
Spring框架则是一个全面的企业级应用开发框架,它提供了一种依赖注入(DI)和面向切面编程(AOP)的解决方案,简化了Java应用的开发。Spring还包含了对事务管理、数据访问/集成、MVC、Web服务等多种功能的支持。 ...
这个类可以是普通的Java类,也可以是Spring的bean,这样可以利用Spring的依赖注入和其他特性。 4. **配置服务**:在Spring配置文件中,使用`<jaxws:endpoint>`标签来声明CXF服务。在这个标签中,你需要指定服务接口...
在IT行业中,构建Web服务是常见的任务,Spring、CXF和Tomcat的组合是一个流行的解决方案。这个项目"Spring+CXF+tomcat开发webservice"旨在教你如何利用这些技术搭建一个完整的Web服务环境,包括服务端和服务端客户端...
在Java开发领域,Spring框架以其强大的依赖注入和面向切面编程能力被广泛应用,而CXF则是一个优秀的开源服务开发框架,支持SOAP和RESTful服务。当Spring与CXF结合使用时,可以方便地创建和消费Web服务。本篇文章将...
【标题】"CXF2.1.3+spring3.0+struts2.3.4" 描述了集成这三大框架实现Web服务的场景。CXF是一个开源的服务框架,它允许开发人员创建和消费各种Web服务。Spring是Java企业级应用的核心框架,提供了依赖注入和面向切面...
在Spring中集成CXF,可以通过Spring的CXFEndpoint或JAXWS-RI的EndpointPublisher来暴露服务。同时,可以利用CXF的ClientProxyFactoryBean创建服务消费者,以便于调用远程接口。 MyBatis的配置主要包括数据源、...
【Spring+CXF小Demo】是基于Java开发的一个入门级示例,主要展示了如何结合Spring框架与CXF库来创建和消费Web服务。...通过实践这个Demo,开发者可以深入理解Spring和CXF的集成,为以后的项目开发打下坚实的基础。
【Spring+cxf=WebService】是将Spring框架与Apache CXF集成来实现Web服务的一种常见方式。Spring是一个强大的Java企业级应用开发框架,它提供了一种模块化和灵活的方式来组织和管理应用程序的组件。而CXF则是一个...
1. **Spring**:Spring 是一个全面的Java应用开发框架,它提供了依赖注入(DI)和面向切面编程(AOP)等功能,以简化应用的开发和管理。在SSM中,Spring作为基础框架,负责管理整个系统的组件,包括数据库操作、业务...
Spring可以与CXF集成,通过Spring的JAX-WS或JAX-RS支持,轻松创建并管理CXF客户端。这样,客户端只需通过接口调用,即可透明地调用远程Web服务。 3. **MyBatis框架**:MyBatis允许开发者编写自定义的SQL,存储过程...
总的来说,Spring+CXF的组合提供了一种强大且灵活的方式来开发和部署Web服务,它结合了Spring的易用性和CXF的Web服务功能,使得企业级应用能够轻松地与其他系统进行集成。通过提供的文档和JAR包,开发者可以深入学习...
本篇文章将深入解析这些技术,并结合"spring + cxf + restful"的实践项目"taiping-accountserver-demo",探讨如何将它们融合在一起,为初学者提供快速上手的指导。 首先,Spring是一个开源的Java应用框架,以其依赖...
Apache CXF是一个开源的服务框架,它允许开发者创建和消费各种Web服务,而Spring框架则是一个广泛使用的依赖注入(DI)和面向切面编程(AOP)工具,两者结合可以提供一个高效、灵活的服务实现环境。 **1. Spring...
Maven是项目管理和构建工具,Spring提供了强大的依赖注入和面向切面编程支持,而CXF则是一个用于构建和集成Web服务的开源框架。 【描述】"maven+spring+cxf 的webservice开发源码,欢迎大家指点,谢谢"表明这个项目...
4. **配置Spring**:接下来,我们需要在Spring配置文件中声明CXF的bean,包括Servlet或JAX-WS的Endpoint。这些配置将告诉Spring如何启动和管理Web服务。通常,我们需要配置服务的地址、接口类以及其实现类。 5. **...
【标题】"webservice=...通过研究这两个项目,你可以学习到如何在 Maven 项目中集成 Spring 和 CXF,如何编写和发布 Web 服务,以及如何在 Java 客户端中消费这些服务。这将有助于提升你在 Web 服务开发领域的技能。
这个过程中,Spring负责管理和依赖注入,而CXF则负责处理Web服务的通信细节,两者结合提供了一种强大且灵活的解决方案。在实际开发中,可以根据项目的具体需求,对这些步骤进行调整和优化,以达到最佳的效果。
在实践中,理解并调试CXF和Spring的源码可以帮助我们更好地解决问题,优化性能,以及定制化服务行为。 至于“工具”标签,这可能指的是开发者可能会用到的一些辅助工具,例如IDE(如IntelliJ IDEA或Eclipse)、构建...
通过Spring的依赖注入和管理能力,可以轻松地集成其他服务或组件,实现服务间的协同工作。 总的来说,"spring4+cxf3"的整合是现代企业级应用开发中的常见实践,它结合了Spring的强大功能和CXF的Web服务处理能力,为...
Apache CXF和Spring提供了丰富的扩展点,可以集成如Spring Security来控制访问权限,使用Spring AOP来处理事务,以及通过CXF的拦截器机制来实现自定义的日志、验证等功能。 总结来说,Apache CXF 2与Spring 2.5的...