通过spring 配置实现 webservice 的配置有两种,一种是jaxws:endpoint ,另外一种是jaxws:server
- jaxws的target namespace是 http://cxf.apache.org/jaxws,由于目前CXF还处于incubating 的状态,没有cxf.apache.org这个域名。为了能让Spring来进行xml文档校验的时候能够获得jaxws.xsd,Spring提供了一种通过ClassPath中获得jaxws.xsd方法。具体步骤如下就是在META-INF中添加spring.schema的方式将jaxws.xsd与对应的URI进行绑定,同时也需要将NamespaceHandler注册进Spring中。
- jaxws:endpoint 与 jaxws:server是对等的,他们都是对Web Services 服务端的描述。只是在JAXWS RI在最初的实现过程中,对于Server端的配置是通过Endpoint来进行描述的,而且JAXWS API也定义了Endpoint,因此为了保持与JAXWS API的一致性,在这里设置了jaxws:endpoint。
- jaxws front end 与 simple front end之间的关系。 CXF除了提供JAXWS 的实现,也延续Xfire的风格提供了简单POJO Web Services的实现前端 simple front end。Jaxws front end 继承了simple front end的绝大部分方法,它与simple front end 的最大不同就是提供了Web Services Meta data (JSR 181)的支持,提供从Annotation中获取Web Services的能力。对于 jaxws:server 以及 jaxws:client 你可以在 simple front end中找到对应的 simple:server , simple:client。
jaxws:server的发布方式
<bean id="address" class="test.AddressManager" />
<bean id="inInter" class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
<bean id="outInter" class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
<!-- 注意下面的address,这里的address的名称就是访问的WebService的name -->
<jaxws:server id="addressserver" serviceClass="test.IAddressManager" address="/Address">
<jaxws:serviceBean>
<ref bean="address"/> <!-- 要暴露的bean 的引用-->
</jaxws:serviceBean>
<jaxws:inInterceptors>
<ref bean="inInter"/>
</jaxws:inInterceptors>
<jaxws:outInterceptors>
<ref bean="outInter"/>
</jaxws:outInterceptors>
</jaxws:server>
jaxws:endpoint的发布方式
<!-- test.AddressManager是="test.IAddressManager接口的实现, 这种方法应该不能从Ioc中引用对象 -->
<ref bean="inInter"/>
</jaxws:inInterceptors>
<jaxws:outInterceptors>
<ref bean="outInter"/>
</jaxws:outInterceptors>
</jaxws:endpoint>