blob: 69a60c6be6802a2090e136e1caf36a07ed5a532e [file] [log] [blame]
/**
* 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.xml.security.test.dom.resource;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
/**
* This package is responsible for retrieving test vectors for our unit tests.
*
* $todo$ Currently, the test vectors are in the file system under the data/ directory.
* It is planned to put them all into a single jar/zip which is deployed with the library.
*/
public class TestVectorResolver implements EntityResolver {
static org.slf4j.Logger LOG =
org.slf4j.LoggerFactory.getLogger(TestVectorResolver.class);
/** Field alreadyInitialized */
static boolean alreadyInitialized = false;
/** Field zis */
static java.util.zip.ZipInputStream zis = null;
/** Field vectors */
static java.util.Map<String, byte[]> vectors = null;
static {
org.apache.xml.security.Init.init();
TestVectorResolver.init();
}
/** Field _firstEntityResolved */
boolean _firstEntityResolved = false;
/** Field _firstEntitySystemId */
String _firstEntitySystemIdDirectory = null;
/**
* Method init
*
*/
public static void init() {
String thisClass =
"org.apache.xml.security.test.resource.TestVectorResolver";
String testVectorFile = "testvectors.zip";
if (!TestVectorResolver.alreadyInitialized) {
TestVectorResolver.alreadyInitialized = true;
TestVectorResolver.vectors = new java.util.HashMap<String, byte[]>(30);
try {
zis =
new java.util.zip.ZipInputStream(
Class.forName(thisClass).getResourceAsStream(testVectorFile)
);
java.util.zip.ZipEntry ze = null;
while ((ze = zis.getNextEntry()) != null) {
if (!ze.isDirectory()) {
byte data[] =
org.apache.xml.security.utils.JavaUtils.getBytesFromStream(zis);
TestVectorResolver.vectors.put(ze.getName(), data);
LOG.debug("Contents of " + thisClass + "/" + testVectorFile
+ "#" + ze.getName() + " " + data.length + " bytes");
}
}
} catch (ClassNotFoundException e) {
//
}
catch (IOException e) {
//
}
}
}
/**
* Method getCurrentDir
*
*
* @throws IOException
*/
private String getCurrentDir() throws IOException {
String currentDir = new File(".").getCanonicalPath();
currentDir = currentDir.replace(File.separatorChar, '/');
currentDir = "file:///" + currentDir + "/";
return currentDir;
}
/**
* Method getFileName
*
* @param systemId
*
* @throws IOException
*/
private String getFileName(String systemId) throws IOException {
// clean up file name
String currentDir = getCurrentDir();
if (systemId.startsWith(currentDir)) {
return systemId.substring(currentDir.length());
} else {
return systemId;
}
}
/**
* Method getFilePath
*
* @param systemId
*
* @throws IOException
*/
private String getFilePath(String systemId) throws IOException {
String t = new File(systemId).getCanonicalPath();
t = t.replace(File.separatorChar, '/');
t = "file:///" + t;
String currentDir = getCurrentDir();
if (t.startsWith(currentDir)) {
t = t.substring(currentDir.length());
}
t = t.substring(0, t.lastIndexOf("/"));
return t;
}
/**
* Method set1stSystemId
*
* @param systemId
* @throws IOException
*/
private void set1stSystemId(String systemId) throws IOException {
this._firstEntitySystemIdDirectory = getFilePath(systemId);
LOG.debug("this._firstEntitySystemIdDirectory = "
+ this._firstEntitySystemIdDirectory);
}
/**
* Method resolveEntity
*
* @param publicId
* @param systemId
*
*/
public InputSource resolveEntity(String publicId, String systemId) {
try {
if (!this._firstEntityResolved) {
this.set1stSystemId(systemId);
}
systemId = this.getFileName(systemId);
LOG.debug("publicId=\"" + publicId + "\" systemId=\"" + systemId
+ "\"");
// InputStream result = this.getInputStream(systemId);
// return new InputSource(result);
return new InputSource(new FileInputStream(systemId));
} catch (FileNotFoundException ex) {
return null;
} catch (IOException ex) {
return null;
}
}
}