日期:2014-05-19  浏览次数:20711 次

CXF整合Spring问题
刚学CXF,还有很多问题不太清楚。下面是CXF的spring配置文件
XML code

<!-- 通过Spring创建数据绑定的类-->
    <bean id="aegisBean" class="org.apache.cxf.aegis.databinding.AegisDatabinding" />

    <!-- 创建服务的工厂 -->
    <bean id="jaxWsServiceFactoryBean" class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean">
        <property name="wrapped" value="true" />
        <property name="dataBinding" ref="aegisBean" />
    </bean>


    <jaxws:endpoint id="functionFacadeService"
        implementor="com.fendou.authority.service.impl.FunctionFacade" address="/functionFacadeService" >
        <jaxws:serviceFactory>
            <ref bean="jaxWsServiceFactoryBean" />
        </jaxws:serviceFactory>
    </jaxws:endpoint>
    <jaxws:endpoint id="functionHelperService"
        implementor="com.fendou.authority.service.impl.FunctionHelper" address="/functionHelperService" >
        <jaxws:serviceFactory>
            <ref bean="jaxWsServiceFactoryBean" />
        </jaxws:serviceFactory>
    </jaxws:endpoint>



我想知道:
  <bean id="aegisBean" class="org.apache.cxf.aegis.databinding.AegisDatabinding" />

<!-- 创建服务的工厂 -->
<bean id="jaxWsServiceFactoryBean" class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean">
<property name="wrapped" value="true" />
<property name="dataBinding" ref="aegisBean" />
</bean>
这段代码可以不用也能生成wsdl,但是一旦客户端调用服务呢,没配工厂,会怎样呢?
JaxWsServiceFactoryBean这是创建服务的工厂,还有aegisBean比较神秘。我想请高人解读下这段代码...

还有一个问题就是:
如果客户端调用一个 add(User user) 方法,那么是不是要用JAXB绑定?可以给个具体例子吗?

------解决方案--------------------
cxf默认使用的绑定方式为jaxb,你可以通过cxf提供的客户端来调用发布的web service,


客户端实例如下:

1.4. 实现客户端

服务器端配置完毕,下面我们来编写客户端,调用服务器端发布的服务。简便起见,我们就直接在jsp里写调用Web Service的代码了:

<%@page import="com.family168.cxfbook.HelloWorld"%>
<%@page import="org.apache.cxf.jaxws.JaxWsProxyFactoryBean"%>
<%
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(HelloWorld.class);
factory.setAddress("http://localhost:8080/ch101/services/HelloWorld");
HelloWorld client = (HelloWorld) factory.create();
String result = client.hello("Lingo");
out.println(result);
%>


这里的代码是通过JaxWsProxyFactoryBean来动态生成客户端代理,我们需要传入服务接口 HelloWorld和发布服务的地址,然后调用create()方法创建动态代理,就可以通过代理实现对Web Service的调用了。

这里我们直接调用hello()方法,传入"Lingo"作为参数,将返回的结果显示在页面上,最终在页面上可以得到Hello Lingo的内容。查看服务器控制台也可以看到打印出Lingo的内容,也就说明我们成功的通过客户端调用了Web Service并获得了返回结果。

Hello Lingo

------解决方案--------------------
很爽有什么用?

要知其然,还要知其所以然。如果对 JAXB 不会灵活运用的话,在使用中可能会产生很多的问题。比如参数或者返回值是个 Map 什么的。

要使用 WebServices 建议从最基本的 SOAP 开始看起,使用 SOAP XML 向 endpoint 发送 POST 请求是调用 WebServices,不带参数向 endpoint 发送 GET 请求是获得 WSDL
------解决方案--------------------
shouoy
------解决方案--------------------
不懂,但是还要顶你一下