Сначала простой тест для преобразования объекта Java в XML:
Это модель:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
@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.