2012-10-15 6 views
1

저지를 JSON 데이터 표현으로 사용하여 객체 필드를 비 직렬화 할 수 없습니다. "data"필드에는 정수, 문자열, 문자열 목록, 또는 기타 JAXB 태그 객체가 포함될 수 있습니다. 다음과 같이저지에서 객체 필드를 비 직렬화하는 방법

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
public class ReturnValue{  

    private Object data; 

    public ReturnValue() { } 

    public ReturnValue(Object data) { 
     this.data = data; 
    } 

    public Object getData() { 
     return data; 
    } 

    @Override 
    public String toString() { 
     return "ReturnValue [data=" + data + "]"; 
    } 

} 

클라이언트 보이는 :

내 코드입니다

@Singleton 
@Path("/test") 
public class Test { 

    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    public Object get() { 
     return Response.ok(new ReturnValue("TEST_SERVER")).build(); 
    } 

} 

serialzed 객체를 잘 보이는 :

자원이다

public class MyClient { 

    private String location = "http://localhost:9998/test"; 
    private Client client; 
    private WebResource resource; 

    public MyClient() { 
     init(); 
    } 

    private void init() { 
     ClientConfig clientConfig = new DefaultClientConfig(); 
     clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); 
     client = Client.create(clientConfig); 
     resource = client.resource(location); 
    } 

    private void test() { 
     ClientResponse response = resource.accept(MediaType.APPLICATION_JSON).get(ClientResponse.class); 
     ReturnValue value = response.getEntity(ReturnValue.class); 
     System.out.println(value); 
    } 

    public static void main(String[] args) { 
     MyClient client = new MyClient(); 
     client.test(); 
    } 

} 

{"data":{"@type":"xs:string","$":"TEST_SERVER"}} 
당신이 볼 수 있듯이

ReturnValue [data={@type=xs:string, $=TEST_SERVER}] 

, 문자열이 인스턴스화되지 않습니다

이 5,콘솔에 출력됩니다. 내 문제를 해결하기 위해 무엇을 할 수 있습니까?

답변

0

data의 형식으로 ReturnValue에 사용하는 것이 문제입니다. 이 때문에 JAXB는 데이터 유형 (실제로는 String)과 함께 결과를 마샬링하므로 클라이언트 측에서 객체를 언 마샬링하는 방법을 알게됩니다. 당신이 초기 ReturnValue 사용

다음 코드 :

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
JAXB.marshal(new ReturnValue("cvb"), baos); 
System.out.println(new String(baos.toByteArray())); 

이 출력을 생성는 (: 유형 = "XS : 문자열"XSI 참조)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<returnValue> 
    <data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">cvb</data> 
</returnValue> 

을,하지만 당신은 유형을 변경하는 경우 데이터 속성을 String으로 Jaxb가 문자열과 프리미티브를 처리하는 방식으로 보입니다 :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<returnValue> 
    <data>cvb</data> 
</returnValue> 

비슷한 결과를 출력합니다 :

TEST_SERVER 
관련 문제