MAKE IT SIMPLE

[JAXB] java.lang.IllegalArgumentException: Illegal class inheritance loop. 본문

Spring/에러 노트

[JAXB] java.lang.IllegalArgumentException: Illegal class inheritance loop.

punchlips 2021. 8. 14. 07:09

이제 jaxb 작업이 익숙해졌다~ 생각해졌을 때쯤 나를 당황시킨 에러가 발생했다.. 바로 아래와 같은 에러였다.

 

java.lang.IllegalArgumentException: Illegal class inheritance loop. 

Outer class XXX may not subclass from inner class.

 

우선 스키마 구조가 어떻게 되어 있었냐면 

<xs:schema .... >
<xs:element name="Response">
	<xs:complexType>
		<xs:sequence>
			<xs:element name="Response">
				<xs:complexType>
                  .
                  .
                  .
                  .
                  .
       </xs:sequence>
    </xs:complexType>
</xs:element>
</xs:schema>

 

위 예시처럼 상위 엘리먼트의 이름이 complextType 하위 엘리먼트의 이름과 같은 상황이였다. 

 

<jaxb:bindings node="//xs:element[@name='Response']/xs:complexType/xs:sequence/xs:element[@name='Response']">
    <jaxb:class name="ResponseElement"/>
</jaxb:bindings>

 

따라서 나는 고객사의 스키마를 함부로 바꿀 수는 없으니 바인딩 파일을 아래와 같이 작성했는데?

위와 같은 에러가 났던 것이었던 것 ! 분명 노드 선택은 잘 했는데... 구글링한 결과...

 

=> 사용자 정의 클래스(jaxb:class)를 생성하려면 xs:complexType 까지 select 해주어야 한다고 한다

 

<jaxb:bindings node="//xs:element[@name='Response']/xs:complexType/xs:sequence
					/xs:element[@name='Response']/xs:complexType">
    <jaxb:class name="ResponseElement"/>
</jaxb:bindings>

바로 이렇게!!!

 

아무튼 이렇게 또 한바탕 삽질을 하고 무사히 해결이 되었다..

끝!

 

 

'Spring > 에러 노트' 카테고리의 다른 글

[Spring Boot 에러] SSLHandshakeException  (0) 2021.02.02
Comments