David,
Can you please post a stripped down sample that we can use to recreate the problem? Or
at least
the product and catalog java classes?
FYI, We need to get RC1 done quickly...Please add a new bug report to Buzilla ASAP.
Thanks,
dims
--- David Gilbert <[EMAIL PROTECTED]> wrote:
> I had originally submitted this question/issue to the axis-users and tried a
> couple of ideas, but didn't find a working answer and wonder if this might
> be an issue with the 1.1 beta release. I am running with Tomcat 4.1.18.
> Others have indicated this should be possible.
>
> The problem I am hitting is that I can't get Axis to deserialize a bean that
> is in an array within another bean. I am trying to return a Catalog class
> that has an array of Products. Here is the error:
>
> - Exception: org.xml.sax.SAXException: No deserializer defined for array
> type {urn:regisproject.util}Product at
> org.apache.axis.encoding.ser.ArrayDeserializer.onStartElement(ArrayDeseriali
> zer.java:254) at
> org.apache.axis.encoding.DeserializerImpl.startElement(DeserializerImpl.java
> :428) at
> org.apache.axis.encoding.DeserializationContextImpl.startElement(Deserializa
> tionContextImpl.java:925) at
> org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:200)
> at
> org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:
> 693) at
> org.apache.axis.encoding.DeserializerImpl.startElement(DeserializerImpl.java
> :404) at
> org.apache.axis.encoding.ser.BeanDeserializer.startElement(BeanDeserializer.
> java:167) at
> org.apache.axis.encoding.DeserializationContextImpl.startElement(Deserializa
> tionContextImpl.java:925) at
> org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:200)
> at
> org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:
> 693) at
> org.apache.axis.message.RPCElement.deserialize(RPCElement.java:299) at
> org.apache.axis.message.RPCElement.getParams(RPCElement.java:323) at
> org.apache.axis.client.Call.invoke(Call.java:2082) at
> org.apache.axis.client.Call.invoke(Call.java:1986) at
> org.apache.axis.client.Call.invoke(Call.java:1509) at
> regisproject.serviceclient.ProductServiceClient.getCatalog(ProductServiceCli
> ent.java:112) at
> regisproject.serviceclient.ProductServiceClient.main(ProductServiceClient.ja
> va:155) org.xml.sax.SAXException: No deserializer defined for array type
> {urn:regisproject.util}Product
>
> I have other methods using the same service that return a bean with arrays
> of strings and doubles, and another method that returns a single Product
> without any problem.
>
> Is there anything required by Axis to indicate the relationship between the
> Catalog class and the Product class, or should Axis just deserialize objects
> whenever it finds them based on the beanMappings of each bean independently?
>
> Here is the wsdd used to deploy:
>
> <deployment xmlns="http://xml.apache.org/axis/wsdd/"
> xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
> <service name="ProductDbHelper" provider="java:RPC">
> <parameter name="className"
> value="regisproject.database.ProductDbHelper"/>
> <parameter name="allowedMethods"
> value="test,getProduct,getCatalog,getCatalog2"/>
> <beanMapping qname="myNS:Product"
> xmlns:myNS="urn:regisproject.util"
> languageSpecificType="java:regisproject.util.Product"/>
> <beanMapping qname="myNS:Catalog"
> xmlns:myNS="urn:regisproject.util"
> languageSpecificType="java:regisproject.util.Catalog"/>
> <beanMapping qname="myNS:Catalog2"
> xmlns:myNS="urn:regisproject.util"
> languageSpecificType="java:regisproject.util.Catalog2"/>
> </service>
> </deployment>
>
> Attached is the SOAP message from TCPMon.
>
>
> Here is the call set-up:
> public Catalog getCatalog() throws Exception
> {
> Catalog catalog = null;
>
> Service service = new Service();
> Call call = (Call) service.createCall();
> QName qn = new QName( "ProductDbHelper", "getCatalog" );
> QName retQn = new QName( "urn:regisproject.util", "Catalog" );
>
> call.registerTypeMapping(Catalog.class, retQn,
> new
> org.apache.axis.encoding.ser.BeanSerializerFactory(Catalog.class, retQn),
> new
> org.apache.axis.encoding.ser.BeanDeserializerFactory(Catalog.class, retQn));
>
> try
> {
> call.setTargetEndpointAddress( new java.net.URL(endpoint) );
> call.setOperationName(qn);
>
> //call.addParameter( "arg1",
> org.apache.axis.encoding.XMLType.XSD_STRING, ParameterMode.IN);
> call.setReturnType( retQn, Catalog.class );
>
> catalog = (Catalog) call.invoke( new Object[] { } );
> }
> catch (Exception e)
> {
> System.err.println(e.toString());
> }
>
> return catalog;
> }//end getCatalog()
>
>
> Let me know if any other info would be useful - or if I am just doing
> something wrong. If something needs to be documented on how to deserialize
> arrays like this I would volunteer to do so, but would need to understand it
> first :).
>
> Thanks!
>
> -----------------------------
> David Gilbert
> 303.517.1297
> Cragmont Technologies
> Java, Siebel, and Database Design Services
> www.cragmonttech.com
>
>
> ATTACHMENT part 2 application/ms-tnef name=winmail.dat
=====
Davanum Srinivas - http://webservices.apache.org/~dims/
__________________________________________________
Do you Yahoo!?
Yahoo! Mail Plus - Powerful. Affordable. Sign up now.
http://mailplus.yahoo.com