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.