Hi Dims,

You are right.

This is the initial response from axis to python:

HTTP/1.0 200 OK

Content-Type: text/xml; charset=utf-8

Content-Length: 1606



<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
xmlns:xsd="http://www.w3.org/1999/XMLSchema";
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance";>
 <soapenv:Body>
  <beginResponse
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";>
   <beginReturn xsi:type="ns1:ExternalNote" xmlns:ns1="ExternalNote">
    <audience xsi:type="soapenc:string"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";></audience>
    <author xsi:type="soapenc:string" xsi:null="true"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"/>
    <content xsi:type="soapenc:string"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";></content>
    <createdOn xsi:type="soapenc:string"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";>1130988239460</createdOn>
    <id xsi:type="soapenc:string"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";>5426fa617f00000200c28cb7a436fccf</id>
    <node xsi:type="soapenc:string"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";>shw:TinkPrana</node>
    <priority xsi:type="soapenc:string"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";>-</priority>
    <thumbnailPath xsi:type="soapenc:string"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";></thumbnailPath>
    <type xsi:type="soapenc:string"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";></type>
    <typist xsi:type="soapenc:string" xsi:null="true"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"/>
   </beginReturn>
  </beginResponse>
 </soapenv:Body>
</soapenv:Envelope>

subsequently from python to axis we get:

POST /axis/services/NoteManager HTTP/1.0

Host: 127.0.0.1:1234

User-agent: SOAPpy 0.11.6 (pywebsvcs.sf.net)

Content-type: text/xml; charset="UTF-8"

Content-length: 1593

SOAPAction: "commit"



<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/";
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance";
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/";
xmlns:xsd="http://www.w3.org/1999/XMLSchema";>
<SOAP-ENV:Body>
<commit SOAP-ENC:root="1">
<v1 href="#i1"/>
<beginReturn href="#i2"/>
</commit>
<v1 xsi:type="xsd:string" id="i1" SOAP-ENC:root="0">shw:TinkPrana</v1>
<xsd:beginReturn id="i2" SOAP-ENC:root="0">
<audience href="#i3"/>
<author xsi:null="1"/>
<content href="#i4"/>
<createdOn href="#i5"/>
<id href="#i6"/>
<node href="#i7"/>
<priority href="#i8"/>
<thumbnailPath href="#i4"/>
<type href="#i4"/>
<typist xsi:null="1"/>
</xsd:beginReturn>
<audience SOAP-ENC:arrayType="xsd:ur-type[10]" xsi:type="SOAP-ENC:Array"
SOAP-ENC:root="0" id="i3">
<item href="#i9"/>
<item xsi:null="1"/>
<item href="#i4"/>
<item href="#i5"/>
<item href="#i6"/>
<item href="#i7"/>
<item href="#i8"/>
<item href="#i4"/>
<item href="#i4"/>
<item xsi:null="1"/>
</audience>
<content xsi:type="xsd:string" id="i4" SOAP-ENC:root="0"></content>
<createdOn xsi:type="xsd:string" id="i5"
SOAP-ENC:root="0">1130988239460</createdOn>
<id xsi:type="xsd:string" id="i6"
SOAP-ENC:root="0">5426fa617f00000200c28cb7a436fccf</id>
<node xsi:type="xsd:string" id="i7" SOAP-ENC:root="0">shw:TinkPrana</node>
<priority xsi:type="xsd:string" id="i8" SOAP-ENC:root="0">-</priority>
<item xsi:type="xsd:string" id="i9" SOAP-ENC:root="0">test</item>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

So, indeed we are getting a array encoding. My suspicion
is that this is because I'm sending the

    <audience xsi:type="soapenc:string"

iso

    <audience xsi:type="xsd:string"

Do you know if that's true + if there's a way to change it
from soapenc to xsd:string ?

Thanks,
- Filip




