Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Program to patch Enterprise.wsdl which Salesforce thinks is okay but causes Microsoft's wsdl.exe to emit non-working code
namespace FixEnterpriseWsdl
{
using System;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Xml;
/// <summary>
/// Implements a fix for https://developer.salesforce.com/forums?id=906F0000000AiPEIA0
/// </summary>
class Program
{
static int Main(string[] args)
{
if (args.Length == 0)
{
Console.WriteLine("Implements a fix for https://developer.salesforce.com/forums?id=906F0000000AiPEIA0");
Console.WriteLine("Expects a single command line parameter - a path to an Enterprise.wsdl file");
return -1;
}
if (!File.Exists(args[0]))
{
Console.WriteLine("File not found: " + args[0]);
return -1;
}
Console.WriteLine(Assembly.GetExecutingAssembly().GetName().Name + " started");
const string docNsUrl = "http://schemas.xmlsoap.org/wsdl/";
const string xsdNsUrl = "http://www.w3.org/2001/XMLSchema";
try
{
var doc = new XmlDocument();
doc.Load(args[0]);
var nsManager = new XmlNamespaceManager(doc.NameTable);
nsManager.AddNamespace("docns", docNsUrl);
nsManager.AddNamespace("xsd", xsdNsUrl);
XmlElement docElement = doc.DocumentElement;
XmlNode node = docElement.SelectSingleNode("docns:types/xsd:schema/xsd:complexType[@name='ListViewRecord']", nsManager);
if (node.ChildNodes.OfType<XmlElement>().Count() == 1)
{
// insert a node after the first one
var newNode = doc.CreateElement("xsd", "attribute", xsdNsUrl);
var nameAttribute = doc.CreateAttribute("name");
nameAttribute.Value = "tmp";
var typeAttribute = doc.CreateAttribute("type");
typeAttribute.Value = "xsd:string";
newNode.Attributes.Append(nameAttribute);
newNode.Attributes.Append(typeAttribute);
node.AppendChild(newNode);
doc.Save(args[0]);
Console.WriteLine("Fixed " + args[0]);
}
else
{
Console.WriteLine("Nothing to do");
}
return 0;
}
catch (Exception ex)
{
Console.WriteLine("{0}: {1}", ex.GetBaseException().GetType().Name, ex.GetBaseException().Message);
return -1;
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.