생성 코드를 올바르게 대체하거나 Java™를 SDO(Service Data Object)로 변환하는 데 관련된 가능 런타임 예외를 판별하려면 관련된 규칙을 이해해야 합니다. 대부분의 변환은 간단하지만 생성 코드를 변환할 때 런타임에 최적화하기 위한 복잡한 경우가 있습니다.
Java 클래스 또는 배열에서 SDO로 변환하는 경우, 런타임은 Java 유형의 패키지 이름을 역변환하여 생성된 URI를 갖고 Java 클래스 이름과 동일한 유형을 갖는 데이터 오브젝트를 작성합니다. 예를 들어, Java 클래스 com.ibm.xsd.Customer는 유형 Customer를 갖는 URI http://xsd.ibm.com 및 SDO로 변환됩니다. 그런 다음 런타임은 Java 클래스 구성원을 검사하고 해당 값을 SDO의 특성에 지정합니다.
SDO에서 Java 유형으로 변환하는 경우, 런타임은 SDO 유형과 동일한 유형 이름 및 URI를 역변환하여 패키지 이름을 생성합니다. 예를 들어, 유형 Customer 및 URI http://xsd.ibm.com을 갖는 데이터 오브젝트는 Java 패키지 com.ibm.xsd.Customer의 인스턴스를 생성합니다. 그러면 런타임이 SDO의 특성에서 값을 추출하고 이 특성을 Java 클래스의 인스턴스에 있는 필드에 지정합니다.
Java 클래스가 사용자 정의 인터페이스인 경우 생성 코드를 대체하고 런타임이 인스턴스화할 수 있는 구체적 클래스를 제공해야 합니다. 런타임이 구체적 클래스를 작성할 수 없으면 예외가 발생합니다.
Java 유형이 java.lang.Object인 경우 생성 유형은 xsd:anyType입니다. 모듈은 임의의 SDO를 사용하여 이 인터페이스를 호출할 수 있습니다. 런타임이 해당 클래스를 찾을 수 있는 경우, 런타임은 사용자 정의 Java 클래스 및 배열과 동일한 방법으로 구체적 클래스를 인스턴스화하려고 합니다. 그렇지 않은 경우 런타임은 SDO를 Java 인터페이스로 전달합니다.
해당 메소드가 java.lang.Object 유형을 리턴하더라도 메소드가 구체적 유형을 리턴하는 경우, 런타임은 SDO로만 변환합니다. 런타임은 다음 단락에 설명한 대로 사용자 정의 Java 클래스 및 배열을 SDO로 변환하는 메소드와 유사한 변환을 사용합니다.
Java 클래스 또는 배열에서 SDO로 변환하는 경우, 런타임은 Java 유형의 패키지 이름을 역변환하여 생성된 URI를 갖고 Java 클래스 이름과 동일한 유형을 갖는 데이터 오브젝트를 작성합니다. 예를 들어, Java 클래스 com.ibm.xsd.Customer는 유형 Customer를 갖는 URI http://xsd.ibm.com 및 SDO로 변환됩니다. 그런 다음 런타임은 Java 클래스 구성원을 검사하고 해당 값을 SDO의 특성에 지정합니다.
구체적 Java 컨테이너 클래스(예: Vector, HashMap, HashSet 등)로 변환하는 경우 런타임은 적합한 컨테이너 클래스를 인스턴스화합니다. 런타임은 사용자 정의 Java 클래스 및 배열에 사용된 메소드와 유사한 메소드를 사용하여 컨테이너 클래스를 채웁니다. 런타임이 구체적 Java 클래스를 찾을 수 없는 경우에는 SDO로 컨테이너 클래스를 채웁니다.
구체적 Java 컨테이너 클래스를 SDO로 변환하는 경우 런타임은 "Java를 XML로 변환에서 표시된 생성 스키마를 사용합니다."
인터페이스 | 구체적인 기본 클래스 |
---|---|
콜렉션 | HashSet |
맵 | HashMap |
목록 | ArrayList |
세트 | HashSet |