2012-10-12 2 views
3

JAXB를 사용하여 JAXB를 사용하여 객체를 마샬링합니다. 간단한 객체 인 NameValuePair을 파스칼 케이스로 보내고 싶습니다. camelCase 래퍼에 싸여있는 것을 제외하고는 모두 작동합니다 (<nameValuePairs>). 내가 <nameValuePairs>을 변경할 수있는 방법JAXB - 클래스 콜렉션 용 PascalCase 래퍼

<nameValuePairs> 
    <NameValuePair> 
     <Name>A Name</Name> 
     <Value>1</Value> 
    </NameValuePair> 
    <NameValuePair> 
     <Name>Another Name</Name> 
     <Value>2</Value> 
    </NameValuePair> 
</nameValuePairs> 

:

@XmlRootElement(name = "NameValuePair") 
public class NameValuePair implements Serializable { 

    private String name = null; 
    private String value = null; 

    public NameValuePair(String name, String value) { 
     this.name = name; 
     this.value = value; 
    } 

    @XmlElement(name = "Name") 
    public String getName() { 
     return name; 
    } 

    @XmlElement(name = "Value") 
    public String getValue() { 
     return value; 
    } 
} 

이 그것이 사용되는 방법은 다음과 같습니다 :

public Response getNameValuePairs() { 
    NameValuePair[] nameValuePairs; 
    try { 
     nameValuePairs = manager.getNameValuePairs(); 
    } catch (Exception e) { 
     return Response 
       .status(Response.Status.INTERNAL_SERVER_ERROR) 
       .build(); 
    } 

    return Response 
      .status(Response.Status.OK) 
      .entity(nameValuePairs) 
      .build(); 
} 

그러나, XML은 다음과 같습니다 반환

내 클래스 <NameValuePairs>에 나머지 스키마와 일치합니까?

답변

4

배열 이름이 XML의 루트 노드에 사용 된 것 같습니다. 나에게 가장 쉬운 방법은, 목록에서 개체를 래핑하는 것 같다

@XmlRootElement(name="NameValuePairs") 
public class NameValuePairs { 
    List<NameValuePair> nameValuePairs; 
} 

및 반환 :

public Response getNameValuePairs() { 
    return Response 
     .entity(new NameValuePairs(...)) 
     .build(); 
} 
+0

감사합니다,이 일했다. 웬일인지 나는 getter를 사용하는 대신'List '를 public으로 만들어야한다. 그렇지 않으면 예외가 생긴다. '@XmlElement' 주석을'List '에 추가해야했습니다. – shuniar