Hmmm, maybe I've missed an important part if this discussion.  I have to
ask, is all of this work necessary for sending an array of a Custom
type?

I know that the documentation isn't clear, but my experience has been
that it is quite simple.  With Axis v1.0, all that I had to do was
define the BeanSerializer for the one custom type itself... Axis was
able to deal with the fact that I was using arrays of that custom type
quite nicely after that.

I did spend some time at first trying to define the mapping for the
Array of Custom types (because I hadn't tried it without it first) and
found it very frustrating, but in the end it wasn't even necessary.

Could that also be the case here?

---
Jess


On Fri, 2003-01-03 at 02:11, Gene Chuang wrote:
> Yeah sure, if you are familiar with XML-namespace syntax and how axis
> maps namespace to java package and vice versa, and how Axis handles
> complex-type and array-type conversion then you can handcode the
> deploy.wsdd to do exactly this. 
> 
> If not, then do the round-trip to create the deploy.wsdd as a template
> for you, and use this in future deployments.  
> 
>  Dhagam Sridhar <[EMAIL PROTECTED]> wrote: 
>         HI all,
>             I too have the same problem using Axis,
>             Can we make it work without using java2WSDL and WSDL2java?
>          
>         thanks in advance,
>         sridhar.
>                 ----- Original Message ----- 
>                 From: Marc Esher
>                 To: [EMAIL PROTECTED]
>                 Sent: Monday, December 30, 2002 5:51 AM
>                 Subject: RE: returning an array of beans (or: why i'm
>                 going insane)
>                 
>                 Thanks a lot, Gene. I'm going to give this a go right
>                 now and cross my fingers. I'll report back the results
>                 soon.
>                         -----Original Message-----
>                         From: Gene Chuang
>                         [mailto:[EMAIL PROTECTED]]
>                         Sent: Sunday, December 29, 2002 7:12 PM
>                         To: [EMAIL PROTECTED];
>                         [EMAIL PROTECTED]
>                         Subject: Re: returning an array of beans (or:
>                         why i'm going insane)
>                         
>                         
>                         
>                         Heh, I went through the same rigamarole last
>                         week to get Axis to deploy my service that has
>                         an array of JavaBeans. Here's how I attacked
>                         this problem: 
>                         
>                         According to the docs, just editing the
>                         deploy.wsdd to add JavaBean serialization
>                         entries should be good enough.  However,
>                         because XML namespace syntax is nearly
>                         impossible to understand, and the docs doesn't
>                         show a full example of the wsdd, I had to
>                         create just this entry manually by doing the
>                         Java2WSDL->WSDL2Java roundtripping.  Here are
>                         the steps: 
>                         
>                         1)  run Java2WSDL to get the wsdl file
>                         2) copy this file to a temp directory and run
>                         "WSDL2Java -s" to get the deploy.wsdd and not
>                         have your classes stomped
>                         3) Manually edit the new deploy.wsdd, remove
>                         all the extraneous elements: 
>                         wsdlServiceElement, wsdlServicePort and
>                         wsdlPortType.  Change className back to your
>                         original service class.  And note there should
>                         be at least 2 typeMapping entries,
>                         YourJavaBean and ArrayOfYourJavaBean!  The
>                         latter is what you're missing, and is not
>                         explained in the docs.  Furthurmore, all that
>                         complex XML-namespace-to-java-package-mapping
>                         are annotated correctly.
>                         4) Replace your original wsdd with the new one
>                         and deploy.
>                         
>                         I'm sure Marc and I aren't the first or last
>                         to come across this problem.  I blame it on
>                         the following factors:
>                         
>                         - XML Namespace is possibly the most confusing
>                         spec I've ever encountered and makes it hard
>                         to handcode your own wsdl or wsdd.
>                         - Axis docs doesn't provide details on
>                         array-of-JavaBean serialization, and this
>                         practice is very common in the real business
>                         world.
>                         - WSDL2Java is stomping our implementation
>                         class!  According to the docs, "When WSDL2Java
>                         is asked to generate the implementation
>                         template (via the --server-side flag), it will
>                         ONLY generate it if it does not already
>                         exist.  If this implementation already exists,
>                         it will not be overwritten."  This is not the
>                         case!
>                         
>                         Apache can't do much about Namespace
>                         complexity, but I hope it can rectify its
>                         documents and WSDL2Java tool!
>                         
>                         Gene 
>                         
>                         Marc Esher <[EMAIL PROTECTED]> wrote: 
>                                 Hi all,
>                                 I've been struggling with this for
>                                 quite some time now, and it's time to
>                                 post as I am about to go insane. Note
>                                 that I posted this problem to the
>                                 comp.lang.programmer group before
>                                 receiving my subscription activation
>                                 for
>                                 this list. Here goes:
>                                 
>                                 I have a class that returns an array
>                                 of javabeans (ArticleBean). I want to
>                                 expose this class as a web service
>                                 using Axis. So far, I've been
>                                 successful
>                                 publishing/consuming simple web
>                                 services, but I've had no success with
>                                 anything that returns beans...even the
>                                 provided sample won't work for me.
>                                 
>                                 Here's the relevant axis code from the
>                                 web service client:
>                                 String endpoint =
>                                 
>"http://localhost:8080/ArticleSearchService/services/ArticleSearchImpl";;
>                                 Service service = new Service();
>                                 Call call=null;
>                                 
>                                 call = (Call) service.createCall();
>                                 call.setTargetEndpointAddress( new
>                                 java.net.URL(endpoint) );
>                                 QName qn = new QName(
>                                 "urn:ArticleBean", "ArticleBean" );
>                                 call.registerTypeMapping(ArticleBean.class, qn,
>                                 new
>                                 
>org.apache.axis.encoding.ser.BeanSerializerFactory(ArticleBean.class, qn),
>                                 new
>                                 
>org.apache.axis.encoding.ser.BeanDeserializerFactory(ArticleBean.class,
>                                 qn));
>                                 call.setOperationName( new
>                                 QName("ArticleSearchImpl",
>                                 "searchByDoi") );
>                                 call.addParameter("doi",
>                                 XMLType.XSD_STRING, ParameterMode.IN);
>                                 call.setReturnType( XMLType.SOAP_ARRAY
>                                 );
>                                 ab = (ArticleBean[]) call.invoke( new
>                                 Object [] {doi});
>                                 
>                                 And here's the deployment descriptor:
>                                 
>                                 
>xmlns:java="http://xml.apache.org/axis/wsdd/providers/java";>
>                                 
>                                 
>                                 
>                                 languageSpecificType="java:ArticleBean"/>
>                                 
>                                 
>                                 
>                                 If I view the wsdl at
>                                 
>http://localhost:8080/ArticleSearchService/services/ArticleSearchImpl?wsdl,
>                                 I get the following error: (snip) The
>                                 value of the attribute "xmlns:tns1" is
>                                 invalid. Prefixed namespace bindings
>                                 may not be empty
>                                 
>                                 If I invoke a the client class
>                                 (snippet above), I get "no
>                                 deserializer
>                                 defined for array type" in the error
>                                 message.
>                                 
>                                 So.....I tried another approach:
>                                 
>                                 put my ArticleSearchImpl class into a
>                                 package (ArticleSearch).
>                                 use java2wsdl on this class; then, use
>                                 wsdl2java, putting the auto-generated
>                                 files into package ArticleSearch.ws.
>                                 This worked well. however, it also
>                                 put a new version of my ArticleBean
>                                 class into this package as well, and
>                                 the
>                                 deploy.wsdd points to this bean. Then,
>                                 I use the auto-generated
>                                 ArticleSearchImplSoapBindingImpl to
>                                 wrap my original class, something like
>                                 this:
>                                 
>                                 import
>                                 ArticleSearch.ArticleSearchImpl;
>                                 public class
>                                 ArticleSearchImplSoapBindingImpl
>                                 implements
>                                 ArticleSearch.ws.ArticleSearchImpl
>                                 {
>                                 ArticleSearchImpl searcher = new
>                                 ArticleSearchImpl(); //my original
>                                 class
>                                 
>                                 public ArticleSearch.ws.ArticleBean[]
>                                 searchByAuthor(java.lang.String
>                                 author) throws
>                                 java.rmi.RemoteException {
>                                 return
>                                 searcher.searchByAuthor(author);
>                                 }
>                                 ....
>                                 }
>                                 
>                                 The problem is that my original class
>                                 returns an array of
>                                 ArticleSearch.ArticleBean, not an
>                                 array of ArticleSearch.ws.ArticleBean.
>                                 Sticking
>                                 (ArticleSearch.ws.ArticleBean[]) in
>                                 front of the return value
>                                 didn't help, either, as I suspected it
>                                 wouldn't. So now I've progressed
>                                 somewhat from my original problem, but
>                                 i'm still stuck. I cannot believe
>                                 that it's all that difficult to create
>                                 this sucker, so I know I'm doing
>                                 stupid things wrong.
>                                 
>                                 Since there is no documentation on the
>                                 axis site for returning an array of
>                                 beans, I'm appealing to you all for
>                                 help.
>                                 
>                                 Thanks.
>                                 
>                                 Marc
-- 
=======================================
Jess Sightler
Senior Developer
Exim Technologies
131 Falls Street
Greenville SC 29601
Phone: 864-679-4651
=======================================



Reply via email to