将XML响应映射到数据记录(Smartgwt)

将XML响应映射到数据记录(Smartgwt),gwt,smartgwt,Gwt,Smartgwt,我已将RestDatasource子类化以创建自己的数据源。这是我的数据源的构造函数 public CustomDS (){ setDataProtocol(DSProtocol.POSTMESSAGE); setDataFormat(DSDataFormat.XML); DataSourceTextField firstNameField = new DataSourceTextField("firstName", "First Name");

我已将RestDatasource子类化以创建自己的数据源。这是我的数据源的构造函数

    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);
}

这是xml响应

 <?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>

问题

在transformResponse()方法中,response.getDataAsRecordList().getLength()返回3,但我似乎无法用所需的属性(即firstName、id、lastName)填充记录。有人看到这里有什么不对劲吗

编辑: 正如我建议的那样,我将数据源更改为从数据源扩展而不是RestDataSource。我仍然有这个问题。
如果我从XML中删除xsi:type=“warehouse:User”,这就可以了。对此有什么想法吗?

如果您试图解析如图所示的自定义格式,请不要将RestDataSource子类化,而只将DataSource子类化。RestDataSource上有许多特定于它所期望的消息格式的设置,这些设置的结构比您试图解析的要多得多


。。现在您使用的是DataSource—如果可以的话,请去掉xsi:type声明,因为它们是浪费的字节。但是,如果您抓取一个夜间构建(来自smartclient.com/builds),您将看到,在处理XML时,这些声明现在被忽略,除非该类型引用了您声明的特定数据源。

如果您试图解析如图所示的自定义格式,请不要将RestDataSource子类化,而只将DataSource子类化。RestDataSource上有许多特定于它所期望的消息格式的设置,这些设置的结构比您试图解析的要多得多

。。现在您使用的是DataSource—如果可以的话,请去掉xsi:type声明,因为它们是浪费的字节。但是,如果您抓取一个夜间构建(来自smartclient.com/builds),您将看到,在处理XML时,这些声明现在被忽略,除非该类型引用您声明的特定数据源