1   package org.codehaus.xfire.aegis.wsdl;
2   
3   import org.codehaus.xfire.SOAPConstants;
4   import org.codehaus.xfire.aegis.AegisService;
5   import org.codehaus.xfire.plexus.PlexusXFireTest;
6   import org.codehaus.xfire.wsdl.WSDL;
7   import org.dom4j.Document;
8   import org.dom4j.io.OutputFormat;
9   import org.dom4j.io.XMLWriter;
10  
11  /***
12   * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
13   * @since Feb 21, 2004
14   */
15  public class AegisWSDLTest
16      extends PlexusXFireTest
17  {
18      public void testWSDL() throws Exception
19      {
20          AegisService hello = (AegisService) lookup( AegisService.ROLE, "Book" );
21  
22          AegisWSDL wsdl = (AegisWSDL) hello.getWSDL();
23          assertNotNull( wsdl );
24          
25          Document doc = wsdl.getDocument();
26          assertNotNull( doc );
27          
28          XMLWriter writer = new XMLWriter( OutputFormat.createPrettyPrint() );
29          writer.setOutputStream( System.out );
30          writer.write( wsdl.getDocument() );
31          
32          addNamespace("book", "http://xfire.codehaus.org/book");
33          addNamespace( "wsdl", WSDL.WSDL11_NS );
34          addNamespace( "xsd", SOAPConstants.XSD );
35  
36          // Types
37          assertValid( "/wsdl:definitions/wsdl:types", doc );
38          assertValid( "/wsdl:definitions/wsdl:types/xsd:schema", doc );
39          assertValid( "/wsdl:definitions/wsdl:types/xsd:schema[@targetNamespace='http://xfire.codehaus.org/book']", doc );
40          assertValid( "//xsd:schema/xsd:element[@name='FindBook']", doc );
41          assertValid( "//xsd:schema/xsd:element[@name='FindBookResponse']", doc );
42          assertValid( "//xsd:schema/xsd:element[@name='FindBook']/xsd:complexType/xsd:sequence/xsd:element[@name='isbn'][@type=\"xsd:string\"]", doc );
43          assertValid( "//xsd:schema/xsd:element[@name='Search']", doc );
44          assertValid( "//xsd:schema/xsd:element[@name='SearchResponse']", doc );
45          assertValid( "//xsd:schema/xsd:element[@name='Search']/xsd:complexType/xsd:sequence/xsd:element[@name='keyword'][@type=\"xsd:string\"]", doc );
46          assertValid( "//xsd:schema/xsd:element[@name='Book']", doc );
47          assertValid( "//xsd:schema/xsd:element[@name='BookArray']", doc );
48          assertValid( "//xsd:element[@name='Book']/xsd:complexType/xsd:sequence/xsd:element[@name='author'][@type='xsd:string']", doc );
49          assertValid( "//xsd:element[@name='Book']/xsd:complexType/xsd:sequence/xsd:element[@name='title'][@type='xsd:string']", doc );
50          assertValid( "//xsd:element[@name='Book']/xsd:complexType/xsd:sequence/xsd:element[@name='isbn'][@type='xsd:string']", doc );
51          assertValid( "//xsd:element[@name='BookArray']/xsd:complexType/xsd:sequence/xsd:element[@ref='tns:Book']", doc );
52          
53          // messages
54          assertValid( "//wsdl:message[@name='FindBookRequest']/wsdl:part[@element='tns:FindBook']", doc );
55          assertValid( "//wsdl:message[@name='FindBookResponse']/wsdl:part[@element='tns:FindBookResponse']", doc );
56          assertValid( "//wsdl:message[@name='SearchRequest']/wsdl:part[@element='tns:Search']", doc );
57          assertValid( "//wsdl:message[@name='SearchResponse']/wsdl:part[@element='tns:SearchResponse']", doc );
58          
59          // Abstract interface
60          assertValid( "//wsdl:portType[@name='BookPortType']", doc );
61          assertValid( "//wsdl:portType[@name='BookPortType']/wsdl:operation[@name='FindBook']", doc );
62          assertValid( "//wsdl:portType[@name='BookPortType']/wsdl:operation[@name='Search']", doc );
63          
64      }
65  }