IllegalAnnotationExceptions: Два класса имеют одинаковое имя типа XML.Код, сгенерированный плагином CXF - PullRequest
0 голосов
/ 13 марта 2019

У меня есть два WSDL, из которых я генерирую код Java с помощью maven cxf-codegen-plugin (org.apache.cxf).Оба они используют одно и то же пространство имен и содержат сложные типы с одинаковыми именами, что и стало причиной возникновения проблем с конфликтующими именами классов Java.Я решил решить ее, используя bindings.xml:

<jaxws:bindings
        xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
        xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
        xmlns="http://www.w3.org/2001/XMLSchema"
        version="2.1">
    <jaxws:bindings wsdlLocation="./TaskService_v1.wsdl" node="xsd:schema">
        <jaxb:schemaBindings>
            <jaxb:nameXmlTransform>
                <jaxb:typeName prefix="TaskService" />
                <jaxb:elementName prefix="TaskService" />
            </jaxb:nameXmlTransform>
        </jaxb:schemaBindings>
    </jaxws:bindings>
</jaxws:bindings>

Это переименовало, например, сгенерированный класс B2BParameter в TaskServiceB2BParameter, поэтому я перестал получать конфликтующие проблемы с именами, но столкнулся с другой проблемой:

Unknown JAXB exception; nested exception is com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 4 counts of IllegalAnnotationExceptions
Two classes have the same XML type name "{http://serviceinterface.b2b.adx.com}B2BParameter". Use @XmlType.name and @XmlType.namespace to assign different names to them.
this problem is related to the following location:
    at com.adx.b2b.serviceinterface.TaskServiceB2BParameter
this problem is related to the following location:
    at com.adx.b2b.serviceinterface.B2BParameter
    at protected java.util.List com.adx.b2b.serviceinterface.B2BRequest.parameter
    at com.adx.b2b.serviceinterface.B2BRequest
...

Это сгенерированный TaskServiceB2BParameter.java:

package com.axd.b2b.serviceinterface_v1;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "B2BParameter", propOrder = {
    "name",
    "value"
})
public class TaskServiceB2BParameter {
    ...
}

Как обновить мой bindings.xml, чтобы соответствующим образом изменить @ XmlType.name?Или мне действительно нужно изменить целевой пакет?Заранее спасибо!

...