求教CXF的WebService启动的原理或流程以解决启动报错问题

soma_cruz 2010-03-30 10:13:53
第一次用CXF的WebService, 遇到困难无数... 好不容算是可以启动起来然后用URL方式访问了, 但是从其他项目里访问又出了问题. 访问方式如下:

        
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
...
XXXService xxxService = (XXXService) factory.create();


总之就是创建一个工厂类然后设置一些属性最后让工厂类创建WebService. 但是在执行 "create()" 方法时会报一个错误, 就是说本项目里的 "sessionFactory" 创建失败, 是因为 "sessionFactory" 里面引用的一个Bean未定义云云... 那么这就有两个问题了:

1. WebService的创建我认为应该是在WebServie端的, 为什么要读我本项目的配置文件? 它的创建和我的项目有什么关系? 我的项目应该只是调用它而已啊.

2. 确实, 我的 SessionFactory 里引用的一个 Bean 是定义在其他的配置文件里的, 但是已经在 Struts 配置文件里这种方式关联上了:

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="xxx, xxx, xxx, ..." />
</plug-in>


配置文件肯定是没写错的, 否则项目启动肯定就会报错了; 但是它读我的配置文件就只知道读 applicationContext.xml 不知道读其他关联的文件么? 反正无论如何我就奇怪了为什么调用一个WebService还要读我自己的配置文件还要管我怎么配置; 那这还怎么体现所谓的 "调用"?! 请大家无论如何给点儿回复吧, 弄了快一天了, 没结果...
...全文
518 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
palgerrard 2010-04-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 soma_cruz 的回复:]
引用 1 楼 xyz20003 的回复:
问题1:cxf与spring绑定很死,它需要通过spring读取cxf本身的配置文件,然后才能启动自己的bus主线,以及一大堆的拦截器实现web service。
所以,你应该认为cxf是在读取自己需要的配置文件。而不是与你自己的项目发生了绑定。

问题2:struts里配置,只能说明你的struts和spring整合了。如果你不告诉cxf应该去读……
[/Quote]
我的理解是:不是CXF去读取那些文件,主动权在Spring这里。Spring读取配置的例如:applicationContext-webservice.xml 。如果是server端,spring会实例化工厂JaxWsServerFactoryBean,根据配置发布服务。
如果是client端,spring会实例化工厂JaxWsProxyFactoryBean,生成soap,去和server端通信。
palgerrard 2010-04-02
  • 打赏
  • 举报
回复
我的帖子:
http://topic.csdn.net/u/20100402/09/bc9a108a-6be3-45f7-ac4d-02421e77ddc4.html?seed=263032879&r=64397040#r_64397040
看看。

Spring整合的CXF,两端都要配置,我的帖子中有:它们都是由Spring工厂读取,看我web.xml如下配置:这样就可以解析所有src底下配置的各模块的applicationContext-*.xml 文件。所有文件中的bean都是一起管理的,虽然分了好多文件。

例如:src/application/authority/applicationContext-dao.xml
src/application/authority/applicationContext-service.xml
src/application/authority/applicationContext-action.xml
src/application/authority/applicationContext-webservice.xml

src/application/salary/applicationContext-dao.xml
src/application/salary/applicationContext-service.xml
src/application/salary/applicationContext-action.xml
src/application/salary/applicationContext-webservice.xml

<!-- 加载 Spring的配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:application/*/applicationContext-*.xml</param-value>
</context-param>
soma_cruz 2010-03-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xyz20003 的回复:]
问题1:cxf与spring绑定很死,它需要通过spring读取cxf本身的配置文件,然后才能启动自己的bus主线,以及一大堆的拦截器实现web service。
所以,你应该认为cxf是在读取自己需要的配置文件。而不是与你自己的项目发生了绑定。

问题2:struts里配置,只能说明你的struts和spring整合了。如果你不告诉cxf应该去读取哪些配置文件,cxf就只能读取默认的app……
[/Quote]

那再问一下啊... 就是怎么告诉 CXF 应该读哪些文件呢?? 这个是不是应该在 WebService 端设置吧?
soma_cruz 2010-03-30
  • 打赏
  • 举报
回复
好快喔~ 谢谢楼上两位; 我先试试去, 大家继续哈~~~
临远 2010-03-30
  • 打赏
  • 举报
回复
问题1:cxf与spring绑定很死,它需要通过spring读取cxf本身的配置文件,然后才能启动自己的bus主线,以及一大堆的拦截器实现web service。
所以,你应该认为cxf是在读取自己需要的配置文件。而不是与你自己的项目发生了绑定。

问题2:struts里配置,只能说明你的struts和spring整合了。如果你不告诉cxf应该去读取哪些配置文件,cxf就只能读取默认的applicationContext.xml,cxf不会主动去找struts2里配置的spring的xml的。因为你的cxf和struts没有进行整合。


81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