将现有的jaxb(同时使用jaxb1.0.1和jaxb 2.0.5)应用程序(在JBoss 4.3和jdk5上)迁移到jaxb 2.1.10(随jdk6提供,更新jdk1.6.0_30)。
我无法修改客户提供的模式
我已经从SunRI中删除了jaxws20、jwsdp、jaxp和jaxb-jar的所有引用,并且只使用jdk6提供的jar。
有什么线索吗??
Caused by: com.sun.istack.SAXException2: Instance of “com.foo.Bar” is substituting “java.lang.Object”, but “com.foo.Bar” is bound to an anonymous type com.foo.Bar@a2e3ss
at com.sun.xml.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:247)
at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:662)
at com.sun.xml.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(ArrayElementProperty.java:165)
at com.sun.xml.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:152)
at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:332)
at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:698)
at com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:152)
at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:332)
at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsSoleContent(XMLSerializer.java:592)
at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeRoot(ClassBeanInfoImpl.java:320)
at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:493)
at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:325)
这可能是由于将Foo
对象添加到List<Bar>
类型的SOAP参数中造成的。
几周前,我也有同样的例外。我本以为会出现编译错误,所以一定是有一些丑陋的类型强制才允许它发生。我没有做任何进一步的调查——用Bar
替换Foo
(无论如何都应该是这样)解决了这个问题。