/* | |
* 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.axis2.jaxws.catalog; | |
import junit.framework.TestCase; | |
import org.apache.axis2.jaxws.catalog.impl.OASISCatalogManager; | |
import org.apache.axis2.jaxws.util.WSDL4JWrapper; | |
import javax.wsdl.Definition; | |
import javax.wsdl.Input; | |
import javax.wsdl.Message; | |
import javax.wsdl.Operation; | |
import javax.wsdl.Part; | |
import javax.wsdl.PortType; | |
import javax.wsdl.WSDLException; | |
import javax.xml.namespace.QName; | |
import java.io.File; | |
import java.net.MalformedURLException; | |
import java.net.URL; | |
/** | |
* Tests the use of the Apache Commons Resolver API to resolve URIs. | |
*/ | |
public class MultiRedirectionCatalogTest extends TestCase { | |
private static final String ROOT_WSDL = "/test-resources/catalog/root.wsdl"; | |
private static final String TEST_RESOURCES = "/test-resources/catalog/"; | |
public void testOneCatalogSuccess() { | |
verifySuccess(ROOT_WSDL, TEST_RESOURCES + "basic-catalog.xml"); | |
} | |
public void testNextCatalogSuccess() { | |
verifySuccess(ROOT_WSDL, TEST_RESOURCES + "root-catalog.xml"); | |
} | |
public void testNextCatalogFailure() { | |
verifyFailure(ROOT_WSDL, TEST_RESOURCES + "fail/root-catalog.xml"); | |
} | |
public void testNoCatEntryForFirstImport() { | |
verifyFailure(ROOT_WSDL, TEST_RESOURCES + "fail/firstImportFail.xml"); | |
} | |
public void testNoCatEntryForSecondImport() { | |
verifyFailure(ROOT_WSDL, TEST_RESOURCES + "fail/secondImportFail.xml"); | |
} | |
public void testNoCatEntryForThirdImport() { | |
verifyFailure(ROOT_WSDL, TEST_RESOURCES + "fail/thirdImportFail.xml"); | |
} | |
/** | |
* Ensure that the catalog is used to locate imported resources. | |
*/ | |
private void verifySuccess(String wsdlLocation, String catalogFile) { | |
URL url = getURLFromLocation(wsdlLocation); | |
try{ | |
OASISCatalogManager catalogManager = new OASISCatalogManager(); | |
catalogManager.setCatalogFiles(getURLFromLocation(catalogFile).toString()); | |
WSDL4JWrapper w4j = new WSDL4JWrapper(url, catalogManager, false, 0); | |
Definition wsdlDef = w4j.getDefinition(); | |
assertNotNull(wsdlDef); | |
QName portTypeName = new QName("http://www.example.com/test/calculator", | |
"CalculatorService", | |
""); | |
PortType portType = wsdlDef.getPortType(portTypeName); | |
assertNotNull(portType); | |
Operation clearOp = portType.getOperation("clear", null, null); | |
assertNotNull(clearOp); | |
Input clearOpInput = clearOp.getInput(); | |
assertNotNull(clearOpInput); | |
Message msg = clearOpInput.getMessage(); | |
assertNotNull(msg); | |
Part expectedPart = msg.getPart("part1"); | |
assertNotNull(expectedPart); | |
}catch(Exception e){ | |
e.printStackTrace(); | |
fail(); | |
} | |
} | |
/** | |
* Ensure that the test case is valid by failing in the absence of a needed | |
* catalog entry. | |
*/ | |
private void verifyFailure(String wsdlLocation, String catalogFile) { | |
URL url = getURLFromLocation(wsdlLocation); | |
try{ | |
OASISCatalogManager catalogManager = new OASISCatalogManager(); | |
catalogManager.setCatalogFiles(getURLFromLocation(catalogFile).toString()); | |
WSDL4JWrapper w4j = new WSDL4JWrapper(url, catalogManager, false, 0); | |
w4j.getDefinition(); | |
fail("Should have received a WSDLException due to the invalid WSDL location " | |
+ "not redirected by the catalog."); | |
} catch(WSDLException e) { | |
// do nothing - successful test case | |
} catch(Exception e){ | |
e.printStackTrace(); | |
fail(); | |
} | |
} | |
/** | |
* Given a String representing a file location, return a URL. | |
* @param wsdlLocation | |
* @return | |
*/ | |
private URL getURLFromLocation(String wsdlLocation) { | |
URL url = null; | |
try { | |
try{ | |
String baseDir = new File(System.getProperty("basedir",".")).getCanonicalPath(); | |
wsdlLocation = new File(baseDir + wsdlLocation).getAbsolutePath(); | |
}catch(Exception e){ | |
e.printStackTrace(); | |
fail(); | |
} | |
File file = new File(wsdlLocation); | |
url = file.toURL(); | |
} catch (MalformedURLException e) { | |
e.printStackTrace(); | |
fail(); | |
} | |
return url; | |
} | |
} |