Why don't you use Axis Java2WSDL? (I even don't understand why OfBiz tries to generate WSDL files by themself??)
I generated my WSDL's out of OfBiz with the help of Java2WSDL and it works fine. Just had to be careful to stay WS-I compliant. (Our services have complex types and are accessed by .NET clients). Michael Vinay Agarwal wrote: > > Hello, > > After spending way too much time trying to fix WSDL generated code (in > .NET) > to access OFBiz SOAP services, I ended up writing a rather simple > low-level > "driver" for it. The driver takes input map of parameters (Dictionary in > NET) and returns a map from the output of the service. It currently only > handles strings but can be easily extended as needed. > > > > The code is provided below. The main function shows usage of this driver > for > running "ping" service on Si's demo server. > > > > Regards, > > Vinay Agarwal > > > > ----- Code place in a .cs file and use VS2005 to run > > > > using System; > > using System.Collections.Generic; > > using System.IO; > > using System.Net; > > using System.Text; > > using System.Web; > > using System.Xml; > > > > namespace Soap { > > > > class Program { > > public static string server = > "http://demo.opensourcestrategies.com:8085/webtools/control/SOAPService/"; > > public static string UrlNS = "http://www.ofbiz.org/service/"; > > public static string UrlEnv = > "http://schemas.xmlsoap.org/soap/envelope/"; > > public static string UrlXsi = > "http://www.w3.org/2001/XMLSchema-instance"; > > public static string TypString = "xsd:string"; > > public static string ResultKey = "responseMessage"; > > public static string ResultVal = "success"; > > static Dictionary<string, string> SoapService(string command, > Dictionary<string, string> map) { > > byte[] postDataBytes = getPostData(command, map); > > string postData = Encoding.UTF8.GetString(postDataBytes); > > Console.WriteLine(postData); > > HttpWebRequest request = > (HttpWebRequest)WebRequest.Create(server); > > request.Method = "POST"; > > request.ContentLength = postDataBytes.Length; > > using (Stream requestStream = request.GetRequestStream()) { > > requestStream.Write(postDataBytes, 0, > postDataBytes.Length); > > } > > > > // get response and write to console > > HttpWebResponse response = > (HttpWebResponse)request.GetResponse(); > > Dictionary<string, string> result = > getResponse(response.GetResponseStream()); > > response.Close(); > > return result; > > } > > > > static byte[] getPostData(string command, Dictionary<string, > string> > map) { > > using (MemoryStream stream = new MemoryStream()) { > > XmlTextWriter writer = new XmlTextWriter(stream, > Encoding.UTF8); > > writer.WriteStartDocument(); > > writer.WriteStartElement("soapenv:Envelope"); > > writer.WriteAttributeString("xmlns:soapenv", UrlEnv); > > writer.WriteAttributeString("xmlns:xsi", UrlXsi); > > writer.WriteStartElement("soapenv:Body"); > > writer.WriteStartElement(command, UrlNS); > > foreach (KeyValuePair<string, string> entry in map) { > > writer.WriteStartElement(entry.Key, UrlNS); > > writer.WriteAttributeString("type", TypString); > > writer.WriteString(entry.Value); > > writer.WriteEndElement(); > > } > > writer.WriteEndElement(); > > writer.WriteEndElement(); > > writer.WriteEndElement(); > > writer.Flush(); > > return stream.ToArray(); > > } > > } > > > > static Dictionary<string, string> getResponse(Stream stream) { > > Dictionary<string, string> map = new Dictionary<string, > string>(); > > try { > > XmlTextReader reader = new XmlTextReader(stream); > > reader.Read(); // move past container > > reader.ReadStartElement("soapenv:Envelope"); > > reader.ReadStartElement("soapenv:Body"); > > reader.ReadStartElement(); > > reader.Read(); > > while (reader.NodeType != XmlNodeType.EndElement) { > > string key = reader.Name; > > string value = reader.ReadElementString(); > > reader.MoveToContent(); > > map.Add(key, value); > > } > > } catch { > > return null; > > } > > // Check if service call was success or failure > > if (map.ContainsKey(ResultKey)) { > > if (map[ResultKey] == ResultVal) { > > map.Remove(ResultKey); > > return map; > > } > > } > > return null; > > } > > > > static void Main(string[] args) { > > Dictionary<string, string> map = new Dictionary<string, > string>(); > > map.Add("message", "silly"); > > Dictionary<string, string> result = SoapService("ping", map); > > Console.ReadKey(); > > } > > } > > } > > > -- View this message in context: http://www.nabble.com/Using-OFBiz-SOAP-with-.NET-2.0-tf3642589.html#a10178671 Sent from the OFBiz - User mailing list archive at Nabble.com.