2014-01-27 2 views
3

Я прочесывал межотраслевое решение, но я в недоумении, поэтому я надеюсь, что кто-то может указать мне в правильном направлении.JAXB marshaller бросает NullPointerException при обновлении с Java 6 на Java 7 в XMLSerializer

Я была поставлена ​​задача модернизировать приложение, которое делает использование JAXB2, для Java 7.

Так как я понимаю, JVM 7 может работать Java 6 скомпилированный код, это то, что я пытался первым, и столкнулся с Null Исключение указателя в классе com.sun.xml.internal.bind.v2.runtime.XMLSerializer.

Затем я перекомпилировал приложение на Java 7 и снова запустил эту же проблему.

Я использую следующие Oracle JDK: Java SE 7u51 приложение также использует Spring ОХМ, какие делегаты JAXB.

Вот трассировка стека Исключение нулевого указателя, что происходит, когда предводитель вызывается экземпляр JAXB ИАС:

> java.lang.NullPointerException at 
> com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:627) 
> at 
> com.sun.xml.internal.bind.v2.runtime.property.SingleElementLeafProperty.serializeBody(SingleElementLeafProperty.java:108) 
> at 
> com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:343) 
> at 
> com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:685) 
> at 
> com.sun.xml.internal.bind.v2.runtime.property.ArrayElementNodeProperty.serializeItem(ArrayElementNodeProperty.java:54) 
> at 
> com.sun.xml.internal.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(ArrayElementProperty.java:157) 
> at 
> com.sun.xml.internal.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:144) 
> at 
> com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:343) 
> at 
> com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsSoleContent(XMLSerializer.java:582) 
> at 
> com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeRoot(ClassBeanInfoImpl.java:325) 
> at 
> com.sun.xml.internal.bind.v2.runtime.property.ArrayReferenceNodeProperty.serializeListBody(ArrayReferenceNodeProperty.java:103) 
> at 
> com.sun.xml.internal.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:144) 
> at 
> com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:343) 
> at 
> com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsSoleContent(XMLSerializer.java:582) 
> at 
> com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeRoot(ClassBeanInfoImpl.java:325) 
> at 
> com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:483) 
> at 
> com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:308) 
> at 
> com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:236) 
> at 
> org.springframework.oxm.jaxb.Jaxb2Marshaller.marshal(Jaxb2Marshaller.java:648) 

Возможно, есть некоторые дополнительные настройки мне не хватает?

Любая помощь приветствуется. По мере необходимости предоставит дополнительную информацию.

Спасибо

+0

Какие банки вы имеете в своем классе пути или в WAR, EAR ? – mentallurg

+0

@mentallurg решение jethroo, опубликованное ниже, работало. Похоже, что с Java 7 один раз должен явно ссылаться на эту ссылку, потому что с Java 6 она не требовалась. Благодаря! – anojan

ответ

2

Попробуйте включить эталонную реализацию для JAXB-осущ, по крайней мере, решить эту проблему для this guy with the same error

<dependency> 
    <groupId>com.sun.xml.bind</groupId> 
    <artifactId>jaxb-impl</artifactId> 
    <version>2.2.7</version> 
</dependency> 
+0

Похоже, что это трюк! Огромное спасибо! Переполнение стека никогда не подводит меня :) – anojan

+0

приветствую вас, его хорошо иметь полную резервную копию почти бесконечного сообщества;) – jethroo