2014-02-03 1 views
0

Я пытаюсь написать контроллер Spring, который читает запрос на отправку xml. Корневой элемент XML, который становится публикуемым выглядит следующим образом:xmlns в xml post body вызывает неправильную десериализацию Jaxb

<booksMessage version="2.0" notificationDate="2013-10-17T00:15:00-08:00" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="books:notification:v2.0"> 

Мой Java класс, который представляет этот элемент начинается так:

@XmlRootElement(name="booksMessage", namespace="books:notification:v2.0") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class BooksMessage { 

Когда я пытаюсь сделать этот запрос поста с Jmeter Тем не менее, объект становится переведенным пустым. Если я вытащу xmlns="books:notification:v2.0 из сообщения, которое будет отправлено, и удалите namespace="books:notification:v2.0" из моих аннотаций java, он отлично работает. Однако у меня нет контроля над сообщением, которое публикуется, так как я могу заставить это работать правильно, когда сообщение xml содержит xmlns? Есть ли еще одна аннотация, которую я должен добавить?

ответ

0

Корневой элемент был в пространстве имен books:notification:v2.0, но все его дочерние элементы находились в пространстве имен по умолчанию, поэтому, по-видимому, они никогда не показывались. Я должен был указать пространство имен на уровне пакета и добавить elementFormDefault=XmlNsForm.QUALIFIED, чтобы все закрытые элементы автоматически имели правильное пространство имен.

Чтобы сделать это, я сделал файл с именем «package-info.java» в пакете с этим в нем:

@ javax.xml.bind.annotation.XmlSchema ( имен = "книги: уведомление : v2.0 ", elementFormDefault = XmlNsForm.QUALIFIED) package com.company.models.books; import javax.xml.bind.annotation.XmlNsForm;

+0

У вас есть схема для этого? потому что, если вы создаете классы с jaxB из схемы, он делает большую часть этой работы для вас. включая создание package-info.java. –

+0

Я думаю, может быть, я мог бы получить схему. Мой опыт автогенерации классов заключается в том, что он создает много вещей, которые все равно нужно исправлять. (Как лишние классы для объявления списка.) – CorayThan

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