+49 228 5552576-0


info@predic8.com

Parsing WSDL with Java

The Membrane SOA Model makes it easy to parse a WSDL. Listing 1 is an example of parsing a wsdl with almost all the information of it. Over and above that, you can get much more details using many other methods and features of SOA Model. For more information see the java api doc or discuss in SOA Model Forum.

package samples.wsdl;

import com.predic8.schema.*;
import com.predic8.wsdl.*;

public class FullWSDLParser {

	public static void main(String[] args) {
		WSDLParser parser = new WSDLParser();

		Definitions defs = parser.parse("http://www.thomas-bayer.com/axis2/services/BLZService?wsdl");

		out("-------------- WSDL Details --------------");
		out("TargenNamespace: \t" + defs.getTargetNamespace());
		out("Style: \t\t\t" + defs.getStyle());
		if (defs.getDocumentation() != null) {
			out("Documentation: \t\t" + defs.getDocumentation());
		}
		out("\n");

		/* For detailed schema information see the FullSchemaParser.java sample.*/
		out("Schemas: ");
		for (Schema schema : defs.getSchemas()) {
			out("  TargetNamespace: \t" + schema.getTargetNamespace());
		}
		out("\n");
		
		out("Messages: ");
		for (Message msg : defs.getMessages()) {
			out("  Message Name: " + msg.getName());
			out("  Message Parts: ");
			for (Part part : msg.getParts()) {
				out("    Part Name: " + part.getName());
				out("    Part Element: " + ((part.getElement() != null) ? part.getElement() : "not available!"));
				out("    Part Type: " + ((part.getType() != null) ? part.getType() : "not available!" ));
				out("");
			}
		}
		out("");

		out("PortTypes: ");
		for (PortType pt : defs.getPortTypes()) {
			out("  PortType Name: " + pt.getName());
			out("  PortType Operations: ");
			for (Operation op : pt.getOperations()) {
				out("    Operation Name: " + op.getName());
				out("    Operation Input Name: "
				    + ((op.getInput().getName() != null) ? op.getInput().getName() : "not available!"));
				out("    Operation Input Message: "
				    + op.getInput().getMessage().getQname());
				out("    Operation Output Name: "
				    + ((op.getOutput().getName() != null) ? op.getOutput().getName() : "not available!"));
				out("    Operation Output Message: "
				    + op.getOutput().getMessage().getQname());
				out("    Operation Faults: ");
				if (op.getFaults().size() > 0) {
					for (Fault fault : op.getFaults()) {
						out("      Fault Name: " + fault.getName());
						out("      Fault Message: " + fault.getMessage().getQname());
					}
				} else out("      There are no faults available!");
				
			}
			out("");
		}
		out("");

		out("Bindings: ");
		for (Binding bnd : defs.getBindings()) {
			out("  Binding Name: " + bnd.getName());
			out("  Binding Type: " + bnd.getPortType().getName());
			out("  Binding Protocol: " + bnd.getBinding().getProtocol());
			if(bnd.getBinding() instanceof AbstractSOAPBinding) out("  Style: " + (((AbstractSOAPBinding)bnd.getBinding()).getStyle()));
			out("  Binding Operations: ");
			for (BindingOperation bop : bnd.getOperations()) {
				out("    Operation Name: " + bop.getName());
				if(bnd.getBinding() instanceof AbstractSOAPBinding) {
					out("    Operation SoapAction: " + bop.getOperation().getSoapAction());
					out("    SOAP Body Use: " + bop.getInput().getBindingElements().get(0).getUse());
				}
			}
			out("");
		}
		out("");

		out("Services: ");
		for (Service service : defs.getServices()) {
			out("  Service Name: " + service.getName());
			out("  Service Potrs: ");
			for (Port port : service.getPorts()) {
				out("    Port Name: " + port.getName());
				out("    Port Binding: " + port.getBinding().getName());
				out("    Port Address Location: " + port.getAddress().getLocation()
				    + "\n");
			}
		}
		out("");
	}

	private static void out(String str) {
		System.out.println(str);
	}
}
          
Listing 1: FullWSDLParser.java

In listing 2 you can see the output.

-------------- WSDL Details --------------
TargenNamespace: 	http://thomas-bayer.com/blz/
Style: 			Document/Literal-Wrapped
Documentation: 		BLZService


Schemas: 
  TargetNamespace: 	http://thomas-bayer.com/blz/


Messages: 
  Message Name: getBank
  Message Parts: 
    Part Name: parameters
    Part Element: element[name=getBank,type={http://thomas-bayer.com/blz/}getBankType,ref=null,embeddedType=null]
    Part Type: not available!

  Message Name: getBankResponse
  Message Parts: 
    Part Name: parameters
    Part Element: element[name=getBankResponse,type={http://thomas-bayer.com/blz/}getBankResponseType,ref=null,embeddedType=null]
    Part Type: not available!


PortTypes: 
  PortType Name: BLZServicePortType
  PortType Operations: 
    Operation Name: getBank
    Operation Input Name: not available!
    Operation Input Message: {http://thomas-bayer.com/blz/}getBank
    Operation Output Name: not available!
    Operation Output Message: {http://thomas-bayer.com/blz/}getBankResponse
    Operation Faults: 
      There are no faults available!


Bindings: 
  Binding Name: BLZServiceSOAP11Binding
  Binding Type: BLZServicePortType
  Binding Protocol: SOAP11
  Style: document
  Binding Operations: 
    Operation Name: getBank
    Operation SoapAction: 
    SOAP Body Use: literal

  Binding Name: BLZServiceSOAP12Binding
  Binding Type: BLZServicePortType
  Binding Protocol: SOAP12
  Style: document
  Binding Operations: 
    Operation Name: getBank
    Operation SoapAction: 
    SOAP Body Use: literal

  Binding Name: BLZServiceHttpBinding
  Binding Type: BLZServicePortType
  Binding Protocol: HTTP
  Binding Operations: 
    Operation Name: getBank


Services: 
  Service Name: BLZService
  Service Potrs: 
    Port Name: BLZServiceSOAP11port_http
    Port Binding: BLZServiceSOAP11Binding
    Port Address Location: http://www.thomas-bayer.com:80/axis2/services/BLZService

    Port Name: BLZServiceSOAP12port_http
    Port Binding: BLZServiceSOAP12Binding
    Port Address Location: http://www.thomas-bayer.com:80/axis2/services/BLZService

    Port Name: BLZServiceHttpport
    Port Binding: BLZServiceHttpBinding
    Port Address Location: http://www.thomas-bayer.com:80/axis2/services/BLZService



      
Listing 2: The List of the operation in the WSDL Document