/** * 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.validator.internal; import java.util.HashSet; import java.util.Set; import javax.wsdl.Definition; import org.apache.cxf.Bus; import org.apache.cxf.BusFactory; import org.apache.cxf.common.i18n.Message; import org.apache.cxf.tools.validator.internal.model.XNode; import org.apache.cxf.wsdl.WSDLManager; import org.junit.Assert; import org.junit.Test; public class WSDLRefValidatorTest extends Assert { private Definition getWSDL(String wsdl) throws Exception { Bus b = BusFactory.getDefaultBus(); return b.getExtension(WSDLManager.class).getDefinition(wsdl); } @Test public void testNoService() throws Exception { String wsdl = getClass().getResource("resources/b.wsdl").toURI().toString(); WSDLRefValidator validator = new WSDLRefValidator(getWSDL(wsdl), null); assertFalse(validator.isValid()); ValidationResult results = validator.getValidationResults(); assertEquals(0, results.getWarnings().size()); } @Test public void testWSDLImport1() throws Exception { String wsdl = getClass().getResource("resources/a.wsdl").toURI().toString(); WSDLRefValidator validator = new WSDLRefValidator(getWSDL(wsdl), null); validator.isValid(); ValidationResult results = validator.getValidationResults(); assertEquals(2, results.getErrors().size()); String t = results.getErrors().pop(); String text = "{http://apache.org/hello_world/messages}[portType:GreeterA][operation:sayHi]"; Set<String> possibles = new HashSet<>(); //woodstox possibles.add(new Message("FAILED_AT_POINT", WSDLRefValidator.LOG, 27, 2, new java.net.URI(wsdl).toURL(), text).toString()); //Sun java6 stax parser possibles.add(new Message("FAILED_AT_POINT", WSDLRefValidator.LOG, 27, 31, new java.net.URI(wsdl).toURL(), text).toString()); //sjsxp possibles.add(new Message("FAILED_AT_POINT", WSDLRefValidator.LOG, -1, -1, new java.net.URI(wsdl).toURL(), text).toString()); assertTrue(possibles.contains(t)); } @Test public void testWSDLImport2() throws Exception { String wsdl = getClass().getResource("resources/physicalpt.wsdl").toURI().toString(); WSDLRefValidator validator = new WSDLRefValidator(getWSDL(wsdl), null); assertTrue(validator.isValid()); String expected = "/wsdl:definitions[@targetNamespace='http://schemas.apache.org/yoko/idl/OptionsPT']" + "/wsdl:portType[@name='foo.bar']"; Set<String> xpath = new HashSet<>(); for (XNode node : validator.vNodes) { xpath.add(node.toString()); } assertTrue(xpath.contains(expected)); } @Test public void testNoTypeRef() throws Exception { String wsdl = getClass().getResource("resources/NoTypeRef.wsdl").toURI().toString(); WSDLRefValidator validator = new WSDLRefValidator(getWSDL(wsdl), null); assertFalse(validator.isValid()); assertEquals(3, validator.getValidationResults().getErrors().size()); String expected = "Part <header_info> in Message " + "<{http://apache.org/samples/headers}inHeaderRequest>" + " referenced Type <{http://apache.org/samples/headers}SOAPHeaderInfo> " + "can not be found in the schemas"; String t = null; while (!validator.getValidationResults().getErrors().empty()) { t = validator.getValidationResults().getErrors().pop(); if (expected.equals(t)) { break; } } assertEquals(expected, t); } @Test public void testNoBindingWSDL() throws Exception { String wsdl = getClass().getResource("resources/nobinding.wsdl").toURI().toString(); WSDLRefValidator validator = new WSDLRefValidator(getWSDL(wsdl), null); validator.isValid(); ValidationResult results = validator.getValidationResults(); assertEquals(0, results.getWarnings().size()); WSDLRefValidator v = new WSDLRefValidator(getWSDL(wsdl), null); v.setSuppressWarnings(true); assertTrue(v.isValid()); } @Test public void testLogicalWSDL() throws Exception { String wsdl = getClass().getResource("resources/logical.wsdl").toURI().toString(); WSDLRefValidator validator = new WSDLRefValidator(getWSDL(wsdl), null); validator.isValid(); ValidationResult results = validator.getValidationResults(); assertEquals(1, results.getErrors().size()); String text = "{http://schemas.apache.org/yoko/idl/OptionsPT}[message:getEmployee]"; Set<String> possibles = new HashSet<>(); //woodstox possibles.add(new Message("FAILED_AT_POINT", WSDLRefValidator.LOG, 42, 6, new java.net.URI(wsdl).toURL(), text).toString()); //Sun java6 stax parser possibles.add(new Message("FAILED_AT_POINT", WSDLRefValidator.LOG, 42, 70, new java.net.URI(wsdl).toURL(), text).toString()); //sjsxp possibles.add(new Message("FAILED_AT_POINT", WSDLRefValidator.LOG, -1, -1, new java.net.URI(wsdl).toURL(), text).toString()); assertTrue(possibles.contains(results.getErrors().pop())); } @Test public void testNotAWsdl() throws Exception { try { String wsdl = getClass().getResource("resources/c.xsd").toURI().toString(); WSDLRefValidator validator = new WSDLRefValidator(getWSDL(wsdl), null); validator.isValid(); } catch (Exception e) { String expected = "WSDLException (at /xs:schema): faultCode=INVALID_WSDL: " + "Expected element '{http://schemas.xmlsoap.org/wsdl/}definitions'."; assertTrue(e.getMessage().contains(expected)); } } @Test public void testXSDAnyType() throws Exception { String wsdl = getClass().getResource("resources/anytype.wsdl").toURI().toString(); try { WSDLRefValidator validator = new WSDLRefValidator(getWSDL(wsdl), null); assertTrue(validator.isValid()); } catch (Exception e) { fail("Valid wsdl, no exception should be thrown" + e.getMessage()); } } }