1   package org.codehaus.xfire.java.wrapped;
2   
3   import org.codehaus.xfire.SOAPConstants;
4   import org.codehaus.xfire.fault.SOAP11FaultHandler;
5   import org.codehaus.xfire.handler.SoapHandler;
6   import org.codehaus.xfire.java.AbstractJavaTest;
7   import org.codehaus.xfire.java.DefaultJavaService;
8   import org.codehaus.xfire.java.JavaServiceHandler;
9   import org.codehaus.xfire.java.ServiceHelper;
10  import org.codehaus.xfire.java.test.ArrayService;
11  import org.codehaus.xfire.java.test.BeanService;
12  import org.codehaus.xfire.java.wsdl.JavaWSDLBuilder;
13  import org.codehaus.xfire.wsdl.WSDL;
14  import org.dom4j.Document;
15  
16  
17  /***
18   * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
19   * @since Feb 21, 2004
20   */
21  public class WrappedAutoTypeTest
22      extends AbstractJavaTest
23  {
24      public void setUp() throws Exception
25      {
26          super.setUp();
27          ServiceHelper.createService(getXFire(), getRegistry(), BeanService.class);
28         
29          // register array service too
30          DefaultJavaService service = new DefaultJavaService();
31          service.setName("Array");
32          service.setDefaultNamespace("urn:Array");
33          service.setServiceClass(ArrayService.class.getName());
34          service.setSoapVersion(SOAPConstants.SOAP11_ENVELOPE_NS);
35          service.setStyle(SOAPConstants.STYLE_WRAPPED);
36          service.setUse(SOAPConstants.USE_LITERAL);
37          service.setFaultHandler(new SOAP11FaultHandler());
38          service.setWSDLBuilder(new JavaWSDLBuilder( getXFire().getTransportManager() ));
39          service.setAutoTyped(true);
40          
41          SoapHandler handler = new SoapHandler(new JavaServiceHandler());
42          service.setServiceHandler( handler );
43          
44          service.setTypeMappingRegistry(getRegistry());
45          
46          service.initialize();
47          
48          getServiceRegistry().register(service);
49      }
50      
51      public void testBeanService() throws Exception
52      {
53          Document response = 
54              invokeService("BeanService", 
55                            "/org/codehaus/xfire/java/wrapped/bean11.xml");
56  
57          addNamespace( "sb", "http://test.java.xfire.codehaus.org");
58          assertValid( "//sb:getSimpleBeanResponse", response );
59          assertValid( "//sb:getSimpleBeanResponse/sb:out", response );
60          assertValid( "//sb:getSimpleBeanResponse/sb:out/sb:howdy[text()=\"howdy\"]", response );
61          assertValid( "//sb:getSimpleBeanResponse/sb:out/sb:bleh[text()=\"bleh\"]", response );
62      }
63  
64      public void testBeanServiceWSDL() throws Exception
65      {
66          Document doc = getWSDLDocument("BeanService");
67          printNode(doc);
68          addNamespace( "wsdl", WSDL.WSDL11_NS );
69          addNamespace( "wsdlsoap", WSDL.WSDL11_SOAP_NS );
70          addNamespace( "xsd", SOAPConstants.XSD );
71  
72          assertValid( "/wsdl:definitions/wsdl:types", doc );
73          assertValid( "/wsdl:definitions/wsdl:types/xsd:schema", doc );
74          assertValid( "/wsdl:definitions/wsdl:types/xsd:schema[@targetNamespace='http://test.java.xfire.codehaus.org']", doc );
75          assertValid( "//xsd:schema[@targetNamespace='http://test.java.xfire.codehaus.org']/xsd:element[@name='getSubmitBean']", doc );
76          assertValid( "//xsd:element[@name='getSubmitBean']/xsd:complexType/xsd:sequence/xsd:element[@name='in1'][@type='xsd:string']", doc );
77          assertValid( "//xsd:element[@name='getSubmitBean']/xsd:complexType/xsd:sequence/xsd:element[@name='in0'][@type='tns:SimpleBean']", doc );
78          
79          assertValid( "/wsdl:definitions/wsdl:types" +
80                  "/xsd:schema[@targetNamespace='http://test.java.xfire.codehaus.org']" +
81                  "/xsd:complexType", doc );
82          assertValid( "/wsdl:definitions/wsdl:types" +
83                  "/xsd:schema[@targetNamespace='http://test.java.xfire.codehaus.org']" +
84                  "/xsd:complexType[@name=\"SimpleBean\"]", doc );
85          assertValid( "/wsdl:definitions/wsdl:types" +
86                  "/xsd:schema[@targetNamespace='http://test.java.xfire.codehaus.org']" +
87                  "/xsd:complexType[@name=\"SimpleBean\"]/xsd:sequence/xsd:element[@name=\"bleh\"]", doc );
88          assertValid( "/wsdl:definitions/wsdl:types" +
89                  "/xsd:schema[@targetNamespace='http://test.java.xfire.codehaus.org']" +
90                  "/xsd:complexType[@name=\"SimpleBean\"]/xsd:sequence/xsd:element[@name=\"howdy\"]", doc );
91          assertValid( "/wsdl:definitions/wsdl:types" +
92                  "/xsd:schema[@targetNamespace='http://test.java.xfire.codehaus.org']" +
93                  "/xsd:complexType[@name=\"SimpleBean\"]/xsd:sequence/xsd:element[@type=\"xsd:string\"]", doc );
94  
95          assertValid( "/wsdl:definitions/wsdl:service/wsdl:port/wsdlsoap:address[@location='http://localhost/services/BeanService']", doc );
96      }
97      
98      public void testArrayService() throws Exception
99      {
100         Document response = invokeService("Array", 
101                 "/org/codehaus/xfire/java/wrapped/SubmitStringArray11.xml");
102 
103         addNamespace( "a", "urn:Array");
104         addNamespace( "sb", "http://test.java.xfire.codehaus.org");
105         assertValid( "//a:SubmitStringArrayResponse", response );
106         assertValid( "//a:SubmitStringArrayResponse/a:out[text()='true']", response );
107     }
108 
109     public void testArrayServiceWSDL() throws Exception
110     {
111         Document doc = getWSDLDocument("Array");
112         
113         addNamespace( "wsdl", WSDL.WSDL11_NS );
114         addNamespace( "wsdlsoap", WSDL.WSDL11_SOAP_NS );
115         addNamespace( "xsd", SOAPConstants.XSD );
116 
117         assertValid( "/wsdl:definitions/wsdl:types", doc );
118         assertValid( "/wsdl:definitions/wsdl:types/xsd:schema", doc );
119         assertValid( "/wsdl:definitions/wsdl:types/xsd:schema[@targetNamespace='urn:Array']", doc );
120         assertValid( "//xsd:schema[@targetNamespace='urn:Array']/xsd:element[@name='SubmitBeanArray']", doc );
121         assertValid( "//xsd:element[@name='SubmitStringArray']/xsd:complexType/xsd:sequence/xsd:element[@name='in0'][@type='tns:ArrayOfString']", doc );
122         assertValid( "//xsd:element[@name='SubmitBeanArray']/xsd:complexType/xsd:sequence/xsd:element[@name='in0'][@type='ns1:ArrayOfSimpleBean']", doc );
123     }
124 }