Я использую простой интерфейс CXF, который использует XML-конфиги только вместо аннотаций для создания мыльных веб-сервисов.
Теперь я создал службу:
<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.
Перейдите на эту страницу. Ищите совместимость с XFire, но я пробовал много вещей, но не повезло избежать этого '/'. Пожалуйста, помогите людям, я даже открыл щедрость от моей маленькой репутации SO.
Наконец, мне удалось это сделать, благодаря списку рассылки apache и очень щедрым людям.
Все, что мне нужно, это добавить FactoryBean с самой первой конфигурацией, являющейся XFireCompatibilityServiceConfiguration
потому что это первое правило, которое возвращает 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 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>
И убедитесь, что область этого компонента является прототипом, если вы используете его для нескольких веб-сервисов.