abstract class MessageContractImporterInternal : IWsdlImportExtension
{
+ protected abstract void Init (WsdlImporter importer);
+
public void ImportContract (WsdlImporter importer,
WsdlContractConversionContext context)
{
if (this.importer != null || this.context != null)
throw new SystemException ("INTERNAL ERROR: unexpected recursion of ImportContract method call");
+ Init (importer);
+
schema_set_in_use = new XmlSchemaSet ();
schema_set_in_use.Add (importer.XmlSchemas);
foreach (WSDL wsdl in importer.WsdlDocuments)
bool IsOperationImported (PortType pt, Operation op)
{
foreach (OperationMessage opmsg in op.Messages) {
- var parts = context.GetMessageDescription (opmsg).Body.Parts;
- foreach (var part in parts)
+
+ var opdsc = context.GetMessageDescription (opmsg);
+
+ var parts = opdsc.Body.Parts;
+ var ret = opdsc.Body.ReturnValue;
+
+ if ((ret != null) &&
+ (ret.DataContractImporter != null || ret.XmlSerializationImporter != null))
+ return true;
+
+ foreach (var part in opdsc.Body.Parts)
if (part.DataContractImporter != null || part.XmlSerializationImporter != null)
return true;
}
class DataContractMessageContractImporterInternal : MessageContractImporterInternal
{
- XsdDataContractImporter dc_importer = new XsdDataContractImporter ();
+ XsdDataContractImporter dc_importer;
+ protected override void Init (WsdlImporter importer)
+ {
+ if (dc_importer == null)
+ dc_importer = importer.GetState<XsdDataContractImporter> ();
+ }
+
protected override void ImportPartsBySchemaElement (QName qname, List<MessagePartDescription> parts, Message msg, MessagePart part)
{
XmlSchemaElement element = (XmlSchemaElement) schema_set_in_use.GlobalElements [qname];
class XmlSerializerMessageContractImporterInternal : MessageContractImporterInternal
{
- CodeCompileUnit ccu = new CodeCompileUnit ();
+ CodeCompileUnit ccu;
XmlSchemaSet schema_set_cache;
XmlSchemaImporter schema_importer;
XmlCodeExporter code_exporter;
public CodeCompileUnit CodeCompileUnit {
get { return ccu; }
}
+
+ protected override void Init (WsdlImporter importer)
+ {
+ if (ccu == null)
+ ccu = importer.GetState<CodeCompileUnit> ();
+ }
protected override void ImportPartsBySchemaElement (QName qname, List<MessagePartDescription> parts, Message msg, MessagePart msgPart)
{