> Check the contents of the soap request it seems to be sending an array
of strings which is why the array serializer is being invoked.
> (problem with SOAPPy?). Try a sample client (generate one by running
WSDL2Java) and compare the 2 requests.
>
> thanks,
> dims
>
> On 11/2/05, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
>> Hi,
>>
>> I found a couple more pointers that hopefully will trigger
>> the solution in someone's mind:
>>
>> The client (I'm using Python and SOAPpy) gets the following
>> exception:
>>
>> Server.userException: java.lang.IllegalArgumentException: argument type
mismatch: <SOAPpy.Types.structType detail at 1081742604>:
{'stackTrace': 'java.lang.IllegalArgumentException: argument type
mismatch\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)\n\tat
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\n\tat
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\n\tat
java.lang.reflect.Method.invoke(Method.java:585)\n\tat
>> org.apache.axis.utils.BeanPropertyDescriptor.set(BeanPropertyDescriptor.java:142)\n\tat
org.apache.axis.encoding.ser.BeanPropertyTarget.set(BeanPropertyTarget.java:75)\n\tat
org.apache.axis.encoding.DeserializerImpl.valueComplete(DeserializerImpl.java:249)\n\tat
org.apache.axis.encoding.ser.ArrayDeserializer.valueComplete(ArrayDeserializer.java:583)\n\tat
org.apache.axis.encoding.DeserializerImpl.endElement(DeserializerImpl.java:509)\n\tat
org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
>>
>>
>> What I'm surprised about is to find here a reference to the
>> ArrayDeserializer here -- I don't think this one should be
>> used...
>>
>> Apart from that, I also find that the parameters are described
>> with soapenc:string iso xsd:string in the wsdl file that's generated
from axis automatically:
>>
>>    <complexType name="ExternalNote">
>>     <sequence>
>>      <element name="audience" nillable="true" type="soapenc:string"/>
<element name="author" nillable="true" type="soapenc:string"/>
<element name="content" nillable="true" type="soapenc:string"/>
<element name="createdOn" nillable="true" type="soapenc:string"/>
<element name="id" nillable="true" type="soapenc:string"/>
<element name="node" nillable="true" type="soapenc:string"/>
<element name="priority" nillable="true" type="soapenc:string"/>
<element name="thumbnailPath" nillable="true"
>> type="soapenc:string"/>
>>      <element name="type" nillable="true" type="soapenc:string"/>
<element name="typist" nillable="true" type="soapenc:string"/>
>>     </sequence>
>>    </complexType>
>>
>> Anybody any thoughts where I could look next ?
>>
>> Thanks!
>> - Filip
>>
>>
>>
>>
>> > Hi Axis'ers,
>> >
>> > I'm trying to embed Axis in an application and have my own
>> > provider set up and attach services to it like so:
>> >
>> > ...
>> >         m_provider = new SimpleProvider();
>> >
>> >         TypeMapping tm;
>> >         try {
>> >             tm =
>> m_provider.getTypeMappingRegistry().createTypeMapping();
>> >
>> >             n = new QName("ExternalNote", "ExternalNote");
>> >
>> >             tm.register(ExternalNote.class, n,
>> >                     new BeanSerializerFactory(ExternalNote.class, n),
new BeanDeserializerFactory(ExternalNote.class,
>> n));
>> >
>> >             m_provider.getTypeMappingRegistry().register(
>> >                     "http://schemas.xmlsoap.org/soap/encoding/";, tm);
>> >
>> >         } catch (org.apache.axis.ConfigurationException e) {
>> >             throw new ConfigurationException(e.getMessage(), e);
>> >         }
>> >
>> >         Configuration[] serviceConfs = conf.getChildren("service");
>> >
>> >         for (int i = 0; i < serviceConfs.length; i++) {
>> >             Configuration sConf = serviceConfs[i];
>> >
>> >             AvalonProvider p = new AvalonProvider(m_serviceManager);
>> >
>> >             SOAPService s = new SOAPService(p);
>> >
>> >             s.getServiceDescription().setName(sConf.getAttribute("id"));
s.setOption("className", sConf.getAttribute("impl"));
s.setOption("allowedMethods",
>> > sConf.getAttribute("allowedMethods"));
>> >
>> >             ((SimpleProvider)
>> > m_provider).deployService(sConf.getAttribute("id"), s);
>> >         }
>> > ...
>> >
>> > All this works great; but I'm running into the following
>> > snag passing ExternalNote object back into Axis (the
>> > serialization process works well); Axis says:
>> >
>> > Nov 2, 2005 4:17:59 PM org.apache.axis.encoding.ser.BeanPropertyTarget
>> set
>> > SEVERE: Could not convert
>> > org.apache.axis.encoding.ser.ArrayDeserializer$ArrayListExtension to
>> bean
>> > field 'audience', type java.lang.String
>> >
>> > (audience is a simple String member of the ExternalNote class).
>> >
>> > Can anybody point me to where I'm going wrong? It seems
>> > that I'm doing something incorrectly in the typemappingregistry but I
can't find enough documentation about it to really
>> > figure out how to do it correctly (most of the examples
>> > assume starting from wsdl).
>> >
>> > I'd be very greateful for any hints!
>> >
>> > Thanks in advance,
>> >
>> > - Filip
>> >
>> >
>> >
>> >
>>
>>
>
>
> --
> Davanum Srinivas : http://wso2.com/blogs/
>





Reply via email to