欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spring + cxf 集成开发 javawsdlcxfspringant

程序员文章站 2022-07-16 17:00:11
...

1. 使用 ant 根据 wsdl 文件生成 java 文件

<target name="cxf" depends="init">
    <java classname="org.apache.cxf.tools.wsdlto.WSDLToJava" fork="true">
      <arg value="-client"/>
      <arg value="-d"/>
      <arg value="${srcjava.dir}"/>
      <arg value="wsdl/xxx.wsdl"/>
      <classpath>
        <path refid="compile.classpath"/>
      </classpath>
    </java>
</target>

<target name="cxfjar" depends="cxf,compile">
    <jar destfile="${lib.dir}/cxf-xxx.jar">
      <manifest>
        <attribute name="Csapi-Built-By" value="${user.name}"/>
        <attribute name="Csapi-Build-Date" value="${today}"/>
        <attribute name="Csapi-Release-Tag" value="$Name:  $"/>
      </manifest>
      <fileset dir="${build.dir}/chsi/WEB-INF/classes">
        <include name="**/com/xxx/xxx/xxx/handlers/**"/>
      </fileset>
    </jar>
</target>



2. 把生成的cxf java文件 放入 spring 容器中xxx-cxf.xml:

<bean id="xxxServiceFactory" 
        class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
    <property name="serviceClass" 
            value="WSDL2JAVA生成的业务接口类"/>
    <property name="address" 
              value="${xxx.wsdl.address}"/>
</bean>

<bean id="serviceXxxService" 
        class="WSDL2JAVA生成的业务接口类" 
        factory-bean="xxxServiceFactory" 
        factory-method="create"/>


 

3.调用或组合webservice提供的方法 生成具体的业务方法:

<bean id="xxxService" 
        class="com.xxx.xxx.XxxServiceImpl" 
        parent="baseService">
         <property name="itsXxxService" ref="serviceXxxService"/>
    <property name="interfaceClassName" value="XxxService"/>
</bean>


注: 其中org.apache.cxf.jaxws.JaxWsProxyFactoryBean起到关键作用。
在其父类ClientProxyFactoryBean中设置了serviceClass和address属性,ClientProxyFactoryBean又代理(组合方法)了ClientFactoryBean类,ClientFactoryBean类的create()方法会生成需要的bean。

ClientProxyFactoryBean的create()方法中

Object obj = Proxy.newProxyInstance(clientFactoryBean.getServiceClass().getClassLoader(), getImplementingClasses(), handler);

其中handler就是由ClientFactoryBean类的create()方法会生成的。


解释了clientFactoryBean.getServiceClass():
public void setServiceClass(Class serviceClass)
{
    clientFactoryBean.setServiceClass(serviceClass);
}


利用clientFactoryBean.getServiceClass()、getImplementingClasses()生成了代理bean。