jaxb - 让 CXF/JAXB 生成 JAXBElement而不是布尔值
问题描述
我有一个 WSDL 文件,其中许多操作之一只是返回 aboolean
而不是带有字段的对象:
<xs:element name="isUserActive" type="xs:boolean" />
为了生成 Java 类,我使用 CXF: org.apache.cxf.tools.wsdlto.WSDLToJava
。生成Port
的包含以下方法签名:
@WebMethod(action = "isUserActive")
@WebResult(name = "isUserActiveResponse", targetNamespace = "http://company.com/1.0", partName = "parameters")
public boolean isUserActive(
@WebParam(partName = "parameters", name = "isUserActiveRequest", targetNamespace = "http://company.com/1.0") com.company.IsUserActiveRequest parameters
) throws Exception;
我也得到一个ObjectFactory
布尔值:
@XmlElementDecl(namespace = "http://company.com/1.0", name = "isUserActiveResponse")
public JAXBElement<Boolean> createIsUserActiveResponse(Boolean value) {
return new JAXBElement<Boolean>(_IsUserActiveResponse_QNAME, Boolean.class, null, value);
}
不幸的是,Spring Boot 不理解该映射并在客户端调用该端点时引发异常: No adapter for endpoint [public boolean ...
因此我手动将生成的更改Port
为返回 aJAXBElement<Boolean>
而不是 aboolean
并使用在ObjectFactory
实现中创建这样的对象:
@PayloadRoot(namespace = TARGET_NAMESPACE, localPart = "isUserActiveRequest")
@ResponsePayload()
public JAXBElement<Boolean> isUserActive(@RequestPayload IsUserActiveRequest request) {
ObjectFactory factory = new ObjectFactory();
boolean result = doSomething();
return factory.createIsActiveResponse(result);
}
显然,每当我从 WSDL 重新生成 Java 类时,这些手动更改都会被丢弃,所以我想知道我应该如何配置WSDL2Java
才能根据需要生成方法签名。
我已经尝试提供绑定文件设置generateElementProperty="true"
,但这也会通过将它们的字段类型替换为JAXBElement<T>
. 我只是对覆盖原语boolean
作为返回类型的特定方法感兴趣。
解决方案
推荐阅读
- mysql - 获取具有超过 2 列相同的行组
- angular - 使用 Angular 和 Cypress 测试部分相同的 HTTP 路由
- nullpointerexception - 错误 org.apache.struts2.dispatcher.defaultdispatchererrorhandler
- php - 使用与 MySQL 相关的 PHP 来理解 OOP 的问题
- mongodb - 'mongoimport' 未被识别为内部或外部命令
- python - 如何在“DataFrame.to_json”期间获得浮点数的精确表示?
- python - 如何在没有 Anaconda 的情况下安装 Python 包以与 Spyder 一起使用
- functional-programming - 函数和数据有什么区别?
- flutter - 如何按宽度将图像拉伸到屏幕边框?
- angular - Angular Async Pipe 未订阅 EventEmitter 的初始值