4.4. REST DSL 구성

4.4.1. Java로 구성

Java에서는 restConfiguration() 빌더 API를 사용하여 REST DSL을 구성할 수 있습니다. 예를 들어 Servlet 구성 요소를 기본 구현으로 사용하도록 REST DSL을 구성하려면 다음을 수행합니다.

restConfiguration().component("servlet").bindingMode("json").port("8181")
    .contextPath("/camel-example-servlet-rest-blueprint/rest");

4.4.2. XML로 구성

XML에서는 restConfiguration 요소를 사용하여 REST DSL을 구성할 수 있습니다. 예를 들어 Servlet 구성 요소를 기본 구현으로 사용하도록 REST DSL을 구성하려면 다음을 수행합니다.

<?xml version="1.0" encoding="UTF-8"?>
<blueprint ...>
  ...
  <camelContext xmlns="http://camel.apache.org/schema/blueprint">
    ...
    <restConfiguration component="servlet"
                       bindingMode="json"
                       contextPath="/camel-example-servlet-rest-blueprint/rest"
                       port="8181">
      <dataFormatProperty key="prettyPrint" value="true"/>
    </restConfiguration>
    ...
  </camelContext>

</blueprint>

4.4.3. 구성 옵션

표 4.3. “REST DSL 구성 옵션” restConfiguration() 빌더(Java DSL) 또는 restConfiguration 요소(XML DSL)를 사용하여 REST DSL을 구성하는 옵션을 표시합니다.

표 4.3. REST DSL 구성 옵션

Java DSLXML DSL설명

component()

@component

REST 전송으로 사용할 Camel 구성 요소(예: 서블릿 ,restlet ,spark-rest 등)를 지정합니다. 값은 사용자 지정 인스턴스의 표준 구성 요소 이름 또는 빈 ID일 수 있습니다. 이 옵션을 지정하지 않으면 Camel은 classpath 또는 Cryostat 레지스트리에서 RestConsumerFactory 인스턴스를 찾습니다.

scheme()

@scheme

REST 서비스를 노출하는 데 사용할 프로토콜입니다. 기본 REST 구현에 따라 다르지만 일반적으로 httphttps 가 지원됩니다. 기본값은 http 입니다.

host()

@host

REST 서비스를 노출하는 데 사용할 호스트 이름입니다.

port()

@port

REST 서비스를 노출하는 데 사용할 포트 번호입니다.

참고: 이 설정은 컨테이너의 표준 HTTP 포트를 대신 사용하는 서블릿 구성 요소에서 무시됩니다. Apache Karaf OSGi 컨테이너의 경우 표준 HTTP 포트는 일반적으로 8181입니다. Cryostat 및 툴링을 위해 포트 값을 설정하는 것이 좋습니다.

contextPath()

@contextPath

REST 서비스의 선행 컨텍스트 경로를 설정합니다. 배포된 웹 애플리케이션이 컨텍스트 경로 설정을 사용하여 배포되는 Servlet과 같은 구성 요소와 함께 사용할 수 있습니다.

hostNameResolver()

@hostNameResolver

호스트 이름이 명시적으로 설정되지 않은 경우 이 확인자는 REST 서비스의 호스트를 결정합니다. 가능한 값은 RestHostNameResolver.localHostName (Java DSL) 또는 localHostName ( XML DSL) 또는 호스트 이름 형식으로 해석되는 및 RestHostNameResolver.localIp (Java DSL) 또는 localIp (SDN DSL)로 해석되어 점으로 해석되는 10진수 IP 주소 형식으로 확인됩니다. Camel 2.17 RestHostNameResolver.allLocalIp 를 사용하여 모든 로컬 IP 주소로 확인할 수 있습니다.

기본값은 Camel 2.16까지 localHostName 입니다. Camel 2.17에서 기본값은 allLocalIp 입니다.

bindingMode()

@bindingMode

JSON 또는 XML 형식 메시지에 대한 바인딩 모드를 활성화합니다. 가능한 값은 off,auto json,xml, 또는 json_xml 입니다. 기본값은 OFF 입니다.

skipBindingOnErrorCode()

@skipBindingOnErrorCode

사용자 정의 HTTP 오류 코드 헤더가 있는 경우 출력에서 바인딩을 건너뛸지 여부를 지정합니다. 이렇게 하면 성공적인 메시지가 수행되므로 JSON 또는 XML에 바인딩되지 않는 사용자 지정 오류 메시지를 빌드할 수 있습니다. 기본값은 true 입니다.

enableCORS()

@enableCORS

true 인 경우 HTTP 응답에서 CORS(cross-origin resource sharing) 헤더를 활성화합니다. 기본값은 false 입니다.

jsonDataFormat()

@jsonDataFormat

