2017-05-05 3 views
0

xsd 파일에서 클래스를 생성했습니다.JAXB 생성 클래스 필드가 추상입니다

이 클래스에는 추상 클래스가있는 필드가 들어 있습니다. 이 abstract 클래스에는 두 가지 구현이 있습니다. Impl1CLass와 Impl2Class라고 부르 자.

xsd 스키마를 수정할 수 없으며 생성 된 클래스를 수정할 수 없습니다.

<dep xsi:type="Impl1Class" xsi:nil="true"/> 

생성 된 클래스에 티 필드는 다음과 같습니다 :

protected Dep dep; 

내가해야 할 일은

은 JAXB 정렬 화이 클래스와 추상 필드가 null 값을 가질 때, 나는 이런 식으로 뭔가를 얻을 필요가있다

Dep는 추상 클래스입니다.

그래서 내가 추상 클래스로 BoundType와 (때문에) XmlAdapter를 만들려고

(Impl1Class)이 전무하고 유형이 특정 하나라고 설정해야합니다 및 치 형이 JAXBElement 첨부이지만이 reuires 때문에 운이 없었다 기본 비 arg 생성자이지만 JAXBElement에는 그러한 생성자가 없습니다.

비고. xsi : nil = "true"일 때 xsi : type을 설정하고 싶습니다. 어떻게해야합니까?

여기에 생성 된 클래스 어떤 주석

protected DepartmentKey department; 

답변

0

당신이 전화를하는 동안 세터 방법을 사용하여 null을 설정할 수없는 대상이 클래스 필드에

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(
    name = "DepartmentKey" 
) 
@XmlSeeAlso({GroupDepartmentKey.class, EnterpriseDepartmentKey.class}) 
public abstract class DepartmentKey { 
    public DepartmentKey() { 
    } 
} 

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(
    name = "GroupDepartmentKey", 
    propOrder = {"serviceProviderId", "groupId", "name"} 
) 
public class GroupDepartmentKey extends DepartmentKey { 
    @XmlElement(
     required = true 
    ) 
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class) 
    protected String serviceProviderId; 
    @XmlElement(
     required = true 
    ) 
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class) 
    protected String groupId; 
    @XmlElement(
     required = true 
    ) 
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class) 
    protected String name; 
    ...... 
} 

.

Impl1Class impl1Class = new Impl1Class(); 
imple1Class.setDep(null); 

setter 메서드를 사용할 수 있습니까? 그렇지 않은 경우 Impl1Class을 서브 클래스 화하고 null로 설정해야 할 수 있습니다.

희망이 도움이됩니다.

+0

Sorrry, 나는 당신을 얻지 못했습니다. 나는 세터가 없다. 그래서 Impl1Class (실제로 Dep 클래스의 하위 인스턴스)를 확장하고 Setter를 추가하여 Dep를 자신에게 설정하도록 제안 하시겠습니까? – Dmitriy

+0

@Dmitriy Dep 및 Impl1Class 코드를 공유 할 수 있습니까? 어떤 클래스가 Dep 클래스의 래퍼 이건간에 Dep를 null로 설정할 수 있습니다. 그게 내 대답이 의미하는 것입니다. –

+0

수정 된 질문 – Dmitriy