You are viewing a plain text version of this content. The canonical link for it is here.
Posted to wsif-user@ws.apache.org by William Reichardt <wi...@hp.com> on 2004/08/06 20:27:18 UTC
Problems using dynamic invocation.
I am having problems making simple web service calls using Dynamic
invocation of an Axis based web service using WSIF. I have attached the
WSDL for the service to this email. The WSDL is a sample WSDL using the
WSDM spec. I am using the most recent HEAD from CVS for my WSIF
implementation.
I am trying to make a dynamic invocation call on the
GetResourceProperty operation. This operation imports its input and
output messages from the WSRP WSDL.
<portType name="DiskPortType"
wsrp:ResourceProperties="tns:DiskProperties">
<operation name="GetResourceProperty">
<input name="GetResourcePropertyRequest"
message="wsrp:GetResourcePropertyRequest"/>
<output name="GetResourcePropertyResponse"
message="wsrp:GetResourcePropertyResponse"/>
<fault name="ResourceUnknownFault"
message="wsrp:ResourceUnknownFault"/>
<fault name="InvalidResourcePropertyQNameFault"
message="wsrp:InvalidResourcePropertyQNameFault"/>
</operation>
The first problem I encountered was that the imported schemas were not
being pulled in unless I set the following features.
factory.setFeature(WSIFConstants.WSIF_FEATURE_AUTO_MAP_TYPES,
Boolean.TRUE);
char[] chars = new char[0];
factory.setFeature(WSIFConstants.WSIF_FEATURE_PROXY_AUTHENTICATION, new
PasswordAuthentication("", chars));
Unless these were set, my imported schemas were being ignored (See
WSIFServiceImpl constructor and .init()). I am not using authentication
at all. Is there a better way to get my WSDL information imported?
My second problem is in actually being able to fill in the fields of the
input message. I have tried many combinations of input.setObjectPart but
do not seem able to fill in the input document properly. The schema
fragment for wsrp:GetResourceProeprtyRequest is ...
<xsd:element name="GetResourcePropertyRequest"
type="xsd:QName" />
which is pretty straight forward, but it is from an external document.
I attempt to set a QName for this value by doing a....
QName qn = new QName("http://xyz.com/","BlockSize");
input.setObjectPart("GetResourcePropertyRequest",qn);
and get the following:
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header>
<prop:To
xmlns:prop="http://my.org/uri/">http://localhost:8080/wsdm</prop:To>
<prop:Action
xmlns:prop="http://my.org/uri/">http://schemas.xmlsoap.org/ws/2004/03/addressing</prop:Action>
<prop:ResourceID
xmlns:prop="http://my.org/uri/">1234</prop:ResourceID>
</soapenv:Header>
<soapenv:Body>
<GetResourcePropertyRequest xsi:type="xsd:QName" xmlns=""
xmlns:ns1="http://xyz.com/">ns1:BlockSize</GetResourcePropertyRequest>
</soapenv:Body>
</soapenv:Envelope>
The problem with this document is that GetResourcePropertyRequest
namespace is not defined (xmlns=""). It also has an xsi:type attribute
which I do not want included as I am doing document style.
The only way I could get the request to look the way I needed it to was
to do the following. (Which I think defeats the purpose of using WSIF in
the first place..)
DocumentBuilderFactory docFactory =
DocumentBuilderFactory.newInstance();
docFactory.setNamespaceAware(true);
DocumentBuilder builder = null;
try {
builder = docFactory.newDocumentBuilder();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Document doc = builder.newDocument();
Element elem =
doc.createElementNS("http://www.ibm.com/xmlns/stdwip/web-services/WS-ResourceProperties", "GetResourcePropertyRequest");
elem.setAttribute("xmlns:m","http://xyz.com");
Text text = doc.createTextNode("m:BlockSize");
elem.appendChild(text);
input.setObjectPart("GetResourcePropertyRequest",elem);
This version produced the following request which is what the WSDL
actually requires.
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header>
<prop:To
xmlns:prop="http://my.org/uri/">http://localhost:8080/wsdm</prop:To>
<prop:Action
xmlns:prop="http://my.org/uri/">http://schemas.xmlsoap.org/ws/2004/03/addressing</prop:Action>
<prop:ResourceID
xmlns:prop="http://my.org/uri/">1234</prop:ResourceID>
</soapenv:Header>
<soapenv:Body>
<ns1:GetResourcePropertyRequest xmlns:m="http://xyz.com"
xmlns:ns1="http://www.ibm.com/xmlns/stdwip/web-services/WS-ResourceProperties">m:BlockSize</ns1:GetResourcePropertyRequest>
</soapenv:Body>
</soapenv:Envelope>
Notice there is no longer any xsi:type and GetResourcePropertyRequest
is qualified now.
Am I using WSIF incorrectly or is this the only way I can build this
request?
Thanks in advance,
Re: Problems using dynamic invocation.
Posted by William Reichardt <wi...@hp.com>.
Thanks for taking a look at the remote WSDL problem. The MUWS WSDL is
not available publicly at the moment for some reason. I have attached it
to this reply so that you can host it internally to try it for yourself.
I believe that the problem can be seen around WSIFServiceImpl Lines
208-225 in the WSIFServiceImpl constructor where the WSDL locator gets
discarded if getProxyAuthentication() returns null. I am not clear on
why this decision was made so I wanted to have someone on the project
take a look at this.
I am still hoping to get some feedback also on how to use
input.setObjectPart to actually fill in the request message below.
Thanks,
-Bill
On Sat, 2004-08-07 at 02:28, Aleksander Slominski wrote:
> William Reichardt wrote:
>
> >I am having problems making simple web service calls using Dynamic
> >invocation of an Axis based web service using WSIF. I have attached the
> >WSDL for the service to this email. The WSDL is a sample WSDL using the
> >WSDM spec. I am using the most recent HEAD from CVS for my WSIF
> >implementation.
> >
> >I am trying to make a dynamic invocation call on the
> >GetResourceProperty operation. This operation imports its input and
> >output messages from the WSRP WSDL.
> >
> > <portType name="DiskPortType"
> >wsrp:ResourceProperties="tns:DiskProperties">
> > <operation name="GetResourceProperty">
> > <input name="GetResourcePropertyRequest"
> >message="wsrp:GetResourcePropertyRequest"/>
> > <output name="GetResourcePropertyResponse"
> >message="wsrp:GetResourcePropertyResponse"/>
> > <fault name="ResourceUnknownFault"
> >message="wsrp:ResourceUnknownFault"/>
> > <fault name="InvalidResourcePropertyQNameFault"
> >message="wsrp:InvalidResourcePropertyQNameFault"/>
> > </operation>
> >
> >The first problem I encountered was that the imported schemas were not
> >being pulled in unless I set the following features.
> >
> > factory.setFeature(WSIFConstants.WSIF_FEATURE_AUTO_MAP_TYPES,
> >Boolean.TRUE);
> > char[] chars = new char[0];
> >
> >factory.setFeature(WSIFConstants.WSIF_FEATURE_PROXY_AUTHENTICATION, new
> >PasswordAuthentication("", chars));
> >
> >Unless these were set, my imported schemas were being ignored (See
> >WSIFServiceImpl constructor and .init()). I am not using authentication
> >at all. Is there a better way to get my WSDL information imported?
> >
> >
> hi,
>
> that looks like a bug if it is the case however i was not able to access
> imported WSDL at all, from outside hp.com it is not possible to read:
> http://mip.esr.hp.com/wsdm/wsdl/MUWS.wsdl
> (specified in WSDL in <xsd:import
> namespace="http://docs.oasis-open.org/wsdm/2004/04/muws-0.5/schema"
> schemaLocation="http://mip.esr.hp.com/wsdm/wsdl/MUWS.xsd" />)
>
> >My second problem is in actually being able to fill in the fields of the
> >input message. I have tried many combinations of input.setObjectPart but
> >do not seem able to fill in the input document properly. The schema
> >fragment for wsrp:GetResourceProeprtyRequest is ...
> >
> > <xsd:element name="GetResourcePropertyRequest"
> > type="xsd:QName" />
> >
> >which is pretty straight forward, but it is from an external document.
> >
> >I attempt to set a QName for this value by doing a....
> >
> > QName qn = new QName("http://xyz.com/","BlockSize");
> > input.setObjectPart("GetResourcePropertyRequest",qn);
> >
> >and get the following:
> >
> > <soapenv:Envelope
> >xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
> >xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> >xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
> > <soapenv:Header>
> > <prop:To
> >xmlns:prop="http://my.org/uri/">http://localhost:8080/wsdm</prop:To>
> > <prop:Action
> >xmlns:prop="http://my.org/uri/">http://schemas.xmlsoap.org/ws/2004/03/addressing</prop:Action>
> > <prop:ResourceID
> >xmlns:prop="http://my.org/uri/">1234</prop:ResourceID>
> > </soapenv:Header>
> > <soapenv:Body>
> > <GetResourcePropertyRequest xsi:type="xsd:QName" xmlns=""
> >xmlns:ns1="http://xyz.com/">ns1:BlockSize</GetResourcePropertyRequest>
> > </soapenv:Body>
> > </soapenv:Envelope>
> >
> >The problem with this document is that GetResourcePropertyRequest
> >namespace is not defined (xmlns=""). It also has an xsi:type attribute
> >which I do not want included as I am doing document style.
> >
> >The only way I could get the request to look the way I needed it to was
> >to do the following. (Which I think defeats the purpose of using WSIF in
> >the first place..)
> >
> > DocumentBuilderFactory docFactory =
> >DocumentBuilderFactory.newInstance();
> > docFactory.setNamespaceAware(true);
> > DocumentBuilder builder = null;
> > try {
> > builder = docFactory.newDocumentBuilder();
> > } catch (ParserConfigurationException e) {
> > // TODO Auto-generated catch block
> > e.printStackTrace();
> > }
> > Document doc = builder.newDocument();
> >
> > Element elem =
> >doc.createElementNS("http://www.ibm.com/xmlns/stdwip/web-services/WS-ResourceProperties", "GetResourcePropertyRequest");
> > elem.setAttribute("xmlns:m","http://xyz.com");
> >
> > Text text = doc.createTextNode("m:BlockSize");
> > elem.appendChild(text);
> > input.setObjectPart("GetResourcePropertyRequest",elem);
> >
> >This version produced the following request which is what the WSDL
> >actually requires.
> >
> > <soapenv:Envelope
> >xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
> >xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> >xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
> > <soapenv:Header>
> > <prop:To
> >xmlns:prop="http://my.org/uri/">http://localhost:8080/wsdm</prop:To>
> > <prop:Action
> >xmlns:prop="http://my.org/uri/">http://schemas.xmlsoap.org/ws/2004/03/addressing</prop:Action>
> > <prop:ResourceID
> >xmlns:prop="http://my.org/uri/">1234</prop:ResourceID>
> > </soapenv:Header>
> > <soapenv:Body>
> > <ns1:GetResourcePropertyRequest xmlns:m="http://xyz.com"
> >xmlns:ns1="http://www.ibm.com/xmlns/stdwip/web-services/WS-ResourceProperties">m:BlockSize</ns1:GetResourcePropertyRequest>
> > </soapenv:Body>
> > </soapenv:Envelope>
> >
> > Notice there is no longer any xsi:type and GetResourcePropertyRequest
> >is qualified now.
> >
> >
> > Am I using WSIF incorrectly or is this the only way I can build this
> >request?
> >
> >
> i think WSIF2 needs lot of improvements in doc/literal support (AXIS as
> well ...) especially when doing anything more than really basic XML
> schema constructs ...
>
> thanks,
>
> alek
Re: Problems using dynamic invocation.
Posted by Aleksander Slominski <as...@cs.indiana.edu>.
William Reichardt wrote:
>I am having problems making simple web service calls using Dynamic
>invocation of an Axis based web service using WSIF. I have attached the
>WSDL for the service to this email. The WSDL is a sample WSDL using the
>WSDM spec. I am using the most recent HEAD from CVS for my WSIF
>implementation.
>
>I am trying to make a dynamic invocation call on the
>GetResourceProperty operation. This operation imports its input and
>output messages from the WSRP WSDL.
>
> <portType name="DiskPortType"
>wsrp:ResourceProperties="tns:DiskProperties">
> <operation name="GetResourceProperty">
> <input name="GetResourcePropertyRequest"
>message="wsrp:GetResourcePropertyRequest"/>
> <output name="GetResourcePropertyResponse"
>message="wsrp:GetResourcePropertyResponse"/>
> <fault name="ResourceUnknownFault"
>message="wsrp:ResourceUnknownFault"/>
> <fault name="InvalidResourcePropertyQNameFault"
>message="wsrp:InvalidResourcePropertyQNameFault"/>
> </operation>
>
>The first problem I encountered was that the imported schemas were not
>being pulled in unless I set the following features.
>
> factory.setFeature(WSIFConstants.WSIF_FEATURE_AUTO_MAP_TYPES,
>Boolean.TRUE);
> char[] chars = new char[0];
>
>factory.setFeature(WSIFConstants.WSIF_FEATURE_PROXY_AUTHENTICATION, new
>PasswordAuthentication("", chars));
>
>Unless these were set, my imported schemas were being ignored (See
>WSIFServiceImpl constructor and .init()). I am not using authentication
>at all. Is there a better way to get my WSDL information imported?
>
>
hi,
that looks like a bug if it is the case however i was not able to access
imported WSDL at all, from outside hp.com it is not possible to read:
http://mip.esr.hp.com/wsdm/wsdl/MUWS.wsdl
(specified in WSDL in <xsd:import
namespace="http://docs.oasis-open.org/wsdm/2004/04/muws-0.5/schema"
schemaLocation="http://mip.esr.hp.com/wsdm/wsdl/MUWS.xsd" />)
>My second problem is in actually being able to fill in the fields of the
>input message. I have tried many combinations of input.setObjectPart but
>do not seem able to fill in the input document properly. The schema
>fragment for wsrp:GetResourceProeprtyRequest is ...
>
> <xsd:element name="GetResourcePropertyRequest"
> type="xsd:QName" />
>
>which is pretty straight forward, but it is from an external document.
>
>I attempt to set a QName for this value by doing a....
>
> QName qn = new QName("http://xyz.com/","BlockSize");
> input.setObjectPart("GetResourcePropertyRequest",qn);
>
>and get the following:
>
> <soapenv:Envelope
>xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
>xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
> <soapenv:Header>
> <prop:To
>xmlns:prop="http://my.org/uri/">http://localhost:8080/wsdm</prop:To>
> <prop:Action
>xmlns:prop="http://my.org/uri/">http://schemas.xmlsoap.org/ws/2004/03/addressing</prop:Action>
> <prop:ResourceID
>xmlns:prop="http://my.org/uri/">1234</prop:ResourceID>
> </soapenv:Header>
> <soapenv:Body>
> <GetResourcePropertyRequest xsi:type="xsd:QName" xmlns=""
>xmlns:ns1="http://xyz.com/">ns1:BlockSize</GetResourcePropertyRequest>
> </soapenv:Body>
> </soapenv:Envelope>
>
>The problem with this document is that GetResourcePropertyRequest
>namespace is not defined (xmlns=""). It also has an xsi:type attribute
>which I do not want included as I am doing document style.
>
>The only way I could get the request to look the way I needed it to was
>to do the following. (Which I think defeats the purpose of using WSIF in
>the first place..)
>
> DocumentBuilderFactory docFactory =
>DocumentBuilderFactory.newInstance();
> docFactory.setNamespaceAware(true);
> DocumentBuilder builder = null;
> try {
> builder = docFactory.newDocumentBuilder();
> } catch (ParserConfigurationException e) {
> // TODO Auto-generated catch block
> e.printStackTrace();
> }
> Document doc = builder.newDocument();
>
> Element elem =
>doc.createElementNS("http://www.ibm.com/xmlns/stdwip/web-services/WS-ResourceProperties", "GetResourcePropertyRequest");
> elem.setAttribute("xmlns:m","http://xyz.com");
>
> Text text = doc.createTextNode("m:BlockSize");
> elem.appendChild(text);
> input.setObjectPart("GetResourcePropertyRequest",elem);
>
>This version produced the following request which is what the WSDL
>actually requires.
>
> <soapenv:Envelope
>xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
>xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
> <soapenv:Header>
> <prop:To
>xmlns:prop="http://my.org/uri/">http://localhost:8080/wsdm</prop:To>
> <prop:Action
>xmlns:prop="http://my.org/uri/">http://schemas.xmlsoap.org/ws/2004/03/addressing</prop:Action>
> <prop:ResourceID
>xmlns:prop="http://my.org/uri/">1234</prop:ResourceID>
> </soapenv:Header>
> <soapenv:Body>
> <ns1:GetResourcePropertyRequest xmlns:m="http://xyz.com"
>xmlns:ns1="http://www.ibm.com/xmlns/stdwip/web-services/WS-ResourceProperties">m:BlockSize</ns1:GetResourcePropertyRequest>
> </soapenv:Body>
> </soapenv:Envelope>
>
> Notice there is no longer any xsi:type and GetResourcePropertyRequest
>is qualified now.
>
>
> Am I using WSIF incorrectly or is this the only way I can build this
>request?
>
>
i think WSIF2 needs lot of improvements in doc/literal support (AXIS as
well ...) especially when doing anything more than really basic XML
schema constructs ...
thanks,
alek
--
The best way to predict the future is to invent it - Alan Kay
Re: Problems using dynamic invocation.
Posted by Aleksander Slominski <as...@cs.indiana.edu>.
William Reichardt wrote:
>I am having problems making simple web service calls using Dynamic
>invocation of an Axis based web service using WSIF. I have attached the
>WSDL for the service to this email. The WSDL is a sample WSDL using the
>WSDM spec. I am using the most recent HEAD from CVS for my WSIF
>implementation.
>
>I am trying to make a dynamic invocation call on the
>GetResourceProperty operation. This operation imports its input and
>output messages from the WSRP WSDL.
>
> <portType name="DiskPortType"
>wsrp:ResourceProperties="tns:DiskProperties">
> <operation name="GetResourceProperty">
> <input name="GetResourcePropertyRequest"
>message="wsrp:GetResourcePropertyRequest"/>
> <output name="GetResourcePropertyResponse"
>message="wsrp:GetResourcePropertyResponse"/>
> <fault name="ResourceUnknownFault"
>message="wsrp:ResourceUnknownFault"/>
> <fault name="InvalidResourcePropertyQNameFault"
>message="wsrp:InvalidResourcePropertyQNameFault"/>
> </operation>
>
>The first problem I encountered was that the imported schemas were not
>being pulled in unless I set the following features.
>
> factory.setFeature(WSIFConstants.WSIF_FEATURE_AUTO_MAP_TYPES,
>Boolean.TRUE);
> char[] chars = new char[0];
>
>factory.setFeature(WSIFConstants.WSIF_FEATURE_PROXY_AUTHENTICATION, new
>PasswordAuthentication("", chars));
>
>Unless these were set, my imported schemas were being ignored (See
>WSIFServiceImpl constructor and .init()). I am not using authentication
>at all. Is there a better way to get my WSDL information imported?
>
>
hi,
that looks like a bug if it is the case however i was not able to access
imported WSDL at all, from outside hp.com it is not possible to read:
http://mip.esr.hp.com/wsdm/wsdl/MUWS.wsdl
(specified in WSDL in <xsd:import
namespace="http://docs.oasis-open.org/wsdm/2004/04/muws-0.5/schema"
schemaLocation="http://mip.esr.hp.com/wsdm/wsdl/MUWS.xsd" />)
>My second problem is in actually being able to fill in the fields of the
>input message. I have tried many combinations of input.setObjectPart but
>do not seem able to fill in the input document properly. The schema
>fragment for wsrp:GetResourceProeprtyRequest is ...
>
> <xsd:element name="GetResourcePropertyRequest"
> type="xsd:QName" />
>
>which is pretty straight forward, but it is from an external document.
>
>I attempt to set a QName for this value by doing a....
>
> QName qn = new QName("http://xyz.com/","BlockSize");
> input.setObjectPart("GetResourcePropertyRequest",qn);
>
>and get the following:
>
> <soapenv:Envelope
>xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
>xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
> <soapenv:Header>
> <prop:To
>xmlns:prop="http://my.org/uri/">http://localhost:8080/wsdm</prop:To>
> <prop:Action
>xmlns:prop="http://my.org/uri/">http://schemas.xmlsoap.org/ws/2004/03/addressing</prop:Action>
> <prop:ResourceID
>xmlns:prop="http://my.org/uri/">1234</prop:ResourceID>
> </soapenv:Header>
> <soapenv:Body>
> <GetResourcePropertyRequest xsi:type="xsd:QName" xmlns=""
>xmlns:ns1="http://xyz.com/">ns1:BlockSize</GetResourcePropertyRequest>
> </soapenv:Body>
> </soapenv:Envelope>
>
>The problem with this document is that GetResourcePropertyRequest
>namespace is not defined (xmlns=""). It also has an xsi:type attribute
>which I do not want included as I am doing document style.
>
>The only way I could get the request to look the way I needed it to was
>to do the following. (Which I think defeats the purpose of using WSIF in
>the first place..)
>
> DocumentBuilderFactory docFactory =
>DocumentBuilderFactory.newInstance();
> docFactory.setNamespaceAware(true);
> DocumentBuilder builder = null;
> try {
> builder = docFactory.newDocumentBuilder();
> } catch (ParserConfigurationException e) {
> // TODO Auto-generated catch block
> e.printStackTrace();
> }
> Document doc = builder.newDocument();
>
> Element elem =
>doc.createElementNS("http://www.ibm.com/xmlns/stdwip/web-services/WS-ResourceProperties", "GetResourcePropertyRequest");
> elem.setAttribute("xmlns:m","http://xyz.com");
>
> Text text = doc.createTextNode("m:BlockSize");
> elem.appendChild(text);
> input.setObjectPart("GetResourcePropertyRequest",elem);
>
>This version produced the following request which is what the WSDL
>actually requires.
>
> <soapenv:Envelope
>xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
>xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
> <soapenv:Header>
> <prop:To
>xmlns:prop="http://my.org/uri/">http://localhost:8080/wsdm</prop:To>
> <prop:Action
>xmlns:prop="http://my.org/uri/">http://schemas.xmlsoap.org/ws/2004/03/addressing</prop:Action>
> <prop:ResourceID
>xmlns:prop="http://my.org/uri/">1234</prop:ResourceID>
> </soapenv:Header>
> <soapenv:Body>
> <ns1:GetResourcePropertyRequest xmlns:m="http://xyz.com"
>xmlns:ns1="http://www.ibm.com/xmlns/stdwip/web-services/WS-ResourceProperties">m:BlockSize</ns1:GetResourcePropertyRequest>
> </soapenv:Body>
> </soapenv:Envelope>
>
> Notice there is no longer any xsi:type and GetResourcePropertyRequest
>is qualified now.
>
>
> Am I using WSIF incorrectly or is this the only way I can build this
>request?
>
>
i think WSIF2 needs lot of improvements in doc/literal support (AXIS as
well ...) especially when doing anything more than really basic XML
schema constructs ...
thanks,
alek
--
The best way to predict the future is to invent it - Alan Kay