Ошибка JAXB: имеет более одного сопоставления. Из-за двух фабрик объектов с одним и тем же компонентом

У меня есть два проекта Maven JAXB.

A: Основной проект Maven JAXB заглушки XSD, он содержит BASKET.xsd

B: Maven JAXB заглушает пользовательский проект, который хочет обернуть BASKET.xsd в свои собственные объекты.

Это приводит к ДВУМ фабрикам объектов (разным пакетам), оба объявляют следующее...

@XmlElementDecl(namespace = "http://www.bob.org/bob/namespace/", name = "Basket")
public JAXBElement<BasketType> createBasket(BasketType value) {
    return new JAXBElement<BasketType>(QNAME, BasketType.class, null, value);
}

Это поколение выполняется с помощью этого плагина... org.jvnet.jaxb2.maven2 maven-jaxb2-plugin 0.13.2

При запуске приложения я получаю CXF-RT-Frotnend-JaxRS 3.1.11 с ошибкой...

017-07-03 14:38:54,613845801: WARN  : [RMI TCP Connection(3)-127.0.0.1] [] org.apache.cxf.jaxrs.utils.ResourceUtils: No JAXB context can be created
com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
The element name {http://www.bob.org/bob/namespace/}Basket has more than one mapping.
    this problem is related to the following location:
        at public javax.xml.bind.JAXBElement com.bob.bean.ObjectFactory.createBasket(org.bob.BasketType)
        at com.bob.bean.ObjectFactory
    this problem is related to the following location:
        at public javax.xml.bind.JAXBElement org.userservice.bean.ObjectFactory.createBasket(org.bob.BasketType)

Это не было ошибкой, пока я не обновился с CXF 2.7.7 до 3.1.11.

Кто-нибудь знает, есть ли способ заставить maven-jaxb2-plugin не генерировать метод createBasket(..) в UserService ObjectFactory??

Или заставить CXF принимать два идентичных метода для двух классов ObjectFactoty?


person jeff porter    schedule 03.07.2017    source источник
comment
Вы проверили это stackoverflow.com/questions/10795793/   -  person prasad    schedule 03.07.2017
comment
Да, я читал это.   -  person jeff porter    schedule 03.07.2017


Ответы (1)


Мое решение было изменить

<property name="singleJaxbContext" value="true"/>

to

<property name="singleJaxbContext" value="false"/>

например в моем приложении-config.xml

  <bean id="jaxbextprovider" class="org.apache.cxf.jaxrs.provider.JAXBElementProvider">
    <property name="singleJaxbContext" value="false"/>
  </bean>
person jeff porter    schedule 01.08.2017
comment
Можете ли вы дать объяснение вашего решения? Спасибо. - person Marco; 07.11.2019