Статьи

EclipseLink MOXy как поставщик JAXB

EclipseLink MOXy является поставщиком JAXB и является убедительной альтернативой стандартному поставщику JAXB, встроенному в JDK.

Сначала простой тест для преобразования объекта Java в XML:

Это модель:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
@XmlRootElement(name='MemberDetailsRequest', namespace='http://bk.org/memberservice/')
@XmlAccessorType(XmlAccessType.FIELD)
public class MemberDetailsRequest {
 
 public MemberDetailsRequest() {
 }
 
 public MemberDetailsRequest(Long id) {
  this.id = id;
 }
 
 private Long id;
 
 public Long getId() {
  return id;
 }
 
 public void setId(Long id) {
  this.id = id;
 }
}

и тест на маршалинг:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package org.bk.memberservice.binding;
 
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.is;
 
import java.io.StringWriter;
 
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
 
import org.bk.memberservice.message.MemberDetailsRequest;
import org.junit.Test;
 
public class TestJaxbRequestBinding {
 
 @Test
 public void testJaxbBinding() throws Exception{
  JAXBContext jaxbContext = JAXBContext.newInstance(MemberDetailsRequest.class);
  assertThat((jaxbContext instanceof org.eclipse.persistence.jaxb.JAXBContext), is(true));
  Marshaller marshaller = jaxbContext.createMarshaller();
   
  MemberDetailsRequest memberDetailsRequest = new MemberDetailsRequest();
  memberDetailsRequest.setId(1L);
  StringWriter writer = new StringWriter();
   
  marshaller.marshal(memberDetailsRequest, writer);
  String marshalledXml = writer.toString();
  assertThat(marshalledXml, containsString('MemberDetailsRequest'));
 }
}

Выделенная строка проверяет, что JAXBContext от MOXy создан.

Поэтому, чтобы использовать MOXy в качестве провайдера JAXB, первым делом нужно получить файлы JAR,

У меня возникли небольшие трудности с поиском банок MOXy, которые будут использоваться в файле Maven POM, вот что мне помогло:

01
02
03
04
05
06
07
08
09
10
11
<repository>
            <id>EclipseLink Repo</id>
            <name>EclipseLink Repo</name>
        </repository>
 
  <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>org.eclipse.persistence.moxy</artifactId>
            <version>2.4.0</version>
        </dependency>

Следующим шагом будет указание установить MOXy в качестве поставщика JAXB. Это делается путем размещения jaxb.properties вместе с любым из классов моделей JAXB. Поэтому в этом случае я поместил jaxb.properties в свой пакет, содержащий класс MemberDetailsRequest, и его содержимое следующее:

1
javax.xml.bind.context.factory = org.eclipse.persistence.jaxb.JAXBContextFactory

вот и все!

Ссылка: EclipseLink MOXy в качестве поставщика JAXB от нашего партнера по JCG Биджу Кунджуммен в блоге all and sundry.