Manipulating WSDL with Java API
The WSDL parser reads a WSDL document and transforms it into a Java object model. You can manipulate these objects and finally serialize them back into a WSDL document.
The code in listing 1 fetches the WSDL document from the BLZService and adds a new operation with the dedicated message elements and binding operation to it.
package sample.wsdl;
import com.predic8.wsdl.*;
import com.predic8.schema.*;
import static com.predic8.schema.Schema.*;
public class ManipulateWSDL {
public static void main(String[] args) {
WSDLParser parser = new WSDLParser();
Definitions wsdl = parser.parse("http://www.thomas-bayer.com/axis2/services/BLZService?wsdl");
Schema schema = wsdl.getSchema("http://thomas-bayer.com/blz/");
schema.newElement("listBanks").newComplexType().newSequence();
Sequence seq = schema.newElement("listBanksResponse").newComplexType().newSequence();
seq.newElement("bank", STRING);
seq.newElement("name", STRING);
PortType pt = wsdl.getPortType("BLZServicePortType");
Operation op = pt.newOperation("listBanks");
op.newInput("listBanks").newMessage("listBanks").newPart("parameters", "tns:listBanks");
op.newOutput("listBanksResponse").newMessage("listBanksResponse").newPart("parameters", "tns:listBanksResponse");
Binding bnd = wsdl.getBinding("BLZServiceSOAP11Binding");
BindingOperation bo = bnd.newBindingOperation("listBanks");
bo.newSOAP11Operation();
bo.newInput().newSOAP11Body();
bo.newOutput().newSOAP11Body();
System.out.println(wsdl.getAsString());
}
}
Listing 1: ManipulateWSDL.java
The following listing shows the modified WSDL.
<definitions targetNamespace='http://thomas-bayer.com/blz/' xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/' xmlns='http://schemas.xmlsoap.org/wsdl/' xmlns:wsaw='http://www.w3.org/2006/05/addressing/wsdl' xmlns:tns='http://thomas-bayer.com/blz/' xmlns:http='http://schemas.xmlsoap.org/wsdl/http/' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:mime='http://schemas.xmlsoap.org/wsdl/mime/' xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/' xmlns:soap12='http://schemas.xmlsoap.org/wsdl/soap12/'>
<documentation>BLZService</documentation>
<types>
<xsd:schema targetNamespace='http://thomas-bayer.com/blz/' attributeFormDefault='unqualified' elementFormDefault='qualified' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/' xmlns='http://schemas.xmlsoap.org/wsdl/' xmlns:wsaw='http://www.w3.org/2006/05/addressing/wsdl' xmlns:tns='http://thomas-bayer.com/blz/' xmlns:http='http://schemas.xmlsoap.org/wsdl/http/' xmlns:mime='http://schemas.xmlsoap.org/wsdl/mime/' xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/' xmlns:soap12='http://schemas.xmlsoap.org/wsdl/soap12/'>
<xsd:element name='getBank' type='tns:getBankType' />
<xsd:element name='getBankResponse' type='tns:getBankResponseType' />
<xsd:element name='listBanks'>
<xsd:complexType>
<xsd:sequence />
</xsd:complexType>
</xsd:element>
<xsd:element name='listBanksResponse'>
<xsd:complexType>
<xsd:sequence>
<xsd:element name='bank' type='xsd:string' />
<xsd:element name='name' type='xsd:string' />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name='getBankType'>
<xsd:sequence>
<xsd:element name='blz' type='xsd:string' />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name='getBankResponseType'>
<xsd:sequence>
<xsd:element name='details' type='tns:detailsType' />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name='detailsType'>
<xsd:sequence>
<xsd:element name='bezeichnung' type='xsd:string' />
<xsd:element name='bic' type='xsd:string' />
<xsd:element name='ort' type='xsd:string' />
<xsd:element name='plz' type='xsd:string' />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
</types>
<message name='getBank'>
<part name='parameters' element='tns:getBank' />
</message>
<message name='getBankResponse'>
<part name='parameters' element='tns:getBankResponse' />
</message>
<message name='listBanks'>
<part name='parameters' element='tns:listBanks' />
</message>
<message name='listBanksResponse'>
<part name='parameters' element='tns:listBanksResponse' />
</message>
<portType name='BLZServicePortType'>
<operation name='getBank'>
<input message='tns:getBank' />
<output message='tns:getBankResponse' />
</operation>
<operation name='listBanks'>
<input message='tns:listBanks' name='listBanks' />
<output message='tns:listBanksResponse' name='listBanksResponse' />
</operation>
</portType>
<binding name='BLZServiceSOAP11Binding' type='tns:BLZServicePortType'>
<soap:binding style='document' transport='http://schemas.xmlsoap.org/soap/http' />
<operation name='getBank'>
<soap:operation soapAction='' style='document' />
<input>
<soap:body use='literal' />
</input>
<output>
<soap:body use='literal' />
</output>
</operation>
<operation name='listBanks'>
<soap:operation soapAction='' style='document' />
<input>
<soap:body use='literal' />
</input>
<output>
<soap:body use='literal' />
</output>
</operation>
</binding>
<binding name='BLZServiceSOAP12Binding' type='tns:BLZServicePortType'>
<soap12:binding style='document' transport='http://schemas.xmlsoap.org/soap/http' />
<operation name='getBank'>
<soap12:operation soapAction='' style='document' />
<input>
<soap12:body use='literal' />
</input>
<output>
<soap12:body use='literal' />
</output>
</operation>
</binding>
<binding name='BLZServiceHttpBinding' type='tns:BLZServicePortType'>
<http:binding verb='POST' />
<operation name='getBank'>
<http:operation location='BLZService/getBank' />
<input />
<output />
</operation>
</binding>
<service name='BLZService'>
<port name='BLZServiceSOAP11port_http' binding='tns:BLZServiceSOAP11Binding'>
<soap:address location='http://www.thomas-bayer.com:80/axis2/services/BLZService' />
</port>
<port name='BLZServiceSOAP12port_http' binding='tns:BLZServiceSOAP12Binding'>
<soap12:address location='http://www.thomas-bayer.com:80/axis2/services/BLZService' />
</port>
<port name='BLZServiceHttpport' binding='tns:BLZServiceHttpBinding'>
<http:address location='http://www.thomas-bayer.com:80/axis2/services/BLZService' />
</port>
</service>
</definitions>