I have modified the WSDLSource code I submitted earlier to encapsulate
runtime type checking in the WSDLSource object. I have made WSDLSource an
interface rather than a class and have added the API method
WSDLReader.createWSDLSource(). The concrete reader's implementation of
this method will return an implementation of WSDLSource compatible with the
reader. That is, one that will perform runtime type checking in the
setSource(Object) method to ensure the source Object is of a type
compatible with the reader - and throw a WSDLException if it's not.
I have also encapsulated the wsdl base uri in the WSDLSource. The
programming model now looks like this:
WSDLSource wsdlSource = domReader.createWSDLSource();
wsdlSource.setBaseURI(wsdlURI);
wsdlSource.setSource(domElement);
DescriptionElement desc = reader.readWSDL(wsdlSource);
The Javadoc of WSDLReader and WSDLSource provide further information.
regards,
John Kaputin
----- Forwarded by John Kaputin/UK/IBM on 07/06/2006 21:23 -----
John
Kaputin/UK/IBM
To
07/06/2006 16:40 [email protected]
cc
Subject
Reading WSDL from DOM elements via
WSDLSource
I have committed some code to support reading WSDL from other formats such
as a DOM Element or Document. Please post any comments or feedback.
I did not want to simply add to the WSDLReader interface WSDL4J-like
methods such as readWSDL(String, Element) or readWSDL(String, Document)
because this would make the WSDLReader API
depending on DOM .... which defeats one of Woden's objectives for
supporting choice of XML parser and XML object model.
One option was to capture these methods in a DOM-specific Woden API ...
like an API subset, but this suggests making parts of the overall Woden API
optional to implementors (i.e. to a StAX implementor) and this approach
probably requires more thought and discussion than I had time for right
now.
Instead I have create a container or wrapper class called
org.apache.woden.WSDLSource which simply takes in its ctor some Object
representing the WSDL source and returns this Object via a public method
getSource(). Two new readWSDL methods are added to WSDLReader ...
readWSDL(String, WSDLSource) and readWSDL(String, WSDLSource,
ErrorHandler). The String is the uri of the base WSDL document. See the
Javadoc comments for WSDLSource and the two readWSDL methods for more
details.
WSDLSource trades type safety for flexibility. The WSDLReader
implementation (currently just DOMWSDLReader) will throw a WSDLException if
it does not recognize the type of object contained in WSDLSource.
WSDLSource keeps the WSDLReader API independent of any particular XML
parser or XML API. I will give more thought to how to create a WSDLSource
and/or how to represent specific formats within in. There may be some role
the WSDLFactory can play here, in creating a WSDLSource subtype appropriate
to the concrete WSDLReader or something. For now (M5), WSDLSource just
solves the immediate need for reading WSDL from DOM elements or documents
without 'polluting' the Woden API with DOM-specific stuff.
The programming model looks like this:
//String wsdlLoc = "
http://dev.w3.org/cvsweb/~checkout~/2002/ws/desc/test-suite/documents/good/CreditCardFaults-1G/use-credit-card-faults.wsdl
";
String wsdlLoc =
"C:/workspace/wsdl20/woden_jktest/resources/reservation.wsdl";
URL url = StringUtils.getURL(null, wsdlLoc); //Woden StringUtils class
String wsdlURL = url.toString();
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
dbFactory.setNamespaceAware(true);
DocumentBuilder builder = dbFactory.newDocumentBuilder();
Document doc = builder.parse(new InputSource(wsdlURL));
WSDLFactory factory = WSDLFactory.newInstance();
WSDLReader reader = factory.newWSDLReader();
DescriptionElement desc = reader.readWSDL(wsdlLoc, new WSDLSource(doc));
I will update the two related JIRAs.
regards,
John Kaputin
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]