tinyWSDL provides two ways to work with WSDL extensions.
First, it is possible to access to all "unknown" attributes and elements directly:
public String getExtensionAttribute(QName name); public String setExtensionAttribute(QName name, String value); public List<Element> getExtensionElements(QName name); public void addExtensionElement(QName name, Element extElement); public void removeExtensionElement(Element extElement);
These methods are implemented in all WSDL 2.0 Components.
Note that no parsing is performed and extensions are represented as DOM Element objects.
QName attribute = new QName("http://unknown", "param"); description.setExtensionAttribute(attribute, "123");
Usually extensions are defined in their own namespaces.
Even more flexibility may be achieved using tinyWSDL extension mechanism:
WSDLComponentExtensions extensions = description.getComponentExtensions(URI.create("http://unknown")); Map<QName, String> attributes = extensions.getExtensionAttributes();
For convenience tinyWSDL implements all WSDL 2.0 Adjuncts extensions, so there is no need to use DOM model.
SOAPEndpointExtensions extensions = (SOAPEndpointExtensions)endpoint.getComponentExtensions(WSDLPredefinedExtension.SOAP.URI); extensions.setHttpAuthenticationRealm("user"); extensions.setHttpAuthenticationScheme(HTTPAuthenticationScheme.BASIC);
Here WSDLPredefinedExtension enumeration contains namespaces for WSDL 2.0 standard extensions.
Semantic Annotations for WSDL and XML Schema (SAWSDL) is also implemented as an extension.
SAWSDLInterfaceMessageReferenceExtensions ext = (SAWSDLInterfaceMessageReferenceExtensions)input.getComponentExtensions(WSDLPredefinedExtension.SAWSDL.URI); ext.addModelReference(URI.create("http://example.com/#ref"));
Note that in case when tinyXMLSchema is used it is also possible to annotate the referenced xs:element in the XML Schema.
SAWSDLElementDeclarationExtensions elementExt = ext.getSAWSDLElementDeclarationExtensions(); elementExt.addModelReference(URI.create("http://example.com/#ref"));