57장. JacksonXML
jackson XML은 XML 페이로드를 Java 객체로 마샬링하거나 Java 개체를 XML 페이로드로 마샬링하기 위해 XML 페이로드와 함께 Jackson 라이브러리 를 사용하는 데이터 형식입니다. 참고: Jackson에 익숙한 경우 이 XML 데이터 형식은 JSON과 동일하게 작동하므로 JSON serialization/deserialization에 주석이 추가된 클래스와 함께 사용할 수 있습니다.
이 확장은 JAXB의 "코드 첫 번째" 방식 이기도 합니다.
이 데이터 형식은 Woodstox (특히 매우 인쇄와 같은 기능), 빠르고 효율적인 XML 프로세서를 사용합니다.
from("activemq:My.Queue"). unmarshal().jacksonxml(). to("mqseries:Another.Queue");
57.1. jacksonXML 옵션
jacksonXML 데이터 형식은 아래에 나열된 15 가지 옵션을 지원합니다.
이름 | 기본값 | Java Type | 설명 |
---|---|---|---|
xmlMapper |
| 조회하고 지정된 ID로 기존 XmlMapper를 사용합니다. | |
prettyPrint | false |
| 인쇄가 깔끔하게 포맷될 수 있도록 합니다. 기본값은 false입니다. |
unmarshalType |
| Java 유형의 클래스 이름은 unmarshalling할 때 사용할 수 있습니다. | |
jsonView |
| POJO를 JSON으로 마샬링할 때 JSON 출력에서 특정 필드를 제외해야 할 수 있습니다. Jackson으로 JSON 뷰를 사용하여 이를 수행할 수 있습니다. 이 옵션은 JsonView 주석이 있는 클래스를 참조하는 것입니다. | |
include |
| pojo를 JSON으로 마샬링하려는 경우 pojo에 null 값이 있는 일부 필드가 있습니다. 그리고 이러한 null 값을 건너뛰려면 이 옵션을 NON_NULL으로 설정할 수 있습니다. | |
allowJmsType |
| JMS 사양의 JMSType 헤더가marshal을 해제하는 데 사용할 FQN 클래스 이름을 지정하는 데 JMS 사용자에 사용됩니다. | |
collectionType |
| 사용할 레지스트리에서 조회할 사용자 정의 컬렉션 유형을 나타냅니다. 이 옵션은 드물지만 기본적으로 java.util.Collection과 다른 컬렉션 유형을 사용할 수 있습니다. | |
useList |
| Map 또는 Pojo 목록에 대한 해군을 공개합니다. | |
enableJaxbAnnotationModule |
| jackson을 사용할 때 JAXB 주석 모듈 활성화 여부 이 기능을 활성화하면 Jackson에서 JAXB 주석을 사용할 수 있습니다. | |
moduleClassNames |
| 사용자 정의 Jackson 모듈을 사용하려면 FQN 클래스 이름이 있는 String으로 지정된 com.fasterxml.jackson.databind.Module을 사용합니다. 여러 클래스를 쉼표로 구분할 수 있습니다. | |
moduleRefs |
| Camel 레지스트리를 참조한 사용자 정의 Jackson 모듈을 사용하려면 다음을 수행합니다. 여러 모듈을 쉼표로 구분할 수 있습니다. | |
enableFeatures |
| Jackson com.fasterxml.jackson.databind.ObjectMapper에서 사용할 수 있는 기능 세트. 이 기능은 com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature 또는 com.fasterxml.jackson.databind.MapperFeature의 열거형과 일치하는 이름이어야 합니다. | |
disableFeatures |
| Jackson com.fasterxml.jackson.databind.ObjectMapper에서 비활성화할 기능 세트. 이 기능은 com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature 또는 com.fasterxml.jackson.databind.MapperFeature의 열거형과 일치하는 이름이어야 합니다. | |
allowUnmarshallType |
| 활성화된 경우 Jackson은 unmarshalling 중에 CamelJacksonUnmarshalType 헤더를 사용할 수 있습니다. 이는 원하는 경우에만 사용하도록 설정해야 합니다. | |
contentTypeHeader |
| 데이터 형식에서 데이터 형식의 유형으로 Content-Type 헤더를 설정해야 하는지 여부입니다. 예를 들어 데이터 형식의 경우 XML로 마샬링하거나, 데이터 형식을 JSON으로 마샬링하는 애플리케이션/json입니다. |
57.1.1. Spring DSL에서 Jackson XML 사용
Spring DSL에서 데이터 형식을 사용할 때는 먼저 데이터 형식을 선언해야 합니다. 이 작업은 DataFormats XML 태그에서 수행됩니다.
<dataFormats> <!-- here we define a Xml data format with the id jack and that it should use the TestPojo as the class type when doing unmarshal. The unmarshalType is optional, if not provided Camel will use a Map as the type --> <jacksonxml id="jack" unmarshalType="org.apache.camel.component.jacksonxml.TestPojo"/> </dataFormats>
그런 다음 경로에서 이 ID를 참조할 수 있습니다.
<route> <from uri="direct:back"/> <unmarshal><custom ref="jack"/></unmarshal> <to uri="mock:reverse"/> </route>
57.1.2. 마샬링에서 POJO 필드 제외
POJO를 XML로 마샬링할 때 XML 출력에서 특정 필드를 제외할 수 있습니다. Jackson으로 JSON 뷰 를 사용하여 이를 수행할 수 있습니다. 먼저 하나 이상의 마커 클래스를 만듭니다.
@JsonView
주석과 함께 마커 클래스를 사용하여 특정 필드를 포함하거나 제외합니다. 주석은 getter에서도 작동합니다.
마지막으로 Camel JacksonXMLDataFormat
을 사용하여 위의 POJO를 XML로 마샬링합니다.
결과 XML에서 weight 필드가 없습니다.
<pojo age="30" weight="70"/>