目录
  1. 1. WebService应用4-与Spring整合
    1. 1.1. Server端整合
      1. 1.1.1. 创建webServer子项目
      2. 1.1.2. 创建intercepter和server包
      3. 1.1.3. 编辑web.xml文件
      4. 1.1.4. cxf配置文件
      5. 1.1.5. Spring配置文件
      6. 1.1.6. 更改测试文件
      7. 1.1.7. 最终测试结果
    2. 1.2. Client端整合
      1. 1.2.1. 创建webClient子项目
      2. 1.2.2. 创建包
      3. 1.2.3. 编辑web.xml文件
      4. 1.2.4. cxf配置文件
      5. 1.2.5. Spring配置文件
      6. 1.2.6. 更改测试类
      7. 1.2.7. 最终测试结果
WebService应用4-与Spring整合

WebService应用4-与Spring整合

Spring作为一个万能框架,能够将许多的第三方框架整合到一起
接续上面几篇,还是以myWebService项目为父项目,将整合的项目作为其中的子项目。整合项目是将上面一篇的client子项目和server子项目与Spring框架进行整合。

Server端整合

创建webServer子项目
  • 首先,进入父项目,右键点击父项目名,选择New->Moudle,然后进入以下界面
    webserver1
  • 之后,填入子项目名
    webserver2
  • 然后,点击File->Project Structure->Libraies,点击+,然后点击其中的Java项,获得以下界面,点击选中项,导入需要的java库
    webServer3
创建intercepter和server包
  • 将server项目中的intercepter和server包完整复制过来就行了。
编辑web.xml文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
<display-name>Archetype Created Web Application</display-name>
<!--配置Spring-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:bean-cxf.xml</param-value> <!--Spring的配置文件-->
</context-param>

<!--配置监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!--配置CXF的Servlet-->
<!--配置自身的拦截器-->
<servlet>
<servlet-name>CXFServlet</servlet-name> <!--拦截器名-->
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <!--拦截器使用的类-->
<load-on-startup>1</load-on-startup> <!--使得服务与服务器一起启动-->
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/*</url-pattern> <!--拦截器作用的范围-->
</servlet-mapping>
</web-app>
cxf配置文件

从cxf包中复制出cxf的三个配置文件,分别为:
cxf.xml
cxf.extension-soap.xml
cxf-servlet.xml

Spring配置文件
  • 创建Spring的配置文件bean-cxf.xml
    webService4
  • 编辑Spring的配置文件bean-cxf.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<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">

<!--初始化cxf框架中的对象,将cxf的对象加入Spring框架的IOC容器中-->

<!--导入resources资源文件中的cxf的xml配置文件,-->
<import resource="classpath:cxf.xml"/>
<import resource="classpath:cxf-extension-soap.xml"/>
<import resource="classpath:cxf-servlet.xml"/>

<!--配置拦截器-->
<jaxws:endpoint address="http://127.0.0.1:8080/myWebService/rack" implementor="webService.server.UserService" serviceName="userService">
<jaxws:inInterceptors>
<!--确定定义的拦截器实例-->
<bean class="webService.intercepter.ServerIntercepter"></bean>
</jaxws:inInterceptors>
</jaxws:endpoint>
</beans>
更改测试文件
  • 更改测试类TestApp
1
2
3
4
5
6
7
8
9
10
11
12
13
package webService.server;

import org.springframework.context.support.ClassPathXmlApplicationContext;
//使用IOC容器来启动
public class TestApp {
public static void main(String[] args) {

//获取一个IOC容器实例
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:bean-cxf.xml");
//启动IOC容器实例
context.start();
}
}
最终测试结果
  • server端成功启动
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
五月 28, 2019 10:23:36 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@51521cc1: startup date [Tue May 28 22:23:36 CST 2019]; root of context hierarchy
五月 28, 2019 10:23:36 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [bean-cxf.xml]
五月 28, 2019 10:23:37 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [cxf.xml]
五月 28, 2019 10:23:38 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [cxf-extension-soap.xml]
五月 28, 2019 10:23:38 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [cxf-servlet.xml]
五月 28, 2019 10:23:40 下午 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@29ca901e: defining beans [cxf,org.apache.cxf.bus.spring.BusWiringBeanFactoryPostProcessor,org.apache.cxf.bus.spring.Jsr250BeanPostProcessor,org.apache.cxf.bus.spring.BusExtensionPostProcessor,org.apache.cxf.binding.soap.SoapBindingFactory,org.apache.cxf.binding.soap.SoapTransportFactory,org.apache.cxf.binding.soap.customEditorConfigurer,org.apache.cxf.jaxws.EndpointImpl--683175349]; root of factory hierarchy
五月 28, 2019 10:23:41 下午 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
信息: Creating Service {http://www.springframework.org/schema/beans}userService from class webService.server.IUserService
五月 28, 2019 10:23:42 下午 org.apache.cxf.endpoint.ServerImpl initDestination
信息: Setting the server's publish address to be http://127.0.0.1:8080/myWebService/rack
五月 28, 2019 10:23:42 下午 org.eclipse.jetty.server.Server doStart
信息: jetty-7.5.4.v20111024
五月 28, 2019 10:23:43 下午 org.eclipse.jetty.server.AbstractConnector doStart
信息: Started SelectChannelConnector@127.0.0.1:8080 STARTING
五月 28, 2019 10:23:43 下午 org.eclipse.jetty.server.handler.ContextHandler startContext
信息: started o.e.j.s.h.ContextHandler{/myWebService,null}

Client端整合

创建webClient子项目
  • 首先,进入父项目,右键点击父项目名,选择New->Moudle,然后进入以下界面
    webclient1
  • 之后,填入子项目名
    webclient2
  • 然后,点击File->Project Structure->Libraies,点击+,然后点击其中的Java项,获得以下界面,点击选中项,导入需要的java库
    webClient3
创建包
  • 将client项目中的intercepter和client完整复制过来就行了。
  • 重新生成server包
1
2
cd /home/share/workspace/myWebService/web-Client/src/main/java/
wsimport -keep http://127.0.0.1:8080/myWebService/rack\?wsdl
编辑web.xml文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
<display-name>Archetype Created Web Application</display-name>

<!--配置Spring-->
<context-param>
<param-name>contextConfigLocation</param-name> <!--Spring的本地配置文件-->
<param-value>classpath:bean-cxf.xml</param-value> <!-- 配置文件路径 -->
</context-param>

<!--监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

</web-app>
cxf配置文件

从cxf包中复制出cxf的三个配置文件到resources资源目录中,分别为:
cxf.xml
cxf.extension-soap.xml
cxf-servlet.xml

Spring配置文件
  • 创建Spring的配置文件bean-cxf.xml
  • 编辑Spring的配置文件bean-cxf.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<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">

<!--初始化cxf框架中的对象,将cxf的对象加入Spring框架的IOC容器中-->

<!--配置拦截器-->
<jaxws:client address="http://127.0.0.1:8080/myWebService/rack?wsdl" serviceClass="org.springframework.schema.beans.IUserService" name="userService">
<!--配置客户端的出拦截器-->
<jaxws:outInterceptors>
<bean class="webservice.intercepter.ClientIntercepter">
<!--给有参构造器赋值-->
<constructor-arg name="userName" value="rack"></constructor-arg>
<constructor-arg name="password" value="123456"></constructor-arg>
</bean>
</jaxws:outInterceptors>
</jaxws:client>
</beans>
更改测试类
  • 更改client端测试类TestApp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package webservice.client;

import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.schema.beans.IUserService;

public class TestApp {
public static void main(String[] args) {
//加载xml配置文件,获取Spring的IOC容器
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:bean-cxf.xml");
//通过对接口的反射,获取接口对应的实现的对象
IUserService userService = context.getBean(IUserService.class);
//可以使用获取的对象调用方法
String str = userService.getStr("hello");
System.out.println(str);
}
}

最终测试结果
lang
1
2
3
4
5
6
7
8
9
五月 29, 2019 12:25:48 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@51521cc1: startup date [Wed May 29 12:25:48 CST 2019]; root of context hierarchy
五月 29, 2019 12:25:48 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [bean-cxf.xml]
五月 29, 2019 12:25:49 下午 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@73ad2d6: defining beans [userService.proxyFactory,userService]; root of factory hierarchy
五月 29, 2019 12:25:50 下午 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
信息: Creating Service {http://server.webService/}IUserServiceService from class org.springframework.schema.beans.IUserService
加工后的数据:hello
文章作者: rack-leen
文章链接: http://yoursite.com/2019/05/28/Java/Java%E6%A1%86%E6%9E%B6/WebService/WebService%E5%BA%94%E7%94%A84-%E4%B8%8ESpring%E6%95%B4%E5%90%88/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 rack-leen's blog
打赏
  • 微信
  • 支付宝

评论