Simple test using WSDataSource and SmartClientOperations.wsdl:
The Developer Console WSRequest output with current smartgwt.jar reads:
data element is empty !
While the Developer Console WSRequest output with smartgwt.jar from svn 827 (SmartClient 7.0RC3) reads:
data element properly filled.
SmartClientOperations.wsdl is taken from the current svn.
The problem lays at the end of DataSource.js xmlSerializeFields fuction:
Changing:
if (!flatData && !isc.isA.Schema(this)) {
to:
if (!flatData) {
resolves this issue (at least for me) and I am a little bored patching it every svn update I did.
Should I create new issue at the smartgwt project hosting ?
Just want to fix it permanently.
MichalG
Code:
package org.yournamehere.client;
import com.google.gwt.core.client.EntryPoint;
import com.smartgwt.client.data.Criteria;
import com.smartgwt.client.data.DSCallback;
import com.smartgwt.client.data.DSRequest;
import com.smartgwt.client.data.DSResponse;
import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.data.WSDLLoadCallback;
import com.smartgwt.client.data.WSDataSource;
import com.smartgwt.client.data.WebService;
import com.smartgwt.client.data.XMLTools;
import com.smartgwt.client.data.fields.DataSourceTextField;
import com.smartgwt.client.types.DSDataFormat;
import com.smartgwt.client.util.SC;
public class MainEntryPoint implements EntryPoint {
public MainEntryPoint() {
}
public void onModuleLoad() {
SC.showConsole();
final DataSource ds = new WSDataSource();
ds.setDataFormat(DSDataFormat.XML);
ds.setRecordXPath("/List/country");
ds.setDataURL("data.xml");
DataSourceTextField continentField = new DataSourceTextField("continent", "Continent");
ds.setFields(continentField);
XMLTools.loadWSDL("SmartClientOperations.wsdl", new WSDLLoadCallback() {
public void execute(WebService webService) {
ds.fetchData(new Criteria("continent", "a"), new DSCallback() {
public void execute(DSResponse response, Object rawData, DSRequest request) {
System.out.println("Done - see data element at the Developer Console, RPC Tab, WSRequest");
}
});
}
});
}
}
Code:
<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Header></soap:Header>
<soap:Body
xmlns:ns0="urn:operations.smartclient.com">
<ns0:fetchRequest>
<dataSource>isc_OID_0</dataSource>
<operationType>fetch</operationType>
<data/>
</ns0:fetchRequest>
</soap:Body>
</soap:Envelope>
While the Developer Console WSRequest output with smartgwt.jar from svn 827 (SmartClient 7.0RC3) reads:
Code:
<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Header></soap:Header>
<soap:Body
xmlns:ns0="urn:operations.smartclient.com">
<ns0:fetchRequest>
<dataSource>isc_OID_0</dataSource>
<operationType>fetch</operationType>
<data>
<continent>a</continent>
</data>
</ns0:fetchRequest>
</soap:Body>
</soap:Envelope>
SmartClientOperations.wsdl is taken from the current svn.
The problem lays at the end of DataSource.js xmlSerializeFields fuction:
Code:
// if there's any data left, tack them on the end, but *not* if this DataSource came
// form XML Schema, in which case the extra data is sure to be invalid
if (!flatData && !isc.isA.Schema(this)) {
for (var fieldName in data) {
output.append(this.xmlSerializeField(fieldName, data[fieldName], flags, indent));
}
}
if (!flatData && !isc.isA.Schema(this)) {
to:
if (!flatData) {
resolves this issue (at least for me) and I am a little bored patching it every svn update I did.
Should I create new issue at the smartgwt project hosting ?
Just want to fix it permanently.
MichalG