/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.cxf.tools.wsdlto.jaxws; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.lang.reflect.Method; import java.util.Arrays; import java.util.List; import com.sun.codemodel.CodeWriter; import org.apache.cxf.helpers.IOUtils; import org.apache.cxf.tools.common.ToolConstants; import org.apache.cxf.tools.common.ToolException; import org.apache.cxf.tools.wsdlto.AbstractCodeGenTest; import org.apache.cxf.wsdl11.WSDLRuntimeException; import org.junit.Test; public class CodeGenOptionTest extends AbstractCodeGenTest { @Test public void testFlagForGenStandAlone() throws Exception { env.put(ToolConstants.CFG_GEN_TYPES, ToolConstants.CFG_GEN_TYPES); env.put(ToolConstants.CFG_GEN_SEI, ToolConstants.CFG_GEN_SEI); env.put(ToolConstants.CFG_GEN_IMPL, ToolConstants.CFG_GEN_IMPL); env.put(ToolConstants.CFG_GEN_SERVICE, ToolConstants.CFG_GEN_SERVICE); env.put(ToolConstants.CFG_GEN_SERVER, ToolConstants.CFG_GEN_SERVER); env.put(ToolConstants.CFG_GEN_FAULT, ToolConstants.CFG_GEN_FAULT); env.put(ToolConstants.CFG_GEN_ANT, ToolConstants.CFG_GEN_ANT); env.put(ToolConstants.CFG_WSDLURL, getLocation("/wsdl2java_wsdl/hello_world.wsdl")); processor.setContext(env); processor.execute(); Class<?> greeterServer = classLoader .loadClass("org.apache.cxf.w2j.hello_world_soap_http.Greeter_SoapPort_Server"); assertNotNull("Server should be generated", greeterServer); } @Test public void testFlagForGenAdditional() throws Exception { env.put(ToolConstants.CFG_IMPL, ToolConstants.CFG_IMPL); env.put(ToolConstants.CFG_SERVER, ToolConstants.CFG_SERVER); env.put(ToolConstants.CFG_WSDLURL, getLocation("/wsdl2java_wsdl/hello_world.wsdl")); processor.setContext(env); processor.execute(); Class<?> greeterServer = classLoader .loadClass("org.apache.cxf.w2j.hello_world_soap_http.Greeter_SoapPort_Server"); assertNotNull("Server should be generated", greeterServer); } /** * Testing if the wsdlList option is used then all wsdls from a given file gets processed. */ @Test public void testWSDLListOptionMultipleWSDL() throws Exception { env.put(ToolConstants.CFG_ALL, ToolConstants.CFG_ALL); env.put(ToolConstants.CFG_WSDLLIST, ToolConstants.CFG_WSDLLIST); // Getting the full path of the wsdl String wsdl1 = getLocation("/wsdl2java_wsdl/hello_world.wsdl"); String wsdl2 = getLocation("/wsdl2java_wsdl/cardealer.wsdl"); doWSDLListOptionTest(null, Arrays.asList(wsdl1, wsdl2)); Class<?> greeterServer = classLoader .loadClass("org.apache.cxf.w2j.hello_world_soap_http.Greeter_SoapPort_Server"); assertNotNull("Server should be generated", greeterServer); Class<?> carDealerServer = classLoader .loadClass("type_substitution.server.CarDealer_CarDealerPort_Server"); assertNotNull("Server should be generated", carDealerServer); } /** * Testing if the wsdlList option is used and the file contains only one WSDL, then that WSDL is processed */ @Test public void testWSDLListOptionOneWSDL() throws Exception { env.put(ToolConstants.CFG_ALL, ToolConstants.CFG_ALL); env.put(ToolConstants.CFG_WSDLLIST, ToolConstants.CFG_WSDLLIST); // Getting the full path of the wsdl String wsdl1 = getLocation("/wsdl2java_wsdl/hello_world.wsdl"); doWSDLListOptionTest(null, Arrays.asList(wsdl1)); Class<?> greeterServer = classLoader .loadClass("org.apache.cxf.w2j.hello_world_soap_http.Greeter_SoapPort_Server"); assertNotNull("Server should be generated", greeterServer); } /** * Testing if the wsdlList option is used and the file contains an incorrect WSDL, then an exception is * thrown */ @Test public void testWSDLListOptionIncorrectWSDLUrl() throws Exception { env.put(ToolConstants.CFG_ALL, ToolConstants.CFG_ALL); env.put(ToolConstants.CFG_WSDLLIST, ToolConstants.CFG_WSDLLIST); // Getting the full path of the wsdl String wsdl1 = getLocation("/wsdl2java_wsdl/hello_world.wsdl"); try { doWSDLListOptionTest(null, Arrays.asList(wsdl1, "test")); } catch (WSDLRuntimeException e) { return; } fail(); } /** * Testing if the wsdlList option is used and a file that does not exist is specified, then an exception * occurs */ @Test public void testWSDLListOptionIncorrectFile() throws Exception { env.put(ToolConstants.CFG_ALL, ToolConstants.CFG_ALL); env.put(ToolConstants.CFG_WSDLLIST, ToolConstants.CFG_WSDLLIST); // Getting the full path of the wsdl String wsdl1 = getLocation("/wsdl2java_wsdl/hello_world.wsdl"); try { doWSDLListOptionTest("/Temp/temp.txt", Arrays.asList(wsdl1)); } catch (ToolException e) { return; } fail(); } /** * Performs the WSDLList option test for the specified list of parameters. * * @param wsdlURL The url of the wsdlList. Can be null. * @param wsdls * @throws IOException * @throws ToolException */ private void doWSDLListOptionTest(String wsdlURL, List<String> wsdls) throws IOException, ToolException { File file = null; if (wsdlURL == null) { // Creating a file containing a list of wsdls URLs in a temp folder file = tmpDir.newFile("wsdl_list.txt"); PrintWriter writer = new PrintWriter(new FileWriter(file)); for (String wsdl : wsdls) { writer.println(wsdl); } writer.close(); wsdlURL = file.getPath(); } env.put(ToolConstants.CFG_WSDLURL, wsdlURL); processor.setContext(env); try { processor.execute(); } finally { if (file != null) { file.delete(); } } } @Test public void testHelloWorldExternalBindingFile() throws Exception { env.put(ToolConstants.CFG_WSDLURL, getLocation("/wsdl2java_wsdl/hello_world_jaxws_base.wsdl")); env.put(ToolConstants.CFG_BINDING, getLocation("/wsdl2java_wsdl/hello_world_jaxws_binding.wsdl")); processor.setContext(env); processor.execute(); assertNotNull(output); File org = new File(output, "org"); assertTrue(org.exists()); File apache = new File(org, "apache"); assertTrue(apache.exists()); Class<?> clz = classLoader.loadClass("org.apache.cxf.w2j.hello_world_async_soap_http.GreeterAsync"); assertEquals(3, clz.getMethods().length); } @Test public void testGenFault() throws Exception { env.put(ToolConstants.CFG_WSDLURL, getLocation("/wsdl2java_wsdl/hello_world.wsdl")); env.remove(ToolConstants.CFG_COMPILE); env.remove(ToolConstants.CFG_IMPL); env.put(ToolConstants.CFG_GEN_FAULT, ToolConstants.CFG_GEN_FAULT); processor.setContext(env); processor.execute(); File file = new File(output, "org/apache/cxf/w2j/hello_world_soap_http"); assertEquals(2, file.list().length); } @Test public void testGetCatalog() throws Exception { env.put(ToolConstants.CFG_WSDLURL, getLocation("/wsdl2java_wsdl/test_catalog_replaceme.wsdl")); env.put(ToolConstants.CFG_CATALOG, getLocation("/wsdl2java_wsdl/test_catalog.xml")); env.put(ToolConstants.CFG_COMPILE, null); env.put(ToolConstants.CFG_CLASSDIR, null); processor.setContext(env); processor.execute(); } @Test public void testGetCatalogPublic() throws Exception { env.put(ToolConstants.CFG_WSDLURL, getLocation("/wsdl2java_wsdl/cxf1053/myservice.wsdl")); env.put(ToolConstants.CFG_CATALOG, getLocation("/wsdl2java_wsdl/cxf1053/catalog.xml")); env.put(ToolConstants.CFG_COMPILE, null); env.put(ToolConstants.CFG_CLASSDIR, null); processor.setContext(env); processor.execute(); } /** * Tests that, when 'mark-generated' option is set, @Generated annotations are inserted in all generated * java classes. */ @Test public void testMarkGeneratedOption() throws Exception { env.put(ToolConstants.CFG_WSDLURL, getLocation("/wsdl2java_wsdl/hello_world.wsdl")); env.put(ToolConstants.CFG_MARK_GENERATED, "true"); env.put(ToolConstants.CFG_COMPILE, null); env.put(ToolConstants.CFG_CLASSDIR, null); processor.setContext(env); processor.execute(); File dir = new File(output, "org"); assertTrue("org directory is not found", dir.exists()); dir = new File(dir, "apache"); assertTrue("apache directory is not found", dir.exists()); dir = new File(dir, "cxf"); assertTrue("cxf directory is not found", dir.exists()); dir = new File(dir, "w2j"); assertTrue("w2j directory is not found", dir.exists()); dir = new File(dir, "hello_world_soap_http"); assertTrue("hello_world_soap_http directory is not found", dir.exists()); File types = new File(dir, "types"); assertTrue("types directory is not found", dir.exists()); String str = IOUtils.readStringFromStream(new FileInputStream(new File(dir, "Greeter.java"))); assertEquals(7, countGeneratedAnnotations(str)); str = IOUtils.readStringFromStream(new FileInputStream(new File(types, "SayHi.java"))); assertEquals(1, countGeneratedAnnotations(str)); str = IOUtils.readStringFromStream(new FileInputStream(new File(types, "SayHiResponse.java"))); assertEquals(4, countGeneratedAnnotations(str)); } private int countGeneratedAnnotations(String str) { int count = 0; int idx = str.indexOf("@Generated"); while (idx != -1) { count++; idx = str.indexOf("@Generated", idx + 1); } return count; } @Test public void testResourceURLForWsdlLocation() throws Exception { env.put(ToolConstants.CFG_WSDLURL, getLocation("/wsdl2java_wsdl/hello_world.wsdl")); env.put(ToolConstants.CFG_WSDLLOCATION, "/wsdl2java_wsdl/hello_world.wsdl"); env.put(ToolConstants.CFG_COMPILE, null); env.put(ToolConstants.CFG_CLASSDIR, null); processor.setContext(env); processor.execute(); File dir = new File(output, "org"); assertTrue("org directory is not found", dir.exists()); dir = new File(dir, "apache"); assertTrue("apache directory is not found", dir.exists()); dir = new File(dir, "cxf"); assertTrue("cxf directory is not found", dir.exists()); dir = new File(dir, "w2j"); assertTrue("w2j directory is not found", dir.exists()); dir = new File(dir, "hello_world_soap_http"); assertTrue("hello_world_soap_http directory is not found", dir.exists()); String str = IOUtils.readStringFromStream(new FileInputStream(new File(dir, "SOAPService.java"))); assertTrue(str, str.contains("getResource")); } @Test public void testEncoding() throws Exception { try { CodeWriter.class.getDeclaredField("encoding"); } catch (Throwable t) { //version of jaxb that doesn't support this. We'll just not run the test. return; } env.put(ToolConstants.CFG_WSDLURL, getLocation("/wsdl2java_wsdl/hello_world_encoding.wsdl")); env.put(ToolConstants.CFG_WSDLLOCATION, "/wsdl2java_wsdl/hello_world_encoding.wsdl"); env.put(ToolConstants.CFG_ENCODING, "Cp1251"); processor.setContext(env); processor.execute(); File dir = new File(output, "org"); assertTrue("org directory is not found", dir.exists()); dir = new File(dir, "apache"); assertTrue("apache directory is not found", dir.exists()); dir = new File(dir, "cxf"); assertTrue("cxf directory is not found", dir.exists()); dir = new File(dir, "w2j"); assertTrue("w2j directory is not found", dir.exists()); dir = new File(dir, "hello_world_soap_http"); assertTrue("hello_world_soap_http directory is not found", dir.exists()); String str = IOUtils.readStringFromStream(new FileInputStream(new File(dir, "SOAPService.java"))); assertTrue(str, str.contains("getResource")); Class<?> clz = classLoader.loadClass("org.apache.cxf.w2j.hello_world_soap_http.Greeter"); for (Method m : clz.getMethods()) { String s = m.getName(); assertEquals(1039, s.charAt(2)); } } }