Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > ASP .Net > ASP .Net Web Services > IXmlSerializable.GetSchema creates mutiple schema elements in my wsdl

Reply
Thread Tools

IXmlSerializable.GetSchema creates mutiple schema elements in my wsdl

 
 
Jeremy
Guest
Posts: n/a
 
      07-18-2007
I've built a class that uses the IXmlSerializable interface to do custom
serialization. I"ve then used the IXmlSerializable.GetSchema() method to
output the schema of my class to the wsdl in my web service. The problem is
that the schema of my class appears in a seperate schema element in the
wsdl. It needs to be in the main schema element so that an application can
consume the web service properly, because I've found that at least with .net
apps, they only consume the first schema element. How can I get only one
schema element in the wsdl?

I've included my class and the wsdl snippets below:

My Class:
public class AnyTextData2 : AnyTextData,
System.Xml.Serialization.IXmlSerializable
{
public AnyTextData2()
{

}

System.Xml.Schema.XmlSchema
System.Xml.Serialization.IXmlSerializable.GetSchem a()
{
/*
<s:complexType name="AnyTextData2">
<s:simpleContent>
<s:extension base="s:string">
<s:attribute name="Attribute" type="s:string" />
</s:extension>
</s:simpleContent>
</s:complexType>
*/

System.Xml.Schema.XmlSchema pSchema = new
System.Xml.Schema.XmlSchema();
pSchema.ElementFormDefault =
System.Xml.Schema.XmlSchemaForm.Qualified;
pSchema.Id = "0"; //Seems an id is mandatory

//<s:complexType name="CData">
System.Xml.Schema.XmlSchemaComplexType pComplexType = new
System.Xml.Schema.XmlSchemaComplexType();
pComplexType.Name = "AnyTextData2";

//<xs:simpleContent>
System.Xml.Schema.XmlSchemaSimpleContent pSimpleContent = new
System.Xml.Schema.XmlSchemaSimpleContent();

//<s:extension base="s:string">
System.Xml.Schema.XmlSchemaSimpleContentExtension pExtension = new
System.Xml.Schema.XmlSchemaSimpleContentExtension( );
pExtension.BaseTypeName = new
System.Xml.XmlQualifiedName("string");//"s:string"

//<s:attribute name="Attribute" type="s:string" />
System.Xml.Schema.XmlSchemaAttribute pAttribute = new
System.Xml.Schema.XmlSchemaAttribute();
pAttribute.Name = "Attribute";
pAttribute.SchemaTypeName = new
System.Xml.XmlQualifiedName("string");//"s:string"
pExtension.Attributes.Add(pAttribute);

pSimpleContent.Content = pExtension;
pComplexType.ContentModel = pSimpleContent;

pSchema.Items.Add(pComplexType);

return pSchema;

}

void
System.Xml.Serialization.IXmlSerializable.ReadXml( System.Xml.XmlReader
reader)
{

}

void
System.Xml.Serialization.IXmlSerializable.WriteXml (System.Xml.XmlWriter
writer)
{
writer.WriteAttributeString("Attribute", this.Attribute);
writer.WriteCData(this.Text.Data);
}

}

WSDL snippets:
<?xml version="1.0" encoding="utf-8" ?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:tns="http://tempuri.org/" xmlns:s1="http://tempuri2.org/"
xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
targetNamespace="http://tempuri.org/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<s:schema elementFormDefault="qualified"
targetNamespace="http://tempuri.org/">
...
</s:schema>
<s:schema elementFormDefault="qualified"
targetNamespace="http://tempuri2.org/" id="0">
<s:complexType name="AnyTextData2">
<s:simpleContent>
<s:extension base="string">
<s:attribute name="Attribute" type="string" />
</s:extension>
</s:simpleContent>
</s:complexType>
</s:schema>
</wsdl:types>
</wsdl:definitions>



 
Reply With Quote
 
 
 
 
John Saunders [MVP]
Guest
Posts: n/a
 
      07-18-2007
"Jeremy" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> I've built a class that uses the IXmlSerializable interface to do custom
> serialization. I"ve then used the IXmlSerializable.GetSchema() method to
> output the schema of my class to the wsdl in my web service. The problem
> is that the schema of my class appears in a seperate schema element in the
> wsdl. It needs to be in the main schema element so that an application
> can consume the web service properly, because I've found that at least
> with .net apps, they only consume the first schema element. How can I get
> only one schema element in the wsdl?


Jeremy,

I'll try to look at this in more detail later, but for now have a comment:
you are mistaken about .NET applications only consuming the first schema
element. I have a production web service using four schemas. I did this by
using wsdl:import elements outside of the <wsdl:types> element. It's
apparently not WS-I compliant, but it works well. I intend (in my copious
spare time) to see if I can do the equivalent by adding <schema> elements in
the <wsdl:types> and using <xs:include> to load the "real" schemas.
--
John Saunders [MVP]

 
Reply With Quote
 
 
 
 
Jeremy
Guest
Posts: n/a
 
      07-18-2007
The reason I thought it was ignoring the second schema element is because
when I consume the web service, the method that returns the datatype
specified in the second scheme element has a return type of XmlElement in
the proxy class, rather than the actual data type.

"John Saunders [MVP]" <john.saunders at trizetto.com> wrote in message
news:(E-Mail Removed)...
> "Jeremy" <(E-Mail Removed)> wrote in message
> news:(E-Mail Removed)...
>> I've built a class that uses the IXmlSerializable interface to do custom
>> serialization. I"ve then used the IXmlSerializable.GetSchema() method to
>> output the schema of my class to the wsdl in my web service. The problem
>> is that the schema of my class appears in a seperate schema element in
>> the wsdl. It needs to be in the main schema element so that an
>> application can consume the web service properly, because I've found that
>> at least with .net apps, they only consume the first schema element. How
>> can I get only one schema element in the wsdl?

>
> Jeremy,
>
> I'll try to look at this in more detail later, but for now have a comment:
> you are mistaken about .NET applications only consuming the first schema
> element. I have a production web service using four schemas. I did this by
> using wsdl:import elements outside of the <wsdl:types> element. It's
> apparently not WS-I compliant, but it works well. I intend (in my copious
> spare time) to see if I can do the equivalent by adding <schema> elements
> in the <wsdl:types> and using <xs:include> to load the "real" schemas.
> --
> John Saunders [MVP]
>



 
Reply With Quote
 
John Saunders [MVP]
Guest
Posts: n/a
 
      07-18-2007
"Jeremy" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> The reason I thought it was ignoring the second schema element is because
> when I consume the web service, the method that returns the datatype
> specified in the second scheme element has a return type of XmlElement in
> the proxy class, rather than the actual data type.


If it had been ignoring the second schema, it could not have created your
proxy class at all.

Instead, this appears to be a problem with the type being returned from that
method, or the way the type is specified. Can you post the signature of the
webmethod, complete with any attributes on it?

--
John Saunders [MVP]

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Ruby library that creates classes from an XML Schema Guillaume Guillaume Ruby 0 01-05-2010 08:19 PM
webservices, wsdl & xsd (schema-2-wsdl) Dark Java 1 11-14-2008 07:58 PM
[XML Schema] Including a schema document with absent target namespace to a schema with specified target namespace Stanimir Stamenkov XML 3 04-25-2005 09:59 AM
is the w3c's schema for wsdl and wsdl/soap binding possibly buggy ? _clb_ Chris Bedford XML 0 08-20-2003 11:52 PM
WSDL.EXE: WSDL Import Directive Stephen Edgecombe ASP .Net Web Services 0 08-13-2003 06:38 AM



Advertisments