У меня есть файл 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);
}
Очевидно, что всякий раз, когда я заново генерирую классы Java из WSDL, эти ручные изменения игнорируются, поэтому я хотел бы знать, как мне настроить WSDL2Java
, чтобы генерировать сигнатуру метода по желанию.
Я уже пытался предоставить настройку файла привязки generateElementProperty="true"
, но это также изменило бы другие сгенерированные классы, заменив типы их полей на JAXBElement<T>
. Меня просто интересует тот конкретный метод, который переопределяет примитив boolean
в качестве возвращаемого типа.