将XML响应映射到数据记录(Smartgwt)
我已将RestDatasource子类化以创建自己的数据源。这是我的数据源的构造函数将XML响应映射到数据记录(Smartgwt),gwt,smartgwt,Gwt,Smartgwt,我已将RestDatasource子类化以创建自己的数据源。这是我的数据源的构造函数 public CustomDS (){ setDataProtocol(DSProtocol.POSTMESSAGE); setDataFormat(DSDataFormat.XML); DataSourceTextField firstNameField = new DataSourceTextField("firstName", "First Name");
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时,这些声明现在被忽略,除非该类型引用您声明的特定数据源