Вручную назовите элемент JaxB тем же именем, что и другой элемент в WSDL в Spring. - PullRequest
0 голосов
/ 11 декабря 2018

Я использую apache cxf в Spring через опцию «WSDL to Java Code ...» для генерации мыльного клиента из WSDL третьей стороны (не может быть изменено).WSDL имеет следующую структуру:

<Test>
    <Example>
        <Example>
        </Example>
        <Example>
        </Example>
    </Example>
</Test>

Где первый «Пример» на самом деле является массивом.При генерации клиента из WSDL объект домена разрешается в ArrayOfExample, что нормально.Однако при отправке мыльного сообщения через клиента XML именует поле в ArrayOfExample "вместо" Example ", что вызывает сбой службы SOAP из-за некоторой проверки (wsdl ожидает Пример вместо ArrayOfExample)

<Test>
    <ArrayOfExample>
        <Example>
        </Example>
        <Example>
        </Example>
    </ArrayOfExample>
</Test>

Я попытался вручную переименовать имя этого объекта, используя

@XmlElement(name = "Example")
public String getExample() { }

, но в результате я получил следующую ошибку:

IllegalAnnotationsException: Class has two properties of same name

Я неу меня есть доступ для изменения службы SOAP.

К вашему сведению: я просматриваю XML, выполняя следующие действия:

StringWriter sw = new StringWriter();
JAXB.marshal(mySoapRequestObject, sw);
String xmlString = sw.toString();

Что можно сделать, чтобы убедиться, что используемый в нем XML использует "Пример "вместо" ArrayOfExample "?

...