Здравствуйте!
Использую ХЕ2.
Реализовал веб-сервис, который должен обрабатывать массив значений:
.....
Tindicator = class (TRemotable)
private
FindicatorName: String;
FindicatorCode: String;
published
property indicatorName: String read FindicatorName write FindicatorName;
property indicatorCode: String read FindicatorCode write FindicatorCode;
end;
arr_indic = array of Tindicator;
TOrderInfo = class (TRemotable)
private
FdiagnosticCode: String;
FdiagnosticName: String;
ForderPriority: Integer;
Findicators: arr_indic;
published
property diagnosticCode: String read FdiagnosticCode write FdiagnosticCode;
property diagnosticName: String read FdiagnosticName write FdiagnosticName;
property orderPriority: Integer read ForderPriority write ForderPriority;
property indicators: arr_indic read Findicators write Findicators;
end;
....
Но встал вопрос, что клиент JAX-WS не может работать с массивом, а только с последовательным набором тэгов:
...
<NS1:OrderInfo id="6" xsi:type="NS1:OrderInfo">
<diagnosticCode xsi:type="xsd:string">555</diagnosticCode>
<diagnosticName xsi:type="xsd:string" />
<orderPriority xsi:type="xsd:int">0</orderPriority>
<NS2:Tindicator id="7" xsi:type="NS2:Tindicator">
<indicatorName xsi:type="xsd:string">ALT</indicatorName>
<indicatorCode xsi:type="xsd:string">123</indicatorCode>
</NS2:Tindicator>
<NS2:Tindicator id="8" xsi:type="NS2:Tindicator">
<indicatorName xsi:type="xsd:string">GLU</indicatorName>
<indicatorCode xsi:type="xsd:string">333</indicatorCode>
</NS2:Tindicator>
</NS1:OrderInfo>
...
т.е. индикаторы прямо внутри OrderInfo.
Просмотрел всю документацию по передачи сложных типов(ее очень мало), не помогло. Единственное нашел кусочек кода, но Дельфи не понимает эти классы:
TBaseComplexRemotable = class(TAbstractComplexRemotable)
public
class procedure Save(
AObject : TBaseRemotable;
AStore : IFormatterBase;
const AName : string;
const ATypeInfo : PTypeInfo
);override;
class procedure Load(
var AObject : TObject;
AStore : IFormatterBase;
var AName : string;
const ATypeInfo : PTypeInfo
);override;
class procedure RegisterAttributeProperty(const AProperty : shortstring);virtual;
class procedure RegisterAttributeProperties(const APropertList : array of shortstring);virtual;
class function IsAttributeProperty(const AProperty : shortstring):Boolean;
procedure Assign(Source: TPersistent); override;
end;
TBaseComplexSimpleContentRemotable provides implementation for the “XML Schema” complex types which extend simple types with attributes. The following example illustrates this :
<xs:complexType name="DecimalWithUnits">
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute name="Units" type="xs:string"
use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
This type will be translate by ws_helper to Pascal as
DecimalWithUnits = class(TComplexFloatExtendedContentRemotable)
private
FUnits : string;
published
property Units : string read FUnits write FUnits;
end;
Помогите найти выход.