Java Web Services / JAXB – 抽象超类

我有一个带有JAXB注释类的包和一个抽象超类。 我想在Web服务接口中使用这个超类,所以我可以将任何子类作为参数传递。 当我这样做时,会抛出exception:

javax.xml.ws.WebServiceException: javax.xml.bind.UnmarshalException - with linked exception: [javax.xml.bind.UnmarshalException: Unable to create an instance of xxx.yyy.ZZZ - with linked exception: [java.lang.InstantiationException]] 

可以手动编组/取消编组并将参数作为字符串传递,但我想避免使用它。 有什么想法怎么做?

您是否在Web服务请求中指定了具体实现? 这对我来说很好:

抽象基类:

 @XmlSeeAlso({Foo.class, Bar.class}) public abstract class FooBase { ... } 

实施class:

 @XmlRootElement(name = "foo") public class Foo extends FooBase { ... } 

Web服务方法:

 public String getFoo(@WebParam(name = "param") final FooBase foo) { ... } 

请求:

         

我今天解决了同样的问题。 我发现EclipseLink MOXy JAXB实现工作正常,但是没有单独的jar或maven模块可用(它只是整个eclipselink.jar,这是巨大的)最后我尝试了最新的JAXB版本(2.2.2)并且令人惊讶的是它运行良好。

maven配置:

   javax.xml.bind jaxb-api 2.2.2   com.sun.xml.bind jaxb-impl 2.2.2  

我有一个类似的问题,上面的评论没有解决。 在JAXB Unmarshalling(抽象基类,带有@XmlSeeAlso具体子类)期间从InstantiationException链接的Blogsposts对我理解我真正在做什么非常有帮助。