代替这个

@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.JaxWsServerFactoryBeangetExtraClass()传递
您必须为自己的名称空间(例如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/

10-10 00:42