Camel이 JSON 데이터 형식을 구현하는 데 사용하는 구성 요소를 지정합니다. 가능한 값은 json-jackson,json-gson,json-xstream 입니다. 기본값은 json-jackson 입니다.

xmlDataFormat()

@xmlDataFormat

Camel이 XML 데이터 형식을 구현하는 데 사용하는 구성 요소를 지정합니다. 가능한 값은 jaxb 입니다. 기본값은 jaxb 입니다.

componentProperty()

componentProperty

기본 REST 구현에서 임의의 구성 요소 수준 속성을 설정할 수 있습니다.

endpointProperty()

endpointProperty

기본 REST 구현에서 임의의 엔드포인트 수준 속성을 설정할 수 있습니다.

consumerProperty()

consumerProperty

기본 REST 구현에서 임의의 소비자 엔드포인트 속성을 설정할 수 있습니다.

dataFormatProperty()

dataFormatProperty

기본 데이터 형식 구성 요소(예: jackson 또는 CryostatB)에서 임의의 속성을 설정할 수 있습니다. Camel 2.14.1 이후부터는 다음 접두사를 속성 키에 연결할 수 있습니다.

  • json.in
  • json.out
  • xml.in
  • xml.out

속성 설정을 특정 형식 유형(JSON 또는 XML) 및 특정 메시지 방향(IN 또는 OUT)으로 제한하려면 다음을 수행합니다.

corsHeaderProperty()

corsHeaders

사용자 지정 CORS 헤더를 키/값 쌍으로 지정할 수 있습니다.

4.4.4. 기본 CORS 헤더

CORS(cross-origin resource sharing)가 활성화된 경우 다음 헤더가 기본적으로 설정됩니다. 선택적으로 corsHeaderProperty DSL 명령을 호출하여 기본 설정을 덮어쓸 수 있습니다.

표 4.4. 기본 CORS 헤더

헤더 키헤더 값

access-Control-Allow-Origin

\*

access-Control-Allow-Methods

GET,HEAD,POST,PUT,DELETE,TRACE,OPTIONS,CONNECT,PATCH

access-Control-Allow-Headers

origin,Accept,X-Requested-With,Content-Type,Access-Control-Request-Method,Access-Control-Request-Headers

access-Control-Max-Age

3600

4.4.5. jackson JSON 기능 활성화 또는 비활성화

dataFormatProperty 옵션에서 다음 키를 구성하여 특정 Jackson JSON 기능을 활성화하거나 비활성화할 수 있습니다.

  • json.in.disableFeatures
  • json.in.enableFeatures

예를 들어 Jackson의 FAIL_ON_UNKNOWN_PROPERTIES 기능을 비활성화하려면 JSON 입력에 Java 오브젝트에 매핑할 수 없는 속성이 있는 경우 Jackson이 실패합니다.

restConfiguration().component("jetty")
    .host("localhost").port(getPort())
    .bindingMode(RestBindingMode.json)
    .dataFormatProperty("json.in.disableFeatures", "FAIL_ON_UNKNOWN_PROPERTIES");

쉼표로 구분된 목록을 지정하여 여러 기능을 비활성화할 수 있습니다. 예를 들면 다음과 같습니다.

.dataFormatProperty("json.in.disableFeatures", "FAIL_ON_UNKNOWN_PROPERTIES,ADJUST_DATES_TO_CONTEXT_TIME_ZONE");

다음은 Java DSL에서 jackson JSON 기능을 비활성화하고 활성화하는 방법을 보여주는 예입니다.

restConfiguration().component("jetty")
    .host("localhost").port(getPort())
    .bindingMode(RestBindingMode.json)
    .dataFormatProperty("json.in.disableFeatures", "FAIL_ON_UNKNOWN_PROPERTIES,ADJUST_DATES_TO_CONTEXT_TIME_ZONE")
    .dataFormatProperty("json.in.enableFeatures", "FAIL_ON_NUMBERS_FOR_ENUMS,USE_BIG_DECIMAL_FOR_FLOATS");

다음은 XML DSL에서 jackson JSON 기능을 비활성화하고 활성화하는 방법을 보여주는 예입니다.

<restConfiguration component="jetty" host="localhost" port="9090" bindingMode="json">
  <dataFormatProperty key="json.in.disableFeatures" value="FAIL_ON_UNKNOWN_PROPERTIES,ADJUST_DATES_TO_CONTEXT_TIME_ZONE"/>
  <dataFormatProperty key="json.in.enableFeatures" value="FAIL_ON_NUMBERS_FOR_ENUMS,USE_BIG_DECIMAL_FOR_FLOATS"/>
</restConfiguration>

비활성화하거나 활성화할 수 있는 Jackson 기능은 다음 Jackson 클래스의 enum ID에 해당합니다.