Friday, October 28, 2011

Parse WSDL effectively

As a WSDL’s constituents are well-defined already, it is feasible to use a parser that can get the elements of the WSDL using APIs that are already defined. This will minimize complexity in the code and will help in achieving better performance.

Oracle WSDL parser is one such option.

It is only needed to import the necessary classes as the APIs are already defined and packaged with wsdl.jar.

//importing the necessary classes from library
import oracle.wsdl.WSDLDocument;
import oracle.wsdl.internal.Binding;
import oracle.wsdl.internal.Definitions;
import oracle.wsdl.internal.Documentation;
import oracle.wsdl.internal.Import;
import oracle.wsdl.internal.Message;
import oracle.wsdl.internal.PortType;
…….


WSDLDocument wsdldoc = new WSDLDocument(wsdl_url);
//getting definition element
Definitions definition = wsdldoc.getDefinitions();
//getting service element
Map servicesMap = definition.getServices();
//getting binding element
Map bindingsMap = definition.getBindings();
//getting PortType element
Map ptypesMap = definition.getPortTypes();
//getting message element
Map messagesMap = definition.getMessages();
//getting import details
Map importsMap = definition.getImports();
//getting documentation details
Documentation docs = definition.getDocumentation();


As there can be multiple elements, an “iterator” can be used to parse an individual element.
For Example:

Iterator iterator = servicesMap.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry me = (Map.Entry) iterator.next();
            …….
        }

The above code fragments keep things fairly simple while processing a WSDL.

Apache Woden

Woden provides Java class library for reading, manipulating, creating and writing WSDL documents.

Woden’s DOM-based XML parsing depends on Apache Xerces 2.7.1. Its XML Schema support it depends on the schema parser and object model implemented by the Apache Web Services Commons (ws-commons) XmlSchema project.

//importing necessary classes from woden jars
import org.apache.woden.WSDLException;
import org.apache.woden.WSDLFactory;
import org.apache.woden.WSDLReader;
import org.apache.woden.wsdl20.Binding;
import org.apache.woden.wsdl20.Description;
import org.apache.woden.wsdl20.Interface;
import org.apache.woden.wsdl20.Service;
….

  

WSDLFactory factory = WSDLFactory.newInstance();
WSDLReader reader = factory.newWSDLReader();
reader.setFeature(WSDLReader.FEATURE_VALIDATION, true);
String wsdlurl = “C://axis2-1.4.1//newwsdl.wsdl”;

//reading the WSDL Document
DescriptionElement descElem = (DescriptionElement) reader.readWSDL(wsdlurl);
Description descComp = descElem.toComponent();

//getting Interface, Binding and Service elements
InterfaceElement[] interfaces = descElem.getInterfaceElements();
BindingElement[] bindings = descElem.getBindingElements();
ServiceElement[] services = descElem.getServiceElements();
  

Complete details about usage and extensibility of woden are available at:


JWSDL:


JWSDL is another option that is intended for use by developers of Web services tools and others who need to utilize WSDL documents in Java.
JWSDL is designed to allow users to read, modify, write, create and re-organize WSDL documents in memory. JWSDL is not designed to validate WSDL documents beyond syntactic validity. One use of JWSDL is to develop a tool that validates WSDL semantically.
JWSDL is designed for use in WSDL editors and tools where a partial, incomplete or incorrect WSDL document may require representation.
 
Details of JWSDL can be obtained by accessing the following link:




Source: http://oracled.wordpress.com/2009/02/04/parse-wsdl-effectively/

No comments:

Post a Comment

Blog Archive