Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WSDL runtime validation with JAX-WS

We are developing an MDA platform that has support for Web Services. The user can provide a WSDL in runtime and we generate all the artifacts (service interface and implementation for the server, and consumer for the client) using JAX-WS internally.

We want to add validation on the WSDL document provided by the user. Right now the user has to validate that with an external tool like Oxygen, XMLSpy or a web tool, but we want to add that as a part of our system. A nice-to-have feature would be schema validation aswell, including the embedded schemas of the WSDLs.

In JAX-WS (RI) there is support for schema validation in runtime (using the @SchemaValidation annotation) but we haven't found any support for WSDL validation.

We've tried to integrate Eclipse's WSDL validator but it doesn't seem to work for us.

Is there any way of doing this with JAX-WS? If not, is there any other validation framework that we can integrate?

Thanks

like image 303
Denian Avatar asked Nov 05 '22 07:11

Denian


1 Answers

There is a bit of confusion in your question that I need to clarify first.

You seem to want the ability to validate the WSDL (syntax + WS-I) and XSDs, either embedded or referenced externally by the WSDL. On the other hand you bring in @SchemaValidation, which is actually used to validate instance documents.

In a traditional development approach, one might say you want at least the ability to validate design-time artifacts (WSDL+XSDs).

For this scenario then, I would recommend the following:

WSDL: for WS-I compliance testing, please take a look at the test tools section of the WS-I site. It is not clear how the licensing they have with their test tooling would work with yours, but at least it should give you an idea for what to look if it doesn't work for you.

UPDATE: Additional WSDL validation resources: - Eclipse based, how to use outside Eclipse.

XSDs: if you really need separate validation for XSD files, things may get tricky for a production quality product; WSDL4J is not much help here, and I believe XSOM is the way to go for this kind of job. You have to extract content from the types section as one or more XSD files (could be more than one XSD file, take a look at some examples, Microsoft's SharePoint WSDLs come to my mind as a good test case), assign a base uri for each extracted XSD that matches the WSDLs location, then use XSOM to validate those.

Since you're generating the client, you're most likely not concerned with validating, say of the HTTP headers (SOAP 1.1/HTTP, SOAPAction, if it matches the WSDL operation definition). If you end up developing an interest in that as well, which I call runtime validation, then I would recommend a different layout in your approach (i.e. I would not rely on @SchemaValidation but rather do it through a transparent, and generic, proxy service).

like image 177
Petru Gardea Avatar answered Nov 07 '22 23:11

Petru Gardea