2013-07-03 4 views
2

Я пытаюсь использовать родниковую (@Autowire аннотацию в JAXB класса модели)Использование множественного наследования в EclipseLink Moxy

..... 

@XmlAttribute(name = "object-id") 
@XmlSchemaType(name = "positiveInteger") 
protected BigInteger objectId; 

@XmlTransient 
@Autowired MediationCacheManager cacheManager; 

Где MediationCacheManager протягивается от трех интерфейсов

О создании JAXBContext я поймать исключение: Exception [EclipseLink-50089] (Eclipse Persistence Services - 2.5.0.v20121116-8650760): org.eclipse.persistence.exceptions.JAXBException Exception Description: The java interface com.netcracker.mediation.common.caches.api.MediationCacheManager can not be mapped by JAXB as it has multiple mappable parent interfaces. Multiple inheritence is not supported

конечно я понимаю, что EclipseLink не поддерживает множественное наследование, но как я могу пропустить cacheManager поле из JAXB обработка? Что касается меня - это должно быть сделано аннотацией XmlTransient, но это не работа. У вас есть идея?

+0

См: http://stackoverflow.com/questions/17399333/xml-transient-not-working-jaxbmoxy –

ответ

2

Проблема, которую вы видите, соответствует ошибке (http://bugs.eclipse.org/411993), которую мы исправили в потоках EclipseLink 2.5.1 и 2.6.0. Вы можете скачать ночную сборку по следующей ссылке, начиная 4 июля 2013:


Временное решение

Вы можете использовать внешнее отображение документа Moxy, чтобы переопределить супертип от MediationCacheManager, чтобы сделать ваш случай использования (см.: http://blog.bdoughan.com/2010/12/extending-jaxb-representing-annotations.html):

oxm.xml

<?xml version="1.0"?> 
<xml-bindings 
    xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm" 
    package-name="forum17458822"> 
    <java-types> 
     <java-type name="MediationCacheManager" super-type="java.lang.Object"/> 
    </java-types> 
</xml-bindings> 

Demo

import java.util.*; 
import javax.xml.bind.JAXBContext; 
import org.eclipse.persistence.jaxb.JAXBContextProperties; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     Map<String, Object> properties = new HashMap<String, Object>(1); 
     properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, "forum17458822/oxm.xml"); 
     JAXBContext jc = JAXBContext.newInstance(new Class[] {Foo.class}, properties); 
    } 

} 
Смежные вопросы