Hi all,
  I am having interoperabilty problems when invoking an Axis wrapped style web service 
from a .Net client. Trying not to clutter with too much information here :

My schema that defines the return types has ELEMENTFORMDEFAULT="UNQUALIFIED". However, 
I notice that when my custom serializer class is called, the root element of the 
response looks like this:  

<ComplexProcResponse xmlns="urn:DotNetTest:pkg1">

Which defines "urn:DotNetTest:pkg1" as the default namespace for all the elements. 
Therefore, .Net complains when it recieves the response, by saying that :

Element '{urn:DotNetTest:pkg1}Prop1' is unexpected according to content model of 
parent element '{urn:DotNetTest:pkg1}Concept1'.
Expecting: Prop1, Prop2.

This is what is returned from Axis :
<ComplexProcResponse xmlns="urn:DotNetTest:pkg1">
<Concept1Array xmlns:pkg1="urn:DotNetTest:pkg1">
    <Concept1><Prop1>a</Prop1><Prop2>b</Prop2></Concept1>
    <Concept1><Prop1>c</Prop1><Prop2>d</Prop2></Concept1>
    <Concept1><Prop1>e</Prop1><Prop2>f</Prop2></Concept1>
</Concept1Array>
</ComplexProcResponse>


Whereas, this is what should be :
  <ns1:ComplexProcResponse 
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"; 
xmlns:ns1="urn:DotNetTest:pkg1">
<pkg1:Concept1Array xmlns:pkg1="urn:DotNetTest:pkg1">
       <pkg1:Concept1><Prop1>a</Prop1><Prop2>b</Prop2></pkg1:Concept1>
       <pkg1:Concept1><Prop1>c</Prop1><Prop2>d</Prop2></pkg1:Concept1>
       <pkg1:Concept1><Prop1>e</Prop1><Prop2>f</Prop2></pkg1:Concept1>
</pkg1:Concept1Array>

Note: In my schema, Concept1Array and Concept1 are defined as qualified. Only Prop1 
and Prop2 are unqualified, by default.

The following XML is generated by my serializer and written to the context 
(context.writeString()):
<pkg1:Concept1Array xmlns:pkg1="urn:DotNetTest:pkg1">
       <pkg1:Concept1><Prop1>a</Prop1><Prop2>b</Prop2></pkg1:Concept1>
       <pkg1:Concept1><Prop1>c</Prop1><Prop2>d</Prop2></pkg1:Concept1>
       <pkg1:Concept1><Prop1>e</Prop1><Prop2>f</Prop2></pkg1:Concept1>
</pkg1:Concept1Array>

Therefore, if the root element ComplexProcResponse didn't have the default namespace, 
all would be well.



The wsdd entry for my web service looks like this:

<service name="pkg1_doc" style="wrapped" use="literal">
  <operation name="ComplexProc" qname="ns8:ComplexProc" 
returnQName="ns8:Concept1Array" returnType="ns8:Concept1ArrayType" 
xmlns:ns8="urn:DotNetTest:pkg1"/>
  <parameter name="allowedMethods" value="*"/>
  <parameter name="className" value="DotNetTest.pkg1.WSBroker"/>
  <wsdlFile>wsdl/DotNetTest_pkg1_doc.wsdl</wsdlFile>
   
  <typeMapping 
deserializer="com.blackpearl.service.websphere.ParamDeserializerFactory" 
encodingStyle="" qname="ns9:Concept1ArrayType" 
serializer="com.blackpearl.service.websphere.ResultSerializerFactory" 
type="java:com.blackpearl.service.datamodel.ResultWrapper" 
xmlns:ns9="urn:DotNetTest:pkg1"/>
 </service>


Is there any way to turn this off ? Any parameter that I can set ? OR, is there way to 
do this in my custom serializer class ? Or is there a way to make Axis use the schemas 
that define my types ? Axis doesn't seem to do any validation against schemas at all.
Any help is appreciated,
        Thanks in advance,
        Leena.

Reply via email to