1   /*******************************************************************************
2    *  Copyright (c) 2005, 2006, 2007 Imola Informatica.
3    *  All rights reserved. This program and the accompanying materials
4    *  are made available under the terms of the LGPL License v2.1
5    *  which accompanies this distribution, and is available at
6    *  http://www.gnu.org/licenses/lgpl.html
7    ******************************************************************************/
8   package it.imolinfo.jbi4cics.test.jbi;
9   
10  import it.imolinfo.jbi4cics.jbi.wsdl.Jbi4CicsAddress;
11  import it.imolinfo.jbi4cics.jbi.wsdl.Jbi4CicsBinding;
12  import it.imolinfo.jbi4cics.jbi.wsdl.Jbi4CicsExtension;
13  
14  import java.io.File;
15  import java.io.FileWriter;
16  import java.io.StringWriter;
17  
18  import javax.wsdl.Binding;
19  import javax.wsdl.BindingOperation;
20  import javax.wsdl.Definition;
21  import javax.wsdl.Operation;
22  import javax.wsdl.Port;
23  import javax.wsdl.PortType;
24  import javax.wsdl.Service;
25  import javax.wsdl.WSDLException;
26  import javax.wsdl.extensions.ExtensionRegistry;
27  import javax.wsdl.factory.WSDLFactory;
28  import javax.wsdl.xml.WSDLReader;
29  import javax.wsdl.xml.WSDLWriter;
30  import javax.xml.namespace.QName;
31  
32  import junit.framework.TestCase;
33  
34  /**
35   * Test the Wsdl extension serializer
36   * @author amedeocannone, marcopiraccini
37   */
38  public class WsdlProducerTest extends TestCase {
39          
40      
41      public static final String wsdlDir = "src/test/etc/wsdl";
42      
43      public static final String rootPath = "target/test-wsdl-ext";
44      
45      public static final String serviceUnitName = "testServiceUnit";      
46      
47      public WSDLFactory factory = null;
48      
49      public WSDLReader reader = null;
50      
51      public WSDLWriter writer = null;
52      
53      public ExtensionRegistry registry;
54      
55      String tns = "it.imolinfo.Jbi4Cics.test.webservice.generator";
56      
57      public WsdlProducerTest() {}
58  
59      public WsdlProducerTest(String name) {
60          super(name);
61          File dir = new File(rootPath);
62          dir.mkdir();
63      }
64          
65      
66      public void setUp() {
67          try {
68              factory = WSDLFactory.newInstance();
69              reader = factory.newWSDLReader();
70              writer = factory.newWSDLWriter();
71              registry = factory.newPopulatedExtensionRegistry();        
72              WSDLReader reader = factory.newWSDLReader();
73              Jbi4CicsExtension.register(registry);      
74              reader.setExtensionRegistry(registry);
75              
76          } catch (WSDLException e) {
77              // TODO Auto-generated catch block
78              e.printStackTrace();
79          }
80      }
81      
82      public void testWSDLSerializer() {          
83  
84          try {
85              Definition def = reader.readWSDL(wsdlDir,"EchoService.wsdl");            
86              
87              // Sets the registry
88              def.setExtensionRegistry(registry);
89             
90              // Adds the namespace
91              def.addNamespace("imolacics", Jbi4CicsExtension.NS_URI_JBI4CICS);
92              
93              // Adds a new Service with my estension            
94              Service myService = def.createService();
95              myService.setQName(new QName(tns, "MyService"));
96              def.addService(myService);
97              
98              // Adds the port
99              Port myPort = def.createPort();
100             myPort.setName("myPort");
101             myService.addPort(myPort);
102             
103             // Adds the extended address
104             Jbi4CicsAddress log4jAddress = new Jbi4CicsAddress();
105             log4jAddress.setElementType(
106                     Jbi4CicsExtension.Q_ELEM_JBI4CICS_ADDRESS);               
107             log4jAddress.setUsername("imola");
108             log4jAddress.setPassword("imola");          
109             log4jAddress.setConnectionType("CICS");
110             log4jAddress.setJNDIConnectionName("");
111             log4jAddress.setProgramName("imola");
112             log4jAddress.setTransactionName("imola");
113             log4jAddress.setTpn(new Boolean("false"));
114             myPort.addExtensibilityElement(log4jAddress);                  
115             
116             // Adds the binding (using an exixtent porttype)
117             PortType portType = def.getPortType(
118                     new QName(tns,"EchoServicePortType"));
119             Binding myBinding = def.createBinding();
120             myBinding.setUndefined(false);
121             myBinding.setQName(new QName(tns, "MyBinding"));
122             myBinding.setPortType(portType);              
123             myPort.setBinding(myBinding); 
124             def.addBinding(myBinding);            
125             BindingOperation myOp = def.createBindingOperation();                       
126             myOp.setName("myOp");            
127             
128             myOp.setOperation((Operation)portType.getOperations().get(0));
129             myBinding.addBindingOperation(myOp);
130 
131             // Adds the extended binding
132             Jbi4CicsBinding log4jBinding = new Jbi4CicsBinding();            
133             log4jBinding.setElementType(
134                     Jbi4CicsExtension.Q_ELEM_JBI4CICS_BINDING);            
135             
136             // Attributes
137             log4jBinding.setServicePackageName(
138                     "it.imolinfo.jbi4cics.test.nested");
139             log4jBinding.setCodePage("CP037");            
140             
141             // copy cobol
142             String copyCobol = 
143                           "02 CA-RETCODE1 PIC XXXXX        ." + "/n"
144 			+ "02 CA-RETCODE2                  ." + "/n"
145 			+ "03 CA-RETCODE3 PIC XXXXX        ." + "/n"
146 			+ "02 CA-RETCODE4 PIC XXXXX        .";
147             log4jBinding.setCopyCobol(copyCobol);
148                       
149             myBinding.addExtensibilityElement(log4jBinding);  
150                                  
151             String wsdlFileName = rootPath + File.separator 
152                     + "TestWSDLwriter.wsdl";            
153             File wsdlFile = new File(wsdlFileName);
154             FileWriter fileWriter = new FileWriter(wsdlFile);
155                                  
156             writer.writeWSDL(def, fileWriter);            
157             
158             // Reads the WSDL:            
159             reader.setExtensionRegistry(registry);
160             Definition def2 = reader.readWSDL(rootPath,"TestWSDLwriter.wsdl");
161             StringWriter strWriter = new StringWriter();   
162             writer.writeWSDL(def2, strWriter);
163             System.out.println(strWriter);            
164             //TODO Uncomment the following instruction 
165             //wsdlFile.delete();
166             
167             // Reads the extended elements;
168             Binding extBinding = def2.getBinding(new QName(tns, "MyBinding"));            
169             Jbi4CicsBinding readenJbi4CicsBinding = 
170                 (Jbi4CicsBinding) extBinding.getExtensibilityElements().get(0);
171             Service extService = def2.getService(new QName(tns, "MyService"));            
172             Port extPort = (Port)extService.getPort("myPort");                        
173             Jbi4CicsAddress readenJbi4CicsAddress = 
174                 (Jbi4CicsAddress) extPort.getExtensibilityElements().get(0);           
175             
176             // The extensibility element must be equals            
177             assertTrue("Cics binding assert failed",readenJbi4CicsBinding.equals(log4jBinding));
178             assertTrue("Cics address assert failed",readenJbi4CicsAddress.equals(log4jAddress));                                                
179             
180         } catch (Exception e) {
181             // TODO Auto-generated catch block
182             System.out.print(e.getMessage());            
183             e.printStackTrace();
184             fail(e.getMessage());
185         }
186     }    
187     
188     
189 
190 }