2011-10-02 3 views
1

내 데이터 소스를 만들려면 RestDatasource의 하위 클래스를 만들었습니다. 이것은 이것은 transformResponse() 메소드 XML 응답데이터 레코드에 대한 XML 응답 매핑 (Smartgwt)

<?xml version="1.0" encoding="UTF-8"?> 
<qm:GetResultsResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:qm="someurl" xmlns:warehouse="someurl"> 
    <records xsi:type="warehouse:User" id="id1" firstName="fname1" lastName="Reddy"> 
    <voiceUserProperties languageId="en-US"/> 
    </records> 
    <records xsi:type="warehouse:User" id="id2" firstName="fname3" lastName="Reddy"> 
    <voiceUserProperties languageId="en-US"/> 
    </records> 
    <records xsi:type="warehouse:User" id="id3" firstName="fnam4" lastName="Reddy"> 
    <voiceUserProperties languageId="en-US"/> 
    </records> 
</qm:GetResultsResponse> 

질문

내 데이터 소스

public CustomDS(){ 
    setDataProtocol(DSProtocol.POSTMESSAGE); 
    setDataFormat(DSDataFormat.XML); 

    DataSourceTextField firstNameField = new DataSourceTextField("firstName", "First Name"); 
    DataSourceTextField lastNameField = new DataSourceTextField("lastName", "Last Name"); 
    DataSourceTextField userIDField = new DataSourceTextField("id", "User ID"); 

    setFields(firstNameField, lastNameField, userIDField); 

    setXmlRecordXPath("/qm:GetResultsResponse/*"); 
    XmlNamespaces ns = new XmlNamespaces(); 
    ns.addNamespace("qm", "someurl"); 
    setXmlNamespaces(ns); 

} 생성자이다 response.getDataAsRecordList() .getLength() 3 반환하지만 레코드가 필요한 특성 (예 : firstName, id, lastName 채워진 것 같습니다.). 아무도 여기에 뭐가 잘못 보이니?

EDIT : 데이터 소스가 RestDataSource가 아닌 DataSource에서 확장되도록 변경된 것이 좋습니다. 나는 아직도이 문제가있다. XML에서 xsi : type = "warehouse : User"를 제거하면 정상적으로 작동합니다. 이것에 대한 아이디어가 있습니까?

답변

1

표시된 것처럼 사용자 정의 형식을 구문 분석하려는 경우 RestDataSource의 하위 클래스를 만들지 말고 DataSource를 하위 클래스로 만듭니다. RestDataSource는 기대하는 메시지 형식에 특정한 많은 설정을 가지고 있습니다. 이것은 구문 분석하려는 것보다 훨씬 많은 구조를 가지고 있습니다.

.. 대신 DataSource를 사용하고 있습니다. 가능한 경우 xsi : type 선언을 없애 버립니다. 낭비되는 바이트이기 때문에. 그러나 야간 빌드 (smartclient.com/builds에서)를 가져 오면 타입이 선언 한 특정 DataSource를 참조하지 않는 한 XML을 처리 할 때 이러한 선언이 무시된다는 것을 알 수 있습니다.