У меня есть проект библиотеки maven с некоторыми классами для обработки сообщений XML.Всякий раз, когда я получаю одно из этих сообщений, я проверяю его, используя файл схемы xml, который я написал.Код, который выполняет проверку для меня, выглядит следующим образом:
public static Document parseXML(final String xml) throws JDOMException, IOException {
SAXBuilder builder = new SAXBuilder("org.apache.xerces.parsers.SAXParser", true);
builder.setFeature("http://apache.org/xml/features/validation/schema", true);
URL location = CMPMessage.getClass().getResource(XML_SCHEMA_LOCATION);
if (null == location) {
throw new IOException("Unable to load schema definition file.");
}
builder.setProperty("http://apache.org/xml/properties/schema/external-schemaLocation",
"http://www.mycompany.de/MyProtocol " + location);
return builder.build(new StringReader(xml));
}
и XML_SCHEMA_LOCATION
выглядит следующим образом:
private static final String XML_SCHEMA_LOCATION = "/ConvertMessageProtocol.xsd";
Файл .xsd находится в src/main/resources
, и, спасибоДля maven все работает отлично: файл .xsd включается в .jar, когда указывает maven создать пакет.Я сделал простой тестовый проект, чтобы проверить, действительно ли найден файл .xsd.Исходный код выглядит следующим образом:
import java.io.IOException;
import org.jdom.JDOMException;
import de.mycomp.MyMessage;
public class Main {
public static void main(final String[] args) {
try {
MyMessage.parseXML(args[0]);
}
catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
И да, xml будет проверен с использованием файла схемы.
Теперь вот оно: я хочу использовать свою маленькую библиотеку в сервлете (работает в tomcat), но там файл .xsd не может быть найден: (
Конечно, я мог бы сохранить файл .xsd где-то еще, например, непосредственно на сервере компании, и получить его через http, но ядумаю, что включение его в .jar - лучшее решение, чтобы убедиться, что libs и версия схем подходят.
У вас есть идеи, что здесь не так?
Заранее спасибо:
Джим