1   package org.codehaus.xfire.message.rpcenc;
2   
3   import org.codehaus.xfire.service.object.DefaultObjectService;
4   import org.codehaus.xfire.services.Echo;
5   import org.codehaus.xfire.soap.Soap11;
6   import org.codehaus.xfire.soap.SoapConstants;
7   import org.codehaus.xfire.test.AbstractXFireTypeTest;
8   import org.codehaus.xfire.type.Type;
9   import org.codehaus.xfire.wsdl.WSDLWriter;
10  import org.dom4j.Document;
11  
12  /***
13   * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
14   * @since Feb 21, 2004
15   */
16  public class RPCEncodedTest
17      extends AbstractXFireTypeTest
18  {
19      private DefaultObjectService service;
20      
21      public void setUp() throws Exception
22      {
23          super.setUp();
24          
25          service = (DefaultObjectService) 
26              getServiceBuilder().create(Echo.class,
27                                         "Echo",
28                                         "urn:Echo",
29                                         Soap11.getInstance(),
30                                         SoapConstants.STYLE_RPC,
31                                         SoapConstants.USE_ENCODED);
32      }
33      
34      public void testBeanService() throws Exception
35      {
36          Type type = service.getTypeMapping().getType(String.class);
37  
38          Document response = 
39              invokeService("Echo", "/org/codehaus/xfire/message/rpcenc/echo11.xml");
40  
41          addNamespace("echo", "urn:Echo");
42          assertValid("/s:Envelope/s:Body/echo:echoResponse", response);
43          assertValid("//echo:echoResponse/echo:out", response);
44      }
45  
46      public void testEchoWSDL() throws Exception
47      {
48          Document doc = getWSDLDocument("Echo");
49  
50          addNamespace( "wsdl", WSDLWriter.WSDL11_NS );
51          addNamespace( "wsdlsoap", WSDLWriter.WSDL11_SOAP_NS );
52          addNamespace( "xsd", SoapConstants.XSD );
53  
54          assertValid( "/wsdl:definitions/wsdl:message[@name='echoRequest']", doc );
55          assertValid( "/wsdl:definitions/wsdl:message[@name='echoRequest']" +
56                       "/wsdl:part[@element='xsd:string'][@name='in0']", doc );
57          assertValid( "/wsdl:definitions/wsdl:message[@name='echoResponse']", doc );
58          assertValid( "/wsdl:definitions/wsdl:message[@name='echoResponse']" +
59                       "/wsdl:part[@element='xsd:string'][@name='out']", doc );
60          assertValid( "//wsdl:binding/wsdl:operation[@name='echo']", doc );
61          
62          assertValid( "//wsdl:binding/wsdl:operation/wsdl:input[@name='echoRequest']" +
63                       "/wsdlsoap:body", doc );
64          assertValid( "//wsdl:binding/wsdl:operation/wsdl:input[@name='echoRequest']" +
65                       "/wsdlsoap:body[@encodingStyle='" + 
66                       Soap11.getInstance().getSoapEncodingStyle() + "']", doc );
67          assertValid( "//wsdl:binding/wsdl:operation/wsdl:input[@name='echoRequest']" +
68                       "/wsdlsoap:body[@use='encoded']", doc );
69          assertValid( "//wsdl:binding/wsdl:operation/wsdl:input[@name='echoRequest']" +
70                       "/wsdlsoap:body[@namespace='" +
71                       service.getDefaultNamespace() + "']", doc );
72          
73          assertValid( "//wsdl:binding/wsdl:operation/wsdl:output[@name='echoResponse']" +
74                       "/wsdlsoap:body", doc );
75          assertValid( "//wsdl:binding/wsdl:operation/wsdl:output[@name='echoResponse']" +
76                       "/wsdlsoap:body[@encodingStyle='" + 
77                       Soap11.getInstance().getSoapEncodingStyle() + "']", doc );
78          assertValid( "//wsdl:binding/wsdl:operation/wsdl:output[@name='echoResponse']" +
79                       "/wsdlsoap:body[@use='encoded']", doc );
80          assertValid( "//wsdl:binding/wsdl:operation/wsdl:output[@name='echoResponse']" +
81                       "/wsdlsoap:body[@namespace='" +
82                       service.getDefaultNamespace() + "']", doc );
83          
84          assertValid( "/wsdl:definitions/wsdl:service/wsdl:port/wsdlsoap:address[@location='http://localhost/services/Echo']", doc );
85      }
86  }