2014-10-10 84 views
0

最近我一直在浏览此错误的stackoverflow,而且我几乎无法找到所有线程上的解决方案去过。这就是为什么我在这里发布这个问题。未找到Java类型,类bookInfoListType和MIME媒体类型application/xml的消息正文编写器

问题是我在回复响应时说错误。这里是我的XSD定义:

<xs:element name="bookInfoList"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="bookInfo" type="bookInfoType" minOccurs="0" maxOccurs="unbounded"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

<xs:element name="bookInfo" type="bookInfoType"/> 

<xs:complexType name="bookInfoListType"> 
    <xs:sequence> 
     <xs:element name="bookInfo" type="bookInfoType" minOccurs="0" maxOccurs="unbounded"/> 
    </xs:sequence> 
</xs:complexType> 

<xs:complexType name="bookInfoType"> 
    <xs:sequence> 
     <xs:element name="bookId" type="xs:string" minOccurs="1" maxOccurs="1"/> 
     <!-- ... more elements !--> 
    </xs:sequence> 
</xs:complexType> 

其生成以下bookListInfoType

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "bookInfoListType", propOrder = { 
    "bookInfo" 
}) 
public class bookInfoListType { 

    protected List<bookInfoType> bookInfo; 

    public List<bookInfoType> getbookInfo() { 
     if (bookInfo == null) { 
      bookInfo = new ArrayList<bookInfoType>(); 
     } 
     return this.bookInfo; 
    } 
} 

但是,当我尝试将响应发送回像

return Response.status(HttpStatus.SC_OK).entity(bookInfoListConverter.convert(wsContext, allBooks)).build(); 

我得到的说错误。

在我ObjectFactory,我确实看到

public bookInfoListType createbookInfoListType() { 
    return new bookInfoListType(); 
} 

这里是我的休息方法:

@Path ("v1/storename/") 
public class BookResource 
{ 
    @GET 
    @Path ("books/{book_id}/info.xml") 
    @Produces (MediaType.APPLICATION_XML) 
    public Response getBookInfoXML() { 
     //business logic 
     return Response.status(HttpStatus.SC_OK).entity(bookInfoListConverter.convert(wsContext, allBooks)).build(); 
    } 
} 

更何况,我已经生成的类另一个JAXB称为bookInfoList,你可以在XSD见。他们的定义几乎是一样的(这是我怀疑的一件事,这可能是问题,但我遵循相同模式的其余类都工作正常)。

我仍然试图敲打我的脑袋想弄清楚发生了什么事,但我没有想法,任何帮助将不胜感激。

+0

有什么'clasNameListType'做这件事?什么是错误,确切地说,以及堆栈跟踪? – lexicore 2014-10-10 16:28:01

+0

你可以发布被调用来访问你的服务(包括注释)的方法吗? – 2014-10-10 17:10:49

+0

更新了我的问题并提供了所需的详细信息 – 2014-10-10 17:34:40

回答

0

由资源方法以任意Java对象的形式返回的实体可以由Jersey作为指定表示序列化为容器输出流。当然,尽管JAX-RS实现确实为Java类型的大多数常用组合提供了默认支持,并且它是相应的线上表示形式,但JAX-RS实现不支持上述用于任何任意Java类型和任何任意表示形式的转换格式默认。

对于每一个Java类型和内容类型组合应用程序使用(这不包括在附带的JAX-RS实现默认提供者),你必须有一个供应商,知道如何处理这个组合,所以你必须有合适的MessageBodyWriterMessageBodyReader类(如果你需要的话,请参阅上面的链接以了解如何编写它们 - 你可能想要参考你的JAX-RS实现/版本的确切文档正在使用)。

就是这样说的,我发现你的错误有点奇怪,因为Jersey已经包含对可以编组JAXB bean的实体提供者的默认支持。您可能希望将您的服务与教程(例如Using JAX-RS With JAXB)进行比较,以确保您发布的错误不是红色鲱鱼

相关问题