Tom,

> The XML string which I receive is generated by a mainframe 
> application which 
> does a conversion between an old proprietary data format and XML.
> 
> In your code you mention that it is not necessary to register 
> Axis classes 
> explicitly in Axis 1.2 - that Axis 1.2 can do this 
> dynamically. In that case 
> I probably need to use Axis 1.2 as this is functionality that I would 
> require. I cannot use a hardcoded list of data classes (as 
> done in the 
> sample code provided) as I have no control over the contents 
> of the WSDL 
> file (which is defined by an external partner) so its 
> possible that the 
> required datatypes can (and do) change regularly. Of course 
> it would be 
> possible to use a hardcoded array of the type classes if we 
> were to use the 
> WSDL file along with an XSL file to generate our 
> serializsation/deserialization source code but I would prefer 
> not to have to 
> do this. If Axis 1.2 can handle the datatype registration 
> dynamically then 
> this would be preferable. Do you know how this dynamic 
> registration is 
> provided in Axis 1.2? Axis does not seem to provide any release notes 
> detailing functionality changes from one release to the next?

Hm, using Axis 1.2 does not exactly give you *dynamic* registration.  What
you get there is a readily initialised TypeMapping, so you don't need to
manually register the classes.

Even in the code version that you have, it would be possible to add a fully
dynamic registration capability.  We thought about this, but decided against
implementing it because we expected it to get a bit complicated, and 1.2
anyway would solve the problem.  A scetch of the algorithm is (forgive the
fuzzy description):

- Do *not* preinitialise the TypeMapping.
- Instead handle 'SerializerNotFoundException' (or similar - I cannot
remember the actual exception type).  If one of these is thrown, get the
message from the exception and compute from this the name of the missing
type.
- Using this name, do a Class.forName() and dynamically register the
resulting class in your TypeMapping.
- Retry.  The next SerializerNotFoundEx should hopefully refer to a
different type, handle that like above.

But even in this very dynamic case the assumption is that the stub types
have been generated and can be loaded.

Maybe I do not fully understand what you're trying to do.  If you actually
want to work without any generated stubs, then you would have to use the
dynamic WebService aspects: like putting together a Call object and manually
decoding the java.lang.Object returned from the invoke() operation -- we
used this in simple cases, but I do not know what happens if the service
returnes some complicated datatypes.  Maybe here are other possibilities.



> Michael thanks very much for the sample code as it is exactly 
> what I was looking for :)

You're welcome.  We needed a lot of research to put that code together, may
it help many projects... ;^)

Best wishes,
Michael.

-- 
GMX ProMail mit bestem Virenschutz http://www.gmx.net/de/go/mail
+++ Empfehlung der Redaktion +++ Internet Professionell 10/04 +++

Reply via email to