1   package org.codehaus.xfire.message.wrapped;
2   
3   import javax.xml.namespace.QName;
4   
5   import org.codehaus.xfire.service.object.ObjectService;
6   import org.codehaus.xfire.services.BeanService;
7   import org.codehaus.xfire.services.SimpleBean;
8   import org.codehaus.xfire.soap.SoapConstants;
9   import org.codehaus.xfire.test.AbstractXFireTypeTest;
10  import org.codehaus.xfire.type.TypeMappingRegistry;
11  import org.codehaus.xfire.type.basic.BeanType;
12  import org.codehaus.xfire.wsdl.WSDLWriter;
13  import org.dom4j.Document;
14  
15  
16  /***
17   * @author <a href="mailto:peter.royal@pobox.com">peter royal</a>
18   */
19  public class WrappedCustomTypeTest extends AbstractXFireTypeTest
20  {
21      ObjectService service;
22      
23      public void setUp() throws Exception
24      {
25          super.setUp();
26  
27          service = (ObjectService) getServiceBuilder().create(BeanService.class);
28          
29          registerSimpleBeanType( getRegistry() );
30      }
31  
32      private void registerSimpleBeanType( final TypeMappingRegistry tmr )
33      {
34          service.getTypeMapping().register( SimpleBean.class,
35                                             new QName( "urn:ReallyNotSoSimpleBean", "SimpleBean" ),
36                                             new BeanType() );
37      }
38  
39      public void testBeanService() throws Exception
40      {
41          final Document response =
42              invokeService( "BeanService",
43                             "/org/codehaus/xfire/message/wrapped/WrappedCustomTypeTest.bean11.xml" );
44  
45          printNode( response );
46  
47          addNamespace( "sb", "http://services.xfire.codehaus.org" );
48          assertValid( "/s:Envelope/s:Body/sb:getSubmitBeanResponse", response );
49          assertValid( "//sb:getSubmitBeanResponse/sb:out", response );
50          assertValid( "//sb:getSubmitBeanResponse/sb:out[text()=\"blah\"]", response );
51      }
52  
53      public void testBeanServiceWSDL() throws Exception
54      {
55          final Document doc = getWSDLDocument( "BeanService" );
56  
57          addNamespace( "wsdl", WSDLWriter.WSDL11_NS );
58          addNamespace( "wsdlsoap", WSDLWriter.WSDL11_SOAP_NS );
59          addNamespace( "xsd", SoapConstants.XSD );
60  
61          assertValid( "/wsdl:definitions/wsdl:types", doc );
62          assertValid( "/wsdl:definitions/wsdl:types/xsd:schema", doc );
63          assertValid( "/wsdl:definitions/wsdl:types/xsd:schema[@targetNamespace='http://services.xfire.codehaus.org']",
64                       doc );
65          assertValid(
66              "//xsd:schema[@targetNamespace='http://services.xfire.codehaus.org']/xsd:element[@name='getSubmitBean']",
67              doc );
68          assertValid(
69              "//xsd:element[@name='getSubmitBean']/xsd:complexType/xsd:sequence/xsd:element[@name='in1'][@type='xsd:string']",
70              doc );
71          assertValid(
72              "//xsd:element[@name='getSubmitBean']/xsd:complexType/xsd:sequence/xsd:element[@name='in0'][@type='ns1:SimpleBean']",
73              doc );
74  
75          assertValid( "/wsdl:definitions/wsdl:types" +
76                       "/xsd:schema[@targetNamespace='urn:ReallyNotSoSimpleBean']" +
77                       "/xsd:complexType", doc );
78          assertValid( "/wsdl:definitions/wsdl:types" +
79                       "/xsd:schema[@targetNamespace='urn:ReallyNotSoSimpleBean']" +
80                       "/xsd:complexType[@name=\"SimpleBean\"]", doc );
81          assertValid( "/wsdl:definitions/wsdl:types" +
82                       "/xsd:schema[@targetNamespace='urn:ReallyNotSoSimpleBean']" +
83                       "/xsd:complexType[@name=\"SimpleBean\"]/xsd:sequence/xsd:element[@name=\"bleh\"]", doc );
84          assertValid( "/wsdl:definitions/wsdl:types" +
85                       "/xsd:schema[@targetNamespace='urn:ReallyNotSoSimpleBean']" +
86                       "/xsd:complexType[@name=\"SimpleBean\"]/xsd:sequence/xsd:element[@name=\"howdy\"]", doc );
87          assertValid( "/wsdl:definitions/wsdl:types" +
88                       "/xsd:schema[@targetNamespace='urn:ReallyNotSoSimpleBean']" +
89                       "/xsd:complexType[@name=\"SimpleBean\"]/xsd:sequence/xsd:element[@type=\"xsd:string\"]", doc );
90  
91          assertValid(
92              "/wsdl:definitions/wsdl:service/wsdl:port/wsdlsoap:address[@location='http://localhost/services/BeanService']",
93              doc );
94      }
95  }