Лучший синтаксический анализатор Java XML для производства / использования REST-сервисов - PullRequest
2 голосов
/ 11 октября 2010

В настоящее время используются встроенные библиотеки Java DOM XML для создания / анализа.Ужасно, даже с большим количеством вспомогательных классов и методов, а также с производительностью и использованием памяти - отстой.

Какой лучший инструмент или инфраструктура Java для работы с XML в отношении создания и потребления служб REST?

Служба, которую я использую, использует JAXB.Я мог пользоваться их классами и так удобно и легко пользоваться их услугами.Это было прекрасно, но JAXB все еще довольно болезненна в большинстве случаев.Поэтому я посмотрел на StAX и VTD-XML.StAX не обновлялся около 4 лет.Является ли VTD-XML современным уровнем обработки XML в Java?

Ответы [ 3 ]

6 голосов
/ 11 октября 2010

Вы должны быть в состоянии написать аннотированные классы JAXB, Джерси поддерживает их из коробки и автоматически анализирует их для вас. Возможно, это не самое эффективное решение, но оно создает действительно хорошее чистое приложение.

Если вы не докажете, что у вас есть проблема с производительностью (и можете отследить ее до JAXB), тогда я не буду беспокоиться о накладных расходах на маршаллинг / демаршаллинг.

Edit:
Аннотированные классы JAXB могут быть очень простыми. Моделирование XML как;

<customer>
  <name>Fred</name>
  <email>fred@email.com</email>
  <id>12345</id>
</customer>

так же просто, как это;

@XmlRootElement
public class Customer
{
  private String name;
  private String email;
  private long id;

  public Customer()
  {
  }

  //getters and setters
}

Затем вы можете написать такие службы;

@GET
@Produces(MediaType.APPLICATION_XML)
@Path("/getCustomer")
public Customer getCustomer()
{
  Customer c = new Customer();
  c.setName("Fred");
  c.setEmail("fred@email.com");
  c.setId(12345);
  return c;
}

.. и клиентам это нравится;

Client client = Client.create();
WebResource resource = client.resource("myHost/getCustomer");
Customer fred = resource.get(Customer.class):

Его красиво просто.

1 голос
/ 11 октября 2010

StAX долгое время не обновлялся, потому что это не нужно было. Формат XML не изменился, и StAX представляет собой довольно простое отображение этого формата в API. Что касается низкоуровневых API-интерфейсов XML, их довольно легко использовать, и я считаю, что они весьма эффективны; однако это очень низкоуровневый API. Это (очень приблизительно) XML-эквивалент DataInputStream и DataOutputSteam для записи двоичных данных; код, написанный с его использованием, должен быть написан на концептуальном уровне элементов, атрибутов и так далее. Я не использовал VTD-XML, но он выглядит примерно так же.

Если вы хотите использовать что-то более высокого уровня, взгляните на некоторые инструменты сериализации XML, такие как XStream - могли бы вы написать несколько классов, которые с соответствующей настройкой преобразования могли бы читать из ваших входящих данных? Не могли бы вы тогда использовать одни и те же классы для слегка разных входов, пропуская пропущенные поля? На самом деле, не могли бы вы использовать подход «отсутствующие элементы XML игнорируются» с JAXB? Я не знаю, насколько это строго по схемам, или можно ли таким образом подходить к вашим входам. Я очень много стреляю в темноте здесь.

0 голосов
/ 11 октября 2010

Могу порекомендовать Spring MVC 3+.Имеется встроенная поддержка REST-сервисов.Создание службы REST занимает пару минут. Если вы знаете Spring ...

http://blog.springsource.com/2009/03/08/rest-in-spring-3-mvc/

...