JSON 배열 일련화 오류

Apache CXF 버그(JSON 응답 형식일 때만 발생)

JSON 형식의 호텔 목록 응답을 요청하면 한 개의 호텔/객실만 포함한 경우 HotelSummaryRoomRateDetails와 같은 배열 요소가 제대로 일련화되지 않습니다. 이러한 경우 배열에서 해시 테이블 대신 단일 인스턴스를 반환하기 때문에 특정 코딩 환경에서 문제가 될 수 있습니다.

예:

Apache로 작성: http://cxf.apache.org/docs/jax-rs-data-bindings.html

JSON 배열 일련화 오류 처리

단일 값만 포함하는 목록 개체가 잘못된 일련화로 표시되는 오류는 JSON 커뮤니티에 잘 알려진 문제입니다. 이 문제를 해결하려면 JSONProvider에 'serializeAsArray' 기능을 설정하고 'arrayKeys' 속성을 사용하여 각각 처리해야 하는 개별 필드를 지정해야 합니다.

'serializeAsArray' 및 'arrayKeys'를 조합하여 자연 규칙 시퀀스를 생성할 수 있습니다.

문제 해결 예시:

<util:list id="jsonKeys"><value>HotelSummary</value></util:list>

<bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.JSONProvider">
  <property name="serializeAsArray" value="true" />
  <property name="arrayKeys" ref="jsonKeys" />
</bean>

보유한 프레임워크에 다른 코드가 필요할 수 있습니다. 이 코드는 예시로만 제공됩니다.

예약 요청의 복구할 수 없는 오류 또는 인증 문제

PHP, Java와 같은 일부 기술은 올바른 content-type 값이 요청에서 누락되었을 경우 사용자가 올바른 형식의 예약 요청을 전달할 때 문제가 발생합니다.

예약 요청 URL 구조 문제를 해결하고 확인했지만 여전히 복구할 수 없는 오류가 발생하는 경우 HTTP 헤더에 다음을 설정하세요.

Content-type: application/x-www-form-urlencoded Accept: application/xml

또한 &_type=json 또는 &_type=xml을 사용할 때만 응답 형식을 설정합니다. EAN에서만 XML 컨텐츠를 허용합니다. 

Content Type에 대한 자세한 정보는 예약 요청 요약을 검토하세요.

Java 수동 전환 코드

수동 전환 예시 코드는 전달된 8859-1부터 UTF-8까지입니다.

private static String convertEncoding(String value) {
        if (value != null) {
            try {
                return new String(value.getBytes("8859_1"), "UTF-8");

            } catch (UnsupportedEncodingException e) { 
                LOG.error("지원되지 않는 인코딩입니다.", e);
            }
        }

        return value;
    }

Axis 사용자

Axis 버그

여러 문제 중에서 일부 버전의 Axis에는 일부 데이터 유형 "(integer" instead of "int")이 변경되어 올바르지 않은 소스 파일이 잘못 생성되는 알려진 버그가 있습니다. 이러한 부정확함으로 인해 컴파일을 시도할 때 소스 파일에 오류가 발생하거나 소스 파일이 EAN 웹 서비스와 제대로 접속할 수 없습니다.

컴파일 전에 소스 파일에서 데이터 유형을 수정하거나 http://ws.apache.org/axis/]2로 이동하여 버그가 수정된 Axis 이후 버전으로 업데이트할 수 있습니다.

응용 프로그램에 대해 예상한 대로 작동하는 모든 버전을 사용할 수 있습니다. 서버 응용 프로그램이나 서버 문제는 지원할 수 없습니다.

Axis 1.4 버그

Axis 버전 1.4에는 min occurrence=0과 nillable=false가 지정될 때 nillable 정의가 발생하는 알려진 버그가 있습니다.

이러한 부정확함으로 인해 EAN 웹 서비스와 연결하려고 할 때 요청에 오류가 발생합니다.

이 문제를 해결하려면 http://ws.apache.org/axis/를 참조하세요.

응용 프로그램에 대해 예상한 대로 작동하는 모든 버전을 사용할 수 있습니다. 서버 응용 프로그램이나 서버 문제는 지원할 수 없습니다.

.NET 사용자

.NET 참고 자료

기본적으로 .NET Framework는 machine.config에 maximum connection=2를 보유합니다. 따라서 원격 웹 호출이 worker process당 한 번에 2번 연결로 제한됩니다. 응답 시간이 길어지거나 웹 서비스 호출 시간이 초과하면 서버 설정에서 이 세부 정보를 확인할 수 있습니다.

성능과 관련된 그 외 유용한 .NET 링크:

CS.NET / MS WSDL 2.0+ 문제

계열사에서 C#에 대해 HotelFunctions.cs 파일을 생성할 때 문제가 발생한다고 보고한 바가 있습니다. 이 문제는 WSDL 2.0 이상에서 발생합니다. WSDL 1.1 이하에서는 소스 파일 생성 시 추가 요소가 생성되지 않습니다.

이 절차에서 다른 nillable 요소와 함께 hotelIdSpecified라고 하는 자체 요소를 생성하여 기본적으로 오류가 발생하는 것 같습니다.

  • 이 문제로 인해 요청에서 호텔 ID(또는 이러한 "지정된" 항목을 생성하는 다른 항목)가 생략되어 호텔 ID를 확인할 수 없습니다라는 오류가 발생합니다.
  • 예약 가능성 결과 수신에 필요한 호텔 ID(또는 지정된 요소를 생성하는 기타 항목)를 C#에 대해 전송하려면 코드에서 이 요소를 true로 변경해야 합니다.
  • hotelIdSpecified(또는 그 외 "지정된" 항목)는 WSDL 또는 웹 서비스 요청 개체의 일부가 아니기 때문에 설명서에서 이 요소를 찾을 수 없습니다.
  • VB.NET이나 MS WSDL 1.1에서는 이러한 문제가 확인되지 않으며 HotelFunctions.vb를 생성할 때 새로운 요소가 생성되지 않습니다.

이 문제에 대한 자세한 정보가 있다면 해당 정보를 추가하거나 게시된 현재 정보를 수정할 수 있도록 contact us로 알려 주시기 바랍니다.

VS에서 문서의 일반적인 표현 교체:
찾기:   private bool {.*}FieldSpecified;
대체:   private bool \1FieldSpecified = true;