Sam/axis-dev,

Thanks Sam for providing the wire dumps.  I have some questions...

So a runtime could send an array using "style A":

        <name type="soapenc:Array" soapenc:arrayType="ns:foo[3]" >
         ....

Or a runtime could send an array using "style B":

        <name type="ns:ArrayOfFoo" soapenc:arrayType="ns:foo[3]" >
        ....

Apache SOAP is sending "style B";  I believe it used to send "style A".
Apache Axis sends "style A".

------------------------------------------------------------------------------------------------

A compliant runtime can receive an array of type "style A".
In this case the deserializer is easily found because the type is
"soapenc:Array".

A compliant runtime can receive an array of type "style B".
In this case, the runtime will attempt to find a deserializer of type
"ns:ArrayOfFoo".  In the case of Axis below, "ns:ArrayOfFoo" is not
registered in the deploy.wsdd for samples.echo.TestClient.

QUESTION 1: So should the behaviour be 1) fail as below or 2) if a
deserializer is not found
choose the array deserializer if the soapenc:arrayType attribute is
present?

My answer: I can make the change to implement (2) if I get some feedback
from axis-dev.

QUESTION 2: Since the runtime can easily choose which style to send, should
we lean
towards sending "style A" since it is more likely to be accepted by the
remote runtime?

My answer: We should send "style A"


Rich Scheuerle
XML & Web Services Development
512-838-5115  (IBM TL 678-5115)


                                                                                       
                                           
                      Sam                                                              
                                           
                      Ruby/Raleigh/IBM@        To:       [EMAIL PROTECTED]       
                                           
                      IBMUS                    cc:                                     
                                           
                                               Subject:  Re: AXIS/SOAP Interop Test 
Summary                                       
                      02/05/2002 06:05                                                 
                                           
                      PM                                                               
                                           
                      Please respond to                                                
                                           
                      axis-dev                                                         
                                           
                                                                                       
                                           
                                                                                       
                                           



R J Scheuerle Jr wrote:
>
> You indicated yesterday that a change was made to Apache SOAP to
> register array types.  I am concerned that they will run across this same
> problem...and from last night's test it appears that they did.
> See SOAP echoStructArray for SOAP RMI.  Also, the SOAP echoStructArray
> call failed when calling Apache SOAP and Apache AXIS!
>
> It would be nice to see the SOAP wire dumps for these cases.

The SOAP echoStructArray failed that night as I had updated the client but
not the server.  Since then I had difficultly running Axis with the latest
Tomcat for a classloader/javax issue that I finally tracked down.  My
feeling at the moment is that the wire dumps attached below are both (1)
consistent with the WSDL definition, and (2) able to be produced by an
appropriately configured Apache SOAP installation out in the field without
any code mods.  The topic of what Axis should send is certainly up for
discussion, but in my mind it is clear that the following datastreams
should be accepted.

Ass sent by Apache SOAP:

   POST /axis/servlet/AxisServlet HTTP/1.0
   Host: localhost
   Content-Type: text/xml; charset=utf-8
   Content-Length: 1539
   SOAPAction: "http://soapinterop.org/";

   <?xml version='1.0' encoding='UTF-8'?>
   <SOAP-ENV:Envelope xmlns:SOAP-ENV="
http://schemas.xmlsoap.org/soap/envelope/"; xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"; xmlns:xsd
   ="http://www.w3.org/2001/XMLSchema";>
   <SOAP-ENV:Body>
   <ns1:echoStructArray xmlns:ns1="http://soapinterop.org/";
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";>
   <inputStructArray xmlns:ns2="http://soapinterop.org/xsd"; xsi:type
