axis-c-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From susan...@opensource.lk
Subject xsd:any support - FYI
Date Thu, 03 Jun 2004 11:21:40 GMT
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.



Mime
View raw message