/** * 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.java2wsdl.processor.internal.jaxws; import java.io.File; import java.net.URI; import java.nio.file.Files; import java.util.Collection; import javax.xml.namespace.QName; import org.apache.cxf.Bus; import org.apache.cxf.BusFactory; import org.apache.cxf.common.jaxb.JAXBContextCache; import org.apache.cxf.jaxws.JaxwsServiceBuilder; import org.apache.cxf.service.model.BindingInfo; import org.apache.cxf.service.model.ServiceInfo; import org.apache.cxf.tools.common.ProcessorTestBase; import org.apache.cxf.tools.common.ToolContext; import org.apache.cxf.tools.java2wsdl.generator.wsdl11.WSDL11Generator; import org.apache.cxf.tools.util.AnnotationUtil; import org.apache.cxf.transport.DestinationFactoryManager; import org.apache.hello_world_rpclit.javato.GreeterRPCLit; import org.junit.After; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; public class JaxwsServiceBuilderTest extends ProcessorTestBase { JaxwsServiceBuilder builder; WSDL11Generator generator = new WSDL11Generator(); @Before public void setUp() throws Exception { JAXBContextCache.clearCaches(); builder = new JaxwsServiceBuilder(); builder.setBus(BusFactory.getDefaultBus()); generator.setBus(builder.getBus()); generator.setToolContext(new ToolContext()); Bus b = builder.getBus(); assertNotNull(b.getExtension(DestinationFactoryManager.class) .getDestinationFactory("http://schemas.xmlsoap.org/soap/http")); } @After public void tearDown() { super.tearDown(); } @Test public void testDocLitWrappedWithWrapperClass() throws Exception { if (isMOXy()) { //This test is testing to see if the lack of namespace declarations on the wrapper classes //can still map into the targetnamespace of the service. MOXy always looks for the //namespace on the annotation or in package-info and thus cannot support this. This //is fairly bad practice anyway. return; } builder.setServiceClass(org.apache.cxf.tools.fortest.withannotation.doc.StockWrapped.class); ServiceInfo service = builder.createService(); generator.setServiceModel(service); File output = getOutputFile("doc_lit_wrapped_with_wrapperclass.wsdl"); assertNotNull(output); generator.generate(output); assertTrue(output.exists()); URI expectedFile = this.getClass() .getResource("expected/expected_doc_lit_wrapped_with_wrapperclass.wsdl").toURI(); assertWsdlEquals(new File(expectedFile), output); } @Test public void testDocLitWrappedWithoutWrapperClass() throws Exception { builder.setServiceClass(org.apache.cxf.tools.fortest.withannotation.doc.HelloWrapped.class); ServiceInfo service = builder.createService(); generator.setServiceModel(service); File output = getOutputFile("doc_lit_wrapped_no_wrapperclass.wsdl"); assertNotNull(output); generator.generate(output); assertTrue(output.exists()); URI expectedFile = this.getClass() .getResource("expected/expected_doc_lit_wrapped_no_wrapperclass.wsdl").toURI(); assertWsdlEquals(new File(expectedFile), output); } // REVISIT two fault elements in schema @Test public void testDocLitWrapped() throws Exception { builder.setServiceClass(org.apache.hello_world_doc_lit.Greeter.class); ServiceInfo service = builder.createService(); generator.setServiceModel(service); File output = getOutputFile("hello_doc_lit.wsdl"); assertNotNull(output); generator.generate(output); assertTrue(output.exists()); URI expectedFile = this.getClass().getResource("expected/expected_hello_world_doc_lit.wsdl") .toURI(); assertWsdlEquals(new File(expectedFile), output); //assertFileEquals(expectedFile, output.getAbsolutePath()); } @Test public void testDocWrappedWithLocalName() throws Exception { builder.setServiceClass(org.apache.cxf.tools.fortest.withannotation.doc.Stock.class); ServiceInfo service = builder.createService(); generator.setServiceModel(service); File output = getOutputFile("doc_lit_wrapped_localName.wsdl"); assertNotNull(output); generator.generate(output); assertTrue(output.exists()); URI expectedFile = this.getClass().getResource("expected/expected_doc_lit_wrapped_localName.wsdl") .toURI(); assertWsdlEquals(new File(expectedFile), output); } @Test public void testDocWrappedNoWebParam() throws Exception { builder.setServiceClass(org.apache.cxf.tools.fortest.withannotation.doc.HelloWithNoWebParam.class); ServiceInfo service = builder.createService(); generator.setServiceModel(service); File output = getOutputFile("doc_lit_wrapped_no_webparam.wsdl"); assertNotNull(output); generator.generate(output); assertTrue(output.exists()); URI expectedFile = this.getClass() .getResource("expected/expected_doc_lit_wrapped_no_webparam.wsdl").toURI(); assertWsdlEquals(new File(expectedFile), output); } @Test public void testHolder() throws Exception { builder.setServiceClass(org.apache.cxf.tools.fortest.holder.HolderService.class); ServiceInfo service = builder.createService(); generator.setServiceModel(service); File output = getOutputFile("holder.wsdl"); assertNotNull(output); generator.generate(output); assertTrue(output.exists()); URI expectedFile = this.getClass().getResource("expected/expected_holder.wsdl").toURI(); assertWsdlEquals(new File(expectedFile), output); } @Test public void testAsync() throws Exception { builder.setServiceClass(org.apache.hello_world_async_soap_http.GreeterAsync.class); ServiceInfo service = builder.createService(); generator.setServiceModel(service); File output = getOutputFile("hello_async.wsdl"); assertNotNull(output); generator.generate(output); assertTrue(output.exists()); URI expectedFile = this.getClass().getResource("expected/expected_hello_world_async.wsdl") .toURI(); assertWsdlEquals(new File(expectedFile), output); } @Test public void testRPCLit() throws Exception { builder.setServiceClass(GreeterRPCLit.class); builder.setAddress("http://localhost"); ServiceInfo service = builder.createService(); generator.setServiceModel(service); File file = getOutputFile("rpc_lit.wsdl"); assertNotNull(output); generator.generate(file); assertTrue(output.exists()); URI expectedFile = this.getClass().getResource("expected/expected_rpc_lit.wsdl").toURI(); assertWsdlEquals(new File(expectedFile), file); } // TODO assertFileEquals @Test public void testDocWrapparBare() throws Exception { builder.setServiceClass(org.apache.hello_world_doc_wrapped_bare.Greeter.class); builder.setAddress("http://localhost"); ServiceInfo service = builder.createService(); generator.setServiceModel(service); File file = getOutputFile("doc_wrapped_bare.wsdl"); assertNotNull(output); generator.generate(file); assertTrue(output.exists()); } // TODO assertFileEquals @Test public void testRPCWithoutParentBindingAnnotation() throws Exception { builder.setServiceClass(org.apache.cxf.tools.fortest.withannotation.rpc.Hello.class); ServiceInfo service = builder.createService(); generator.setServiceModel(service); File file = getOutputFile("rpc_lit_service_no_anno.wsdl"); assertNotNull(output); generator.generate(file); assertTrue(output.exists()); } // TODO: SOAPBinding can not on method with RPC style @Test @Ignore("RuntimeException: org.apache.cxf.interceptor.Fault: Method [sayHi] pro") public void testSOAPBindingRPCOnMethod() throws Exception { builder.setServiceClass(org.apache.cxf.tools.fortest.withannotation.rpc.HelloWrongAnnotation.class); ServiceInfo service = builder.createService(); generator.setServiceModel(service); File file = getOutputFile("rpc_on_method.wsdl"); assertNotNull(output); generator.generate(file); assertTrue(output.exists()); } @Test public void testSoapHeader() throws Exception { builder.setServiceClass(org.apache.samples.headers.HeaderTester.class); ServiceInfo service = builder.createService(); generator.setServiceModel(service); File file = getOutputFile("soap_header.wsdl"); assertNotNull(file); generator.generate(file); assertTrue(file.exists()); URI expectedFile = this.getClass().getResource("expected/soap_header.wsdl").toURI(); assertWsdlEquals(new File(expectedFile), file); } @Test public void testMultipleHeaders() throws Exception { builder.setServiceClass(org.apache.cxf.tools.fortest.headers.SomeHeaders.class); ServiceInfo service = builder.createService(); generator.setServiceModel(service); File output = getOutputFile("someheaders.wsdl"); assertNotNull(output); generator.generate(output); assertTrue(output.exists()); URI expectedFile = this.getClass().getResource("expected/expected_someheaders.wsdl").toURI(); assertWsdlEquals(new File(expectedFile), output); } // TODO: assertFileEquals @Test public void testCXF188() throws Exception { Class<?> clz = AnnotationUtil.loadClass("org.apache.cxf.tools.fortest.cxf188.Demo", getClass() .getClassLoader()); builder.setServiceClass(clz); ServiceInfo service = builder.createService(); generator.setServiceModel(service); File file = getOutputFile("cxf188.wsdl"); assertNotNull(output); generator.generate(file); assertTrue(output.exists()); } @Test public void testRpcLitNoSEI() throws Exception { builder.setServiceClass(org.apache.cxf.tools.fortest.withannotation.rpc.EchoImpl.class); ServiceInfo service = builder.createService(); assertNotNull(service); assertEquals(new QName("http://cxf.apache.org/echotest", "EchoService"), service.getName()); assertEquals(new QName("http://cxf.apache.org/echotest", "Echo"), service.getInterface().getName()); generator.setServiceModel(service); File output = getOutputFile("rpclist_no_sei.wsdl"); assertNotNull(output); generator.generate(output); assertTrue(output.exists()); String s = new String(Files.readAllBytes(output.toPath())); assertTrue(s.indexOf("EchoPort") != -1); URI expectedFile = this.getClass() .getResource("expected/expected_rpclist_no_sei.wsdl").toURI(); assertWsdlEquals(new File(expectedFile), output); } @Test public void testCXF669() throws Exception { boolean oldSetting = generator.allowImports(); generator.setAllowImports(true); builder.setServiceClass(org.apache.cxf.tools.fortest.cxf669.HelloImpl.class); ServiceInfo service = builder.createService(); assertNotNull(service); assertEquals(new QName("http://foo.com/HelloWorldService", "HelloService"), service.getName()); assertEquals(new QName("http://foo.com/HelloWorld", "HelloWorld"), service.getInterface().getName()); assertEquals(1, service.getSchemas().size()); assertEquals("http://foo.com/HelloWorld", service.getSchemas().iterator().next().getNamespaceURI()); Collection<BindingInfo> bindings = service.getBindings(); assertEquals(1, bindings.size()); assertEquals(new QName("http://foo.com/HelloWorldService", "HelloServiceSoapBinding"), bindings.iterator().next().getName()); generator.setServiceModel(service); File wsdl = getOutputFile("HelloService.wsdl"); assertNotNull(wsdl); generator.generate(wsdl); assertTrue(wsdl.exists()); File logical = new File(output, "HelloWorld.wsdl"); assertTrue(logical.exists()); File schema = new File(output, "HelloService_schema1.xsd"); assertTrue(schema.exists()); String s = new String(Files.readAllBytes(wsdl.toPath())); assertTrue(s.indexOf("<wsdl:import namespace=\"http://foo.com/HelloWorld\" " + "location=\"HelloWorld.wsdl\">") != -1); assertTrue(s.indexOf("targetNamespace=\"http://foo.com/HelloWorldService\"") != -1); s = new String(Files.readAllBytes(logical.toPath())); assertTrue(s.indexOf("<import namespace=\"http://foo.com/HelloWorld\"") != -1); assertTrue(s.indexOf("schemaLocation=\"HelloService_schema1.xsd\"/>") != -1); assertTrue(s.indexOf("targetNamespace=\"http://foo.com/HelloWorld\"") != -1); s = new String(Files.readAllBytes(schema.toPath())); assertTrue(s.indexOf("targetNamespace=\"http://foo.com/HelloWorld\"") != -1); generator.setAllowImports(oldSetting); } private File getOutputFile(String fileName) { return new File(output, fileName); } }