="ns2:ArrayOfSOAPStruct" xmlns:ns3="
http://schemas.xmlsoap.org/soap/encoding/";
   ns3:arrayType="ns2:SOAPStruct[5]">
   <item xsi:type="ns2:SOAPStruct">
   <varInt xsi:type="xsd:int">5</varInt>
   <varFloat xsi:type="xsd:float">5.55555</varFloat>
   <varString xsi:type="xsd:string">cinqo</varString>
   </item>
   <item xsi:type="ns2:SOAPStruct">
   <varInt xsi:type="xsd:int">4</varInt>
   <varFloat xsi:type="xsd:float">4.4444</varFloat>
   <varString xsi:type="xsd:string">quattro</varString>
   </item>
   <item xsi:type="ns2:SOAPStruct">
   <varInt xsi:type="xsd:int">3</varInt>
   <varFloat xsi:type="xsd:float">3.333</varFloat>
   <varString xsi:type="xsd:string">tres</varString>
   </item>
   <item xsi:type="ns2:SOAPStruct">
   <varInt xsi:type="xsd:int">2</varInt>
   <varFloat xsi:type="xsd:float">2.22</varFloat>
   <varString xsi:type="xsd:string">duet</varString>
   </item>
   <item xsi:type="ns2:SOAPStruct">
   <varInt xsi:type="xsd:int">1</varInt>
   <varFloat xsi:type="xsd:float">1.1</varFloat>
   <varString xsi:type="xsd:string">un</varString>
   </item>
   </inputStructArray>
   </ns1:echoStructArray>
   </SOAP-ENV:Body>
   </SOAP-ENV:Envelope>

As returned by Apache SOAP:

   POST /soap/servlet/rpcrouter HTTP/1.0
   Host: localhost
   Content-Type: text/xml; charset=utf-8
   Content-Length: 1539
   SOAPAction: "http://soapinterop.org/";

   HTTP/1.1 200 OK
   Content-Type: text/xml; charset=utf-8
   Content-Length: 1491
   Date: Tue, 05 Feb 2002 23:47:52 GMT
   Server: Apache Tomcat/4.1-dev (HTTP/1.1 Connector)
   Set-Cookie: JSESSIONID=C6D0D8C32FBE4F0A28DF7C08ABA800B4;Path=/soap

   <?xml version='1.0' encoding='UTF-8'?>
   <SOAP-ENV:Envelope xmlns:SOAP-ENV="
http://schemas.xmlsoap.org/soap/envelope/"; xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"; xmlns:xsd
   ="http://www.w3.org/2001/XMLSchema";>
   <SOAP-ENV:Body>
   <ns1:echoStructArrayResponse xmlns:ns1="http://soapinterop.org/";
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";>
   <return xmlns:ns2="http://schemas.xmlsoap.org/soap/encoding/"; xsi:type
="ns2:Array" xmlns:ns3="http://soapinterop.org/xsd"; ns2:arrayType
   ="ns3:SOAPStruct[5]">
   <item xsi:type="ns3:SOAPStruct">
   <varInt xsi:type="xsd:int">5</varInt>
   <varFloat xsi:type="xsd:float">5.55555</varFloat>
   <varString xsi:type="xsd:string">cinqo</varString>
   </item>
   <item xsi:type="ns3:SOAPStruct">
   <varInt xsi:type="xsd:int">4</varInt>
   <varFloat xsi:type="xsd:float">4.4444</varFloat>
   <varString xsi:type="xsd:string">quattro</varString>
   </item>
   <item xsi:type="ns3:SOAPStruct">
   <varInt xsi:type="xsd:int">3</varInt>
   <varFloat xsi:type="xsd:float">3.333</varFloat>
   <varString xsi:type="xsd:string">tres</varString>
   </item>
   <item xsi:type="ns3:SOAPStruct">
   <varInt xsi:type="xsd:int">2</varInt>
   <varFloat xsi:type="xsd:float">2.22</varFloat>
   <varString xsi:type="xsd:string">duet</varString>
   </item>
   <item xsi:type="ns3:SOAPStruct">
   <varInt xsi:type="xsd:int">1</varInt>
   <varFloat xsi:type="xsd:float">1.1</varFloat>
   <varString xsi:type="xsd:string">un</varString>
   </item>
   </return>
   </ns1:echoStructArrayResponse>

   </SOAP-ENV:Body>
   </SOAP-ENV:Envelope>

As returned by Apache Axis:

   HTTP/1.1 500 Internal Server Error
   Content-Type: text/xml; charset=utf-8
   Content-Length: 3917
   Date: Tue, 05 Feb 2002 23:49:08 GMT
   Server: Apache Tomcat/4.1-dev (HTTP/1.1 Connector)

   <?xml version="1.0" encoding="UTF-8"?>
   <SOAP-ENV:Envelope xmlns:SOAP-ENV="
http://schemas.xmlsoap.org/soap/envelope/"; xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"; xmlns:xsd
   ="http://www.w3.org/2001/XMLSchema";>
    <SOAP-ENV:Body>
     <SOAP-ENV:Fault>
      <SOAP-ENV:faultcode xmlns:ns1="http://xml.apache.org/axis/
">ns1:Server.userException</SOAP-ENV:faultcode>
      <SOAP-ENV:faultstring>org.xml.sax.SAXException: Deserializing
parameter &apos;inputStructArray&apos;:  could not find deserializer for
type
   http://soapinterop.org/xsd:ArrayOfSOAPStruct</SOAP-ENV:faultstring>
      <SOAP-ENV:detail>
       <ns2:stackTrace xmlns:ns2="http://xml.apache.org/axis/
">org.xml.sax.SAXException: Deserializing parameter
&apos;inputStructArray&apos;:  could
   not find deserializer for type
http://soapinterop.org/xsd:ArrayOfSOAPStruct
           at org.apache.axis.message.RPCHandler.onStartChild(Unknown
Source)
           at
org.apache.axis.encoding.DeserializationContextImpl.startElement(Unknown
Source)
           at org.apache.axis.message.SAX2EventRecorder.replay(Unknown
Source)
           at
org.apache.axis.message.MessageElement.publishToHandler(Unknown Source)
           at org.apache.axis.message.RPCElement.deserialize(Unknown
Source)
           at org.apache.axis.message.RPCElement.getParams(Unknown Source)
           at
org.apache.axis.providers.java.RPCProvider.processMessage(Unknown Source)
           at org.apache.axis.providers.java.JavaProvider.invoke(Unknown
Source)
           at org.apache.axis.strategies.InvocationStrategy.visit(Unknown
Source)
           at org.apache.axis.SimpleChain.doVisiting(Unknown Source)
           at org.apache.axis.SimpleChain.invoke(Unknown Source)
           at org.apache.axis.server.AxisServer.invoke(Unknown Source)
           at org.apache.axis.transport.http.AxisServlet.doPost(Unknown
Source)
           at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
           at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
           at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Unknown
Source)
           at
org.apache.catalina.core.ApplicationFilterChain.doFilter(Unknown Source)
           at org.apache.catalina.core.StandardWrapperValve.invoke(Unknown
Source)
           at org.apache.catalina.core.StandardPipeline.invokeNext(Unknown
Source)
           at org.apache.catalina.core.StandardPipeline.invoke(Unknown
Source)
           at org.apache.catalina.core.ContainerBase.invoke(Unknown Source)
           at org.apache.catalina.core.StandardContextValve.invoke(Unknown
Source)
           at org.apache.catalina.core.StandardPipeline.invokeNext(Unknown
Source)
           at org.apache.catalina.core.StandardPipeline.invoke(Unknown
Source)
           at org.apache.catalina.core.ContainerBase.invoke(Unknown Source)
           at org.apache.catalina.core.StandardContext.invoke(Unknown
Source)
           at org.apache.catalina.core.StandardHostValve.invoke(Unknown
Source)
           at org.apache.catalina.core.StandardPipeline.invokeNext(Unknown
Source)
           at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(Unknown Source)
           at org.apache.catalina.core.StandardPipeline.invokeNext(Unknown
Source)
           at org.apache.catalina.valves.ErrorReportValve.invoke(Unknown
Source)
           at org.apache.catalina.core.StandardPipeline.invokeNext(Unknown
Source)
           at org.apache.catalina.valves.AccessLogValve.invoke(Unknown
Source)
           at org.apache.catalina.core.StandardPipeline.invokeNext(Unknown
Source)
           at org.apache.catalina.core.StandardPipeline.invoke(Unknown
Source)
           at org.apache.catalina.core.ContainerBase.invoke(Unknown Source)
           at org.apache.catalina.core.StandardEngineValve.invoke(Unknown
Source)
           at org.apache.catalina.core.StandardPipeline.invokeNext(Unknown
Source)
           at org.apache.catalina.core.StandardPipeline.invoke(Unknown
Source)
           at org.apache.catalina.core.ContainerBase.invoke(Unknown Source)
           at
org.apache.catalina.connector.http.HttpProcessor.process(Unknown Source)
           at org.apache.catalina.connector.http.HttpProcessor.run(Unknown
Source)
           at java.lang.Thread.run(Thread.java:484)
   </ns2:stackTrace>
      </SOAP-ENV:detail>
     </SOAP-ENV:Fault>
    </SOAP-ENV:Body>
   </SOAP-ENV:Envelope>

- Sam Ruby




Reply via email to