You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@axis.apache.org by su...@opensource.lk on 2004/06/03 13:21:40 UTC

xsd:any support - FYI

Hi all,

It seems that implementing of xsd:any support in Axis C++ need to be
discussed further and in detail. I did further research on how other
implementations implements xsd:any. Some of them goes with providing a DOM
tree for xsd:any. Some other implementations support only types registered
at runtime. They relies on registries.

So my suggestion is that Axis C++ should provide support for both
registered types through type registries and DOM tree kind of approach for
un-registered types. When we give DOM support its better to go with Axis
C++ specific DOM API because DOM is not seem to be an standard in C/C++
yet and all DOM functionality may not be needed in supporting xsd:any.

But for Axis 1.2 release its difficult to go with the complete
implementation of both above approaches (also much research into the other
implementations and user choices has to be considered).

So as a start I am going to give xsd:any support in the following way for
Axis 1.2. Later we can improve.

I am going to pass the XML string in place of xsd:any type.

So lets consider following wsdl

<?xml version="1.0" encoding="UTF-8"?>
<definitions name="ExtensibilityQuery"
targetNamespace="urn:ExtensibilityQuery"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="urn:ExtensibilityQuery"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <types>
    <xsd:schema attributeFormDefault="qualified"
    elementFormDefault="qualified" targetNamespace="urn:ExtensibilityQuery">


      <xsd:complexType name="ExtensibilityType">
        <xsd:sequence>
          <xsd:any namespace="##any"/>
        </xsd:sequence>
      </xsd:complexType>

      <xsd:element name="query">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="queryExpression"
type="tns:ExtensibilityType"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <xsd:element name="queryResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="queryResult" type="tns:ExtensibilityType"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

    </xsd:schema>
  </types>

  <message name="queryIn">
    <part element="tns:query" name="parameters" />
  </message>

  <message name="queryOut">
    <part element="tns:queryResponse" name="parameters" />
  </message>

  <portType name="ExtensibilityQueryPortType">
    <operation name="query">
      <input message="tns:queryIn" />
      <output message="tns:queryOut" />
    </operation>
  </portType>

  <binding name="ExtensibilityQueryBinding"
type="tns:ExtensibilityQueryPortType">
    <soap:binding style="document"
    transport="http://schemas.xmlsoap.org/soap/http" />
    <operation name="query">
      <soap:operation soapAction="query" />
      <input>
        <soap:body use="literal" />
      </input>
      <output>
        <soap:body use="literal" />
      </output>
    </operation>
  </binding>



Then the wsdl2ws tool will generate a skeleton at server side

class ExtensibilityQueryPortType
{
	XML_String query(XML_String queryExpression);
}


Where XML_String is

typedef XML_String char*


Then the server skeleton implementator can parse the XML segment and
understand it.

The client side stubs too will be implemented in the same way.

Please comment on this approach. Let me have your suggestions too.

Thanks,

Susantha.



Re: xsd:any support - FYI

Posted by Samisa Abeysinghe <sa...@yahoo.com>.
Susantha,
    There is a partial DOM API already in Axis C++.
    This includes the BasicNode base class and ComplexElement and CharacterElement classes.
    You could use them for the time being. The same could be expanced to support DOM for xsd:any.

Thanks,
Samisa...
     
--- susantha@opensource.lk wrote:
> Hi all,
> 
> It seems that implementing of xsd:any support in Axis C++ need to be
> discussed further and in detail. I did further research on how other
> implementations implements xsd:any. Some of them goes with providing a DOM
> tree for xsd:any. Some other implementations support only types registered
> at runtime. They relies on registries.
> 
> So my suggestion is that Axis C++ should provide support for both
> registered types through type registries and DOM tree kind of approach for
> un-registered types. When we give DOM support its better to go with Axis
> C++ specific DOM API because DOM is not seem to be an standard in C/C++
> yet and all DOM functionality may not be needed in supporting xsd:any.
> 
> But for Axis 1.2 release its difficult to go with the complete
> implementation of both above approaches (also much research into the other
> implementations and user choices has to be considered).
> 
> So as a start I am going to give xsd:any support in the following way for
> Axis 1.2. Later we can improve.
> 
> I am going to pass the XML string in place of xsd:any type.
> 
> So lets consider following wsdl
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <definitions name="ExtensibilityQuery"
> targetNamespace="urn:ExtensibilityQuery"
> xmlns="http://schemas.xmlsoap.org/wsdl/"
> xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
> xmlns:tns="urn:ExtensibilityQuery"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema">
>   <types>
>     <xsd:schema attributeFormDefault="qualified"
>     elementFormDefault="qualified" targetNamespace="urn:ExtensibilityQuery">
> 
> 
>       <xsd:complexType name="ExtensibilityType">
>         <xsd:sequence>
>           <xsd:any namespace="##any"/>
>         </xsd:sequence>
>       </xsd:complexType>
> 
>       <xsd:element name="query">
>         <xsd:complexType>
>           <xsd:sequence>
>             <xsd:element name="queryExpression"
> type="tns:ExtensibilityType"/>
>           </xsd:sequence>
>         </xsd:complexType>
>       </xsd:element>
> 
>       <xsd:element name="queryResponse">
>         <xsd:complexType>
>           <xsd:sequence>
>             <xsd:element name="queryResult" type="tns:ExtensibilityType"/>
>           </xsd:sequence>
>         </xsd:complexType>
>       </xsd:element>
> 
>     </xsd:schema>
>   </types>
> 
>   <message name="queryIn">
>     <part element="tns:query" name="parameters" />
>   </message>
> 
>   <message name="queryOut">
>     <part element="tns:queryResponse" name="parameters" />
>   </message>
> 
>   <portType name="ExtensibilityQueryPortType">
>     <operation name="query">
>       <input message="tns:queryIn" />
>       <output message="tns:queryOut" />
>     </operation>
>   </portType>
> 
>   <binding name="ExtensibilityQueryBinding"
> type="tns:ExtensibilityQueryPortType">
>     <soap:binding style="document"
>     transport="http://schemas.xmlsoap.org/soap/http" />
>     <operation name="query">
>       <soap:operation soapAction="query" />
>       <input>
>         <soap:body use="literal" />
>       </input>
>       <output>
>         <soap:body use="literal" />
>       </output>
>     </operation>
>   </binding>
> 
> 
> 
> Then the wsdl2ws tool will generate a skeleton at server side
> 
> class ExtensibilityQueryPortType
> {
> 	XML_String query(XML_String queryExpression);
> }
> 
> 
> Where XML_String is
> 
> typedef XML_String char*
> 
> 
> Then the server skeleton implementator can parse the XML segment and
> understand it.
> 
> The client side stubs too will be implemented in the same way.
> 
> Please comment on this approach. Let me have your suggestions too.
> 
> Thanks,
> 
> Susantha.
> 
> 



	
		
__________________________________
Do you Yahoo!?
Friends.  Fun.  Try the all-new Yahoo! Messenger.
http://messenger.yahoo.com/