Apache CXF 使附加类对于 JAXB 上下文“已知”

2024-04-26

如何配置 Apache CXF 客户端和服务器在将 DTO 序列化为 XML 时将附加类传递给 JAXBContext?

我无法使用 @XmlSeeAlso 注释,因为这些类在带有数据协定的 jar 编译时是未知的,但在客户端编译时是已知的。

在客户端我尝试使用:

Service service = Service.create(wsdlURL, serviceName, new UsesJAXBContextFeature(MyFactory.class));
T client = service.getPort(clazz);

但我得到例外告诉我 CXF 不支持此功能。


您也可以使用注释来完成此操作。

与 Spring Boot CXF 启动器配合使用

@Autowired
private Bus bus;

@Bean
public Endpoint createMyEndpoint() {

    JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
    Map<String, Object> properties = new HashMap<>();
    properties.put("jaxb.additionalContextClasses", getExtraClasses());
    factory.setProperties(properties);

    Endpoint endpoint = new EndpointImpl(bus, new MyWebService(),factory);
    endpoint.setProperties(new HashMap<>());
    endpoint.publish("/v1/service");
    return endpoint;
}

@SuppressWarnings("rawtypes")
private Class[] getExtraClasses() {
    List<Class> extraClassList = new ArrayList<>();

    extraClassList.add(A.class);
    extraClassList.add(B.class);

    return  extraClassList.toArray(new Class[extraClassList.size()]);
}

...

@javax.jws.WebService
public class MyWebService implements MyPortType {
    //...
}

我想通了

https://issues.apache.org/jira/browse/CXF-340 https://issues.apache.org/jira/browse/CXF-340

https://github.com/apache/cxf/blob/5578e0b82bcd4ea19c1de5b4a008af35f9c8451b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/EndpointImpl.java#L164 https://github.com/apache/cxf/blob/5578e0b82bcd4ea19c1de5b4a008af35f9c8451b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/EndpointImpl.java#L164

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Apache CXF 使附加类对于 JAXB 上下文“已知” 的相关文章

随机推荐