CXF简单frontEnd中的TargetNamespace

时间:2014-05-30 08:24:52

标签: java web-services soap cxf

我正在使用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声誉中获得赏金的人。

1 个答案:

答案 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的范围是原型。