2014-10-10 3 views
0

Я просматривал stackoverflow для этой ошибки в последнее время, и я не могу найти решение практически для всех потоков, которые у меня есть был. Вот почему я задаю этот вопрос здесь.Писатель тела сообщения для типа Java, класс bookInfoListType и приложение типа мультимедиа MIME/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(); 
} 

Вот мой метод REST:

@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

+0

Можете ли вы опубликовать метод, который вызывается для доступа к вашей службе (включая аннотации)? –

+0

обновленный мой вопрос с запрошенными деталями –

ответ

0

Объект, возвращенный из метода ресурсов в виде произвольного объекта Java, может быть сериализован Джерси в поток вывода контейнера в качестве заданного представления. Конечно, в то время как реализации JAX-RS обеспечивают стандартную поддержку большинства распространенных комбинаций типа Java и соответствующих встроенных форматов представления, реализации JAX-RS не поддерживают описанное выше преобразование для любого произвольного типа Java и любого произвольного представления формат по умолчанию.

Для каждого типа Java и комбинации контента типа ваших используемых приложений (которые не распространяется поставщиками по умолчанию, которые приходят с реализацией JAX-RS) вы должны иметь поставщика, который знает, как обрабатывать комбинацию, поэтому у вас должны быть соответствующие классы MessageBodyWriter и MessageBodyReader (см. ссылку выше, как их записать, если вам нужно - вы можете обратиться к точной документации для реализации/версии JAX-RS).

С учетом сказанного я нахожу вашу ошибку немного странной, поскольку Джерси уже содержит поддержку по умолчанию для поставщиков сущностей, которые могут сортировать JAXB-компоненты. Возможно, вы захотите сравнить свою службу с учебным пособием (например, Using JAX-RS With JAXB), чтобы убедиться, что вы опубликовали ошибку, а не красную селедку

Смежные вопросы

 Смежные вопросы