我有一个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
作为返回类型的特定方法感兴趣。