Axis does not do any schema validation. In bean classes, if you don't
see any code generated for string length check etc. - you can be sure
there's no validation being done.
We realized this when working with Axis alone. Possibilities that I can
think of:
- implement your own Schema validation by working with the XML
documents
priot
(not after the XML is de-serialized and data is populated in bean
classes)
- use castor data binding framework with Axis as Castor is XML
schema
aware. There is an article from IBM developer series where they
talk of integrating the 2 - essentially, you dump axis beans and use
castor beans.
- maybe a custom Axis handler? Not sure...people in this forum can
answer that
Also, changing the wsdl file tag in deploy.wsdd - does nothing as far as
validation goes. It just prints out your wsdl file rather than axis
generating it from code. It's probably worth it if you have hand -coded
your WSDL to meet WS-I (interoperability specs) etc.
Hope this helps.
Regards
-Somesh
-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
Sent: Tuesday, March 02, 2004 5:08 AM
To: [EMAIL PROTECTED]
Subject: 3rd repost. Schema-Validation with Axis
Hi,
sorry for bothering you again, but as of the moment I haven't got any
information I can work on.
If it is not possible to validate SOAP messages against the Schema
from the
WSDL out of the box, or not even with a homegrown handler, I really like
to
know. I'll stfu then.
The problem once again. Here are my steps:
1) Building a WSDL by hand.
2) Generating classes and deploy.wsdd with WSDL2Java.
3) copying the service element from deploy.wsdd to server-config.wsdd.
Changing the name of the implementation class by hand.
4) deploying generated classes plus server-config.wsdd.
5) restarting axis.
When I now write a test client, which sends a message violating the
schema,
like sending a String with 18 characters instead of 12, which is the
constraint
from the WSDL, it doesn't fail, which it should.
Anyway, I believe the reason for that is, WSDL2Java ignores the
restrictions
from the Schema and the generated classes and deploy.wsdd don't contain
this
information anymore.
When accessing the ?wsdl from axis it returns a WSDL without the
constraints and
also turned all defined simple types to complex types.
Somebody on the list, Luciano, mentioned to use the wsdlFile-tag in
server-config.wsdd to use the original wsdl (the one with all the
constraints in
place etc.). That I did... Now ?wsdl returns the original WSDL, but this
seems
to be about the only thing Axis does with my WSDL (serving it). It still
doesn't
reject messages not obeying the defined constraints. I left everything
else in
place in the server-config.wsdd. Was that ok?
What else can I do?
How do other people use Axis with validation? Do I miss something?
This seems
to be a very basic and neccessary task, doesn't it?
I am using Axis 1.1 with Tomcat 5.0.x. And I can only use Axis 1.1 for
the
moment.
On a sidebar... When I restrict a simple type, like a String, Axis
always
makes it a complex type, which bloats the generated code seriously. Any
way
around this?
Cheers,
Mariano