我正在使用CXF简单前端,它只使用XML配置代替创建soap Web服务的注释。
现在我已经创建了一项服务:
<simple:server id="locationSettingService"
serviceClass="com.my.own.webservice"
address="/LocationSettingWebService">
<simple:serviceBean>
<bean
class="com.my.own.webserviceImpl">
</bean>
</simple:serviceBean>
<simple:inInterceptors>
<ref bean="addressingHandler" />
<ref bean="authHandler" />
</simple:inInterceptors>
<simple:dataBinding>
<bean class="org.apache.cxf.aegis.databinding.AegisDatabinding" />
</simple:dataBinding>
</simple:server>
部署之后wsdl是:
<wsdl:definitions name="LocationSettingWebService" ... targetNamespace="http://own.my.com/">
它使用targetNamespace http://own.my.com/
我的问题是我不希望在上面的命名空间末尾使用正斜杠我只需要http://own.my.com
作为我的targetNamespace。所以我想使用简单的前端修改命名空间。有什么帮助吗?
更新: 经过长时间搜索并尝试了数百个解决方法。我想出了问题,CXF名称空间生成技术是在XFire之前的'/'。
转到this page。并寻找XFire兼容性,但我尝试了很多东西但没有运气逃避'/'。请帮助我甚至从我的小SO声誉中获得赏金的人。
答案 0 :(得分:1)
最后,我设法解决了这个问题,感谢apache的邮件列表及其非常慷慨的人。
我需要的只是添加FactoryBean,第一个配置为XFireCompatibilityServiceConfiguration
,因为它首先返回配置获胜的规则。
<simple:server id="locationSettingService"
serviceClass="com.my.own.webservice"
address="/LocationSettingWebService">
<simple:serviceFactory>
<ref bean="aegisCompatibilityFactoryBean"/>
</simple:serviceFactory>
<simple:serviceBean>
<bean
class="com.my.own.webserviceImpl">
</bean>
</simple:serviceBean>
<simple:inInterceptors>
<ref bean="addressingHandler" />
<ref bean="authHandler" />
</simple:inInterceptors>
<simple:dataBinding>
<bean class="org.apache.cxf.aegis.databinding.AegisDatabinding" />
</simple:dataBinding>
</simple:server>
和那个工厂bean本身
<bean id="aegisCompatibilityFactoryBean"
class="org.apache.cxf.service.factory.ReflectionServiceFactoryBean" scope="prototype">
<property name="serviceConfigurations">
<list>
<bean
class="org.apache.cxf.aegis.databinding.XFireCompatibilityServiceConfiguration">
</bean>
<bean class="org.apache.cxf.service.factory.DefaultServiceConfiguration" />
</list>
</property>
</bean>
如果您将它用于多个Web服务,请确保此bean的范围是原型。