2017-05-22 5 views
0

내가JAXB 속성으로 요소 값

<ROOT> 
    <CHILD1 VALUE=""/> 
    <CHILD2 VALUE=""/> 
</ROOT> 

로 정의 XML이 나는 값을 가진 복합 타입으로 자식 1을 치료의 요소의 값으로 VALUE 속성을 대신 꺼내 수있는 방법이 있나요 속성을 사용하면이 pojo에 맞을 수 있습니다.

@XmlRootElement(name="ROOT") 
public class Root { 

    @XmlElement(name="CHILD1") 
    private String child1; 

    @XmlElement(name="CHILD2") 
    private String child2; 
} 

답변

0

역 직렬화를 위해 속성을 변환하는 어댑터를 작성했습니다.

@XmlElement(name = "CHILD1") 
@XmlJavaTypeAdapter(ValueAdapter.class) 
private String child1; 

public class ValueAdapter extends XmlAdapter<Object, String> { 
    private static String VALUE = "VALUE"; 
    @Override 
    public String unmarshal(Object e) throws Exception { 
     if (e instanceof ElementNSImpl && ((ElementNSImpl)e).hasAttribute(VALUE)) { 
      return ((ElementNSImpl)e).getAttribute(VALUE); 
     } 
     return null; 
    } 

    @Override 
    public Object marshal(String s) throws Exception { 
     return null; 
    } 
} 
0

음 JAXB의 기능을 결합 일부 cutomiziation이 있습니다 : https://docs.oracle.com/javase/tutorial/jaxb/intro/custom.html 그러나 이것은 내가 추측 중요한 뭔가 오히려 복잡 할 것입니다.

Java Pojos가 생성되지 않은 경우 하위 필드에 직접 액세스 할 수있는 메소드를 추가하면됩니다. Root.getChild1()을 호출 할 Root.getChild1String(). getValue()

또는 xml 스키마를 변경할 수 있습니다.