2012-01-06 42 views
2

取而代之的是可能使用@XmlSeeAlso dyncamiclly?

@XmlSeeAlso({User.class,Role.class,Function.class}) 

我想是這樣的:

@XmlSeeAlso(Access.getWebServiceClasses()) 

這可能嗎?

我想這個,因爲我的webservice只包含接口,如果我改變實現,我只想在我的工廠更改,所以它返回正確的類,而不必在web服務本身進行更改。

回答

1

不是可能的,因爲註釋元素必須是簡單類型(字符串,基元或類(參見annotations)。

這是可能然而(在CXF)重寫org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.getExtraClass()方法,該方法,通過缺省。檢查接口的@XmlSeeAlso我實現返回額外ObjectFactory

有機會,你在CXF的Spring XML配置使用<jaxws:endpoint />爲了能夠覆蓋這個方法,你必須創建幾類:

  1. org.apache.cxf.jaxws.spring.EndpointDefinitionParser必須使用(使用JAXWS 2.1時)或從org.apache.cxf.jaxws22.spring.JAXWS22SpringEndpointImpl(JAXWS 2.2)
  2. 這個類必須調用super.setServiceFactory()通過org.apache.cxf.jaxws.support.JaxWsServerFactoryBean與被覆蓋的getExtraClass()
  3. 您必須提供自己的org.apache.cxf.jaxws.spring.NamespaceHandler(從org.apache.cxf.jaxws.spring.EndpointDefinitionParser.SpringEndpointImpl派生類你可以創建派生類)爲你自己的名字空間(例如http://cxf.apache.org/jaxws/dynamic)這將註冊您自己的分析器爲jaxws:endpoint元素:

    registerBeanDefinitionParser(「endpoint」,new EndpointDefinitionParser());

(對不起,我不能提供完整的例子 - 我從內存中寫入和CXF的源代碼)