代替这个
@XmlSeeAlso({User.class,Role.class,Function.class})
我想要这样的东西:
@XmlSeeAlso(Access.getWebServiceClasses())
可能吗?
我想要这个,因为我的Web服务仅包含接口,如果我更改实现,我只想在自己的工厂中进行更改,以便它返回正确的类,而不必在Web服务本身中进行更改。
最佳答案
这是不可能的,因为注释元素必须是简单的类型(字符串,基元或类(请参见annotations))。
但是(在CXF中)可以覆盖org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.getExtraClass()
方法,该方法默认情况下检查接口的@XmlSeeAlso
。我的实现返回其他ObjectFactory
类。
您可能会在CXF的Spring XML配置中使用<jaxws:endpoint />
。为了能够覆盖此方法,您创建了几个类:org.apache.cxf.jaxws.spring.EndpointDefinitionParser
必须使用从org.apache.cxf.jaxws.spring.EndpointDefinitionParser.SpringEndpointImpl
派生的类(使用JAXWS 2.1时)或从org.apache.cxf.jaxws22.spring.JAXWS22SpringEndpointImpl
(JAXWS 2.2)派生的类
此类必须调用super.setServiceFactory()
并通过覆盖了org.apache.cxf.jaxws.support.JaxWsServerFactoryBean
的getExtraClass()
传递
您必须为自己的名称空间(例如org.apache.cxf.jaxws.spring.NamespaceHandler
)提供自己的http://cxf.apache.org/jaxws/dynamic
(可以创建派生类),该名称空间将为jaxws:endpoint
元素注册自己的解析器:
registerBeanDefinitionParser(“ endpoint”,new EndpointDefinitionParser());
(抱歉,我无法提供完整的示例-我是从内存和CXF的源代码编写的)
关于java - 可以动态使用@XmlSeeAlso吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8759151/