CXF应用过程
来源:互联网 发布:apache ab 多个url 编辑:程序博客网 时间:2024/06/09 11:07
@北京汉庭,唉
按照http://www.cnblogs.com/hoojo/archive/2011/03/29/1998856.html中描述的完成了helloworld练习,拦截器练习,传输复杂对象练习,spring整合webservice练习(只是整合了server,client到时根据请求地址自动生成代码)。
现在我需要在两个项目间进行互相调用接口练习。
预定在a项目和b项目之间进行,首先把cxf必须用到的三个jar包放入lib中(XmlSchema-1.4.7.jar,wsdl4j-1.6.2.jar,cxf-2.3.3.jar),然后在web.xml中加入cxf的servlet;最后新建一个applicationContext-server.xml配置文件来整合sping和cxf。
第一步:实现两个项目之间的通信;
第二步:互相调用webservice更新对方的数据库;
第三步:根据返回值给出提示。
记录:
如果web.xml文件中,cxfservlet的url-partten写成/*的话,项目里所有的请求都会被过滤掉,只有webservice的才能被正确响应
所以,这里我改成了/webservice/*,
<!-- 接口整合 --> <servlet> <servlet-name>CXFService</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>CXFService</servlet-name> <url-pattern>/webservice/*</url-pattern> </servlet-mapping>
但是在spirng整合文件中的address没有变化(文章最下面会给出完整配置文件):
<jaxws:serverid="t303Service"serviceClass="com.cxf.server.IWST303"address="/wst303">
最后请求的路径为:http://localhost:8081/a项目/webservice/wst303?wsdl
如果需要调用接口更新数据,那么还要进行事物管理。
最开始,我只是给service加了注解,
@WebService@SOAPBinding(style=Style.RPC)@Service 加了这个注解public class WST303 implements IWST303{ @Resource(name = "t303DaoImpl") // 注入DAO T303Dao t303Dao; public String updateT303(@WebParam(name="myid")String id,@WebParam(name="level")String level){ T303 t303 = t303Dao.get(id); t303.setLevel(level); t303Dao.update(t303); return "Y"; }}
后来发现调用接口可以正常进这个方法体,但是走到根据ID取值的时候就报了这个异常:
No Hibernate Session boundto thread, and configuration does not allow creat
到网上查了很多,但是都没用针对我这个情况的。最后我把这个类继承了a项目里面的一个基类,发现可以正常调用接口并修改数据了。
@WebService@SOAPBinding(style=Style.RPC)@Service public class WST303 extends BaseServiceImpl<T303, String> implements IWST303{
接口类也加了这么一段:
@WebServicepublic interface IWST303 extends BaseService<T303, String>
好是好了,但知其然不知其所以然,这是不行的,为啥继承了基类就可以正常调用了呢?
后来我在基类发现了这么个东西:
@Transactional // 注册事物
public class BaseServiceImpl
现在明白了,最后的代码为:
@WebServicepublic interface IWST303… @WebService@SOAPBinding(style=Style.RPC)@Transactionalpublic class WST303 implements IWST303…
测试通过!
后记:
开发完成了webservice接口,后面的就是调试客户端了,客户端的代码相对简单,大部分可以自动生成,只是调用的地方需手动写。
然后点finish就生成了客户端的代码,
然后新建一个类(不新建也可),调用我定义的那个ws接口:
public String updateT303(String id,Stringlevel){ IWST303ServiceLocator serviceLocator = new IWST303ServiceLocator(); IWST303 service ; try { service= serviceLocator.getIWST303Port(); return service.updateT303(id, level); } catch (ServiceException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } return null; }
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
spring整合CXF配置文件:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:jaxws="http://cxf.apache.org/jaxws" <!-- webservice整合必须 --> xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <!-- 导入webservice整合必须的三个默认配置文件,虽然最终我也没找到这三个玩意在哪 --><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="t303ServiceBean" class="com.veivo.ppq.webservice.server.WST303" /><bean id="inMessageInterceptor" class="com.veivo.ppq.webservice.server.MessageInterceptor" ><constructor-arg><value>receive</value></constructor-arg></bean><bean id="outLoggingInterceptor" class="org.apache.cxf.interceptor.LoggingOutInterceptor" /><!-- 注意下面的address,这里的address的名称就是访问的WebService的name --><jaxws:server id="t303Service" serviceClass="com.veivo.ppq.webservice.server.IWST303" address="/wst303"><jaxws:serviceBean><!-- 要暴露的 bean 的引用 --><ref bean="t303ServiceBean" /></jaxws:serviceBean><jaxws:inInterceptors><ref bean="inMessageInterceptor" /></jaxws:inInterceptors><jaxws:outInterceptors><ref bean="outLoggingInterceptor" /></jaxws:outInterceptors></jaxws:server></beans>
- CXF应用过程
- CXF 应用
- webservice应用 cxf框架
- Apache CXF 应用小结
- CXF框架快速应用
- apche CXF简单应用
- apache cxf wsdl2java 简单应用
- Apache cxf JaxWs基本应用
- Apache cxf JaxRs基本应用
- CXF 创建WebService应用图解
- Apache cxf JaxWs基本应用
- Apache cxf JaxRs基本应用
- Apache cxf JaxWs基本应用
- cxf+Spring的webservice应用
- CXF的前端应用简介
- CXF Web Service简单应用
- Apache cxf JaxWs基本应用
- Apache CXF前端应用(Frontend)
- 几种压缩算法原理介绍
- 2013-Java基础面试题-异常处理
- Flex可视化组件相关基础知识
- [leetcode刷题系列]Remove Element
- 关于kindeditor和vaildform(二)
- CXF应用过程
- 网页如何防止刷新重复提交与如何防止后退的解决方法
- 面试70问 经典回答
- java反射
- 关于const型引用与非const型引用
- Android framework中修改或者添加资源无变化或编译不通过问题详解
- apq 8064 uart debug
- 为Ruby On Rails开发者准备的5款IDE
- poj 3090