JAXB: Как связать элемент с пространством имен - PullRequest
2 голосов
/ 07 ноября 2011

Он мой XML, размещенный на удаленной машине:

<?xml version="1.0" encoding="UTF-8"?>
<store xmlns="http://mydomain.com/store/schemas">
    <!-- My Book store-->
    <book location="vk 1">
        <title>Learning JAXB</title>
        <author>Joe Blogg</author>
    </book>
    <book location="vk 1">
        <title>Learning JAXB SE</title>
        <author>Joe Blogg</author>
    </book>
</store>

У меня есть книга для переплета:

Переплет книг:

@XmlRootElement(name = "book")
@XmlType(propOrder = { "title", "author"})
public class Book
{
 private String title;
 private String author;
 private String location;

 @XmlElement(name = "title")
 public String getTitle()
 {
  return title;
 }

 public void setTitle(String title)
 {
  this.title=title;
 }

 @XmlAttribute(name = "location")
 public String getLocation()
 {
  return location;
 }

 public void setLocation(String location)
 {
  this.location = location;
 }

 @XmlElement(name = "author")
 public String getAuthor()
 {
  return author;
 }

 public void setAuthor(String author)
 {
  this.author = author;
 }
}

Привязка магазина:

@XmlRootElement(name = "store", namespace = "http://mydomain.com/store/schemas")
public class Store
{
 private List<Book> books;

  @XmlElement(name="book")
  public List<Book> getBooks()
  {
    return books;
  }

  public void setBooks(List<Book> books)
  {
    this.books= books;
  }
}

Я распаковываю файл XML как fAollows:

  JAXBContext context = JAXBContext.newInstance(Store.class);
  Unmarshaller unmarshaller = context.createUnmarshaller();
  URL url = new URL("http://mydomain/files/store.xml");
  Store s= (Store) unmarshaller.unmarshal(url);
  System.out.println(s.getBooks());// Prints null

Когда я звоню getBooks(), мы получаем нулевое значение. Кто-нибудь может заметить, что я здесь делаю неправильно?!

Ответы [ 2 ]

5 голосов
/ 07 ноября 2011

Ответ , предоставленный skaffman , неверен. Вы можете указать пространство имен на уровне пакета с помощью @XmlSchema или на уровне класса с помощью @XmlType и использовать его для определения полей / свойств:

Для получения дополнительной информации

1 голос
/ 07 ноября 2011

Я не уверен на 100%, но думаю, что можно было бы опустить это дублирование, используя аннотацию @XmlSchema на уровне пакета (package-info.java).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...