2013-10-05 2 views
2

@XmlJavaTypeAdapter가 @XmlSeeAlso와 함께 작동하는 방법을 파악하는 데 문제가 있습니다. 나는 추상 클래스를 가지고 있고 나는 그것이 확장하는 클래스에 대한 클래스도 참조 지정 JAXB Java 유형 어댑터 사용 방법

@XmlSeeAlso({Position.class}) 
public abstract class Component implements Serializable { 
    ... 

그리고 이후

이 위치가 작동 내가 할 어댑터를 사용하여 노 인수 생성자가없는됩니다 :

@XmlJavaTypeAdapter(PositionAdapter.class) 
public class Position extends Component{ 
    ... 

그러나 JAXB는 이것을 무시한 것처럼 보이며 "... arg-default 기본 생성자가 없습니다."오류가 발생합니다.

여기 내 어댑터는 다음과 같습니다

public class AdaptedPosition { 
    private double x; 
    private double y; 

    @XmlElement(name = "x") 
    public double getX(){ 
     return x; 
    } 

    @XmlElement(name="y") 
    public double getY(){ 
     return y; 
    } 

    public void setX(double x){ 
     this.x = x; 
    } 

    public void setY(double y){ 
     this.y = y; 
    } 
} 


public class PositionAdapter extends XmlAdapter<AdaptedPosition, Position>{ 

    @Override 
    public AdaptedPosition marshal(Position position) throws Exception { 
     AdaptedPosition adaptedPosition = new AdaptedPosition(); 
     adaptedPosition.setX(position.getX()); 
     adaptedPosition.setY(position.getY()); 
     return adaptedPosition; 
    } 

    @Override 
    public Position unmarshal(AdaptedPosition position) throws Exception { 
     return new Position(position.getX(), position.getY()); 
    } 

} 

사람이 내가 잘못 무엇이 뒤에 이유 등을 알고 있나요?

감사합니다.

답변

0

오류를 확인하기 위해 어떤 코드를 실행합니까? 그것을 재현 할 수 없습니다.

Marshaller marshaller = JAXBContext.newInstance(SomeElement.class).createMarshaller(); 
    SomeElement element = new SomeElement(); 
    element.setPosition(new Position(1, 1)); 
    marshaller.marshal(element, System.out); 

이으로 출력한다 :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><someElement><position><x>1.0</x><y>1.0</y></position></someElement>