JAX-RS-XML<-&燃气轮机;java.util.List

JAX-RS-XML<-&燃气轮机;java.util.List,java,xml,web-services,rest,jaxb,Java,Xml,Web Services,Rest,Jaxb,我试图访问一个JAX-RS Web服务,该服务返回一个XML格式的java.util.list值,但在客户端我得到了javax.XML.bind.UnmarshalException Web服务方法: @GET @Path("/getMessdaten") @Produces(MediaType.APPLICATION_XML) public List<MessdatenPCommon> getMessdatenValues() throws Exception { List

我试图访问一个JAX-RS Web服务,该服务返回一个XML格式的java.util.list值,但在客户端我得到了javax.XML.bind.UnmarshalException

Web服务方法:

@GET
@Path("/getMessdaten")
@Produces(MediaType.APPLICATION_XML)
public List<MessdatenPCommon> getMessdatenValues() throws Exception {
    List<MessdatenPCommon> messdatenPList = testBean();
    return MessdatenPCommonList;}
MessdatenPCommon类:

@XmlSeeAlso({ MessdatenPv.class })
@XmlType
public abstract class MessdatenPCommon extends xx.xxxx.xxx.xxx.AbstractEntityBase {
    private static final long serialVersionUID = 1L;

    public abstract BigDecimal getNum();

    public abstract ...

}

有人能帮我吗


谢谢

我假设您希望收到
MessdatenPv
的实例,它是
MessdatenPCommon
的子类?这是因为
MessdatenPCommon
是抽象的,而
MessdatenPv
@xmlse注释中的参考。您需要确保XML包含必要的
xsi:type
属性来指示子类型


您可以封送数据以查看反汇编上的预期内容。

您的客户机代码看起来像是要将返回值反汇编到
MessdatenPCommon
-实体的列表中(
et(new GenericType(){})
。该类是抽象的,因此无法创建它的实例。请改用MessdatenPv的具体子类尝试调用。谢谢,这就是我问题的解决方案。
Exception in thread "main" javax.ws.rs.WebApplicationException: javax.xml.bind.UnmarshalException
 - with linked exception:
[com.sun.istack.internal.SAXParseException2; lineNumber: 1; columnNumber: 89; Unable to create an instance of xx.xxxx.xxx.xxx.xxxxx.xxxx.MessdatenPCommon]
    at com.sun.jersey.core.provider.jaxb.AbstractListElementProvider.readFrom(AbstractListElementProvider.java:251)
    at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:553)
    at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:523)
    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:686)
    at com.sun.jersey.api.client.WebResource.access$300(WebResource.java:74)
    at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:508)
    at appclient.TestClient.main(TestClient.java:31)
Caused by: javax.xml.bind.UnmarshalException
 - with linked exception:
[com.sun.istack.internal.SAXParseException2; lineNumber: 1; columnNumber: 89; Unable to create an instance of xx.xxxxx.xxx.xxx.xxxxx.xxxxx.MessdatenPCommon]
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(Unknown Source)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(Unknown Source)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(Unknown Source)
    at com.sun.jersey.core.provider.jaxb.AbstractListElementProvider.readFrom(AbstractListElementProvider.java:234)
    ... 6 more
Caused by: com.sun.istack.internal.SAXParseException2; lineNumber: 1; columnNumber: 89; Unable to create an instance of xx.xxxx.xxx.xxx.xxxx.xxxx.MessdatenPCommon
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(Unknown Source)
....
@XmlSeeAlso({ MessdatenPv.class })
@XmlType
public abstract class MessdatenPCommon extends xx.xxxx.xxx.xxx.AbstractEntityBase {
    private static final long serialVersionUID = 1L;

    public abstract BigDecimal getNum();

    public abstract ...

}