让CXF / JAXB生成JAXBElement <boolean>而不是boolean

时间:2018-04-26 11:28:03

标签: jaxb cxf spring-ws wsdl2java

我有一个WSDL文件,其中一个操作只返回boolean而不是带有字段的对象:

<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以返回JAXBElement<Boolean>而不是boolean并使用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作为返回类型的特定方法感兴趣。

0 个答案:

没有答案