Merge pull request #871 from lucastetreault/AMQ-9005

[AMQ-9005] Clean up remaining Xalan references
This commit is contained in:
Jean-Baptiste Onofré 2022-08-12 08:06:41 +02:00 committed by GitHub
commit 70875bd946
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 4 additions and 130 deletions

View File

@ -1,86 +0,0 @@
/**
* 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.activemq.filter;
import org.apache.activemq.command.Message;
import org.apache.activemq.util.ByteArrayInputStream;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import javax.jms.BytesMessage;
import javax.jms.JMSException;
import javax.jms.TextMessage;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;
import java.io.StringReader;
public class XalanXPathEvaluator implements XPathExpression.XPathEvaluator {
private static final XPathFactory FACTORY = XPathFactory.newInstance();
private final String xpathExpression;
private final DocumentBuilder builder;
private final XPath xpath = FACTORY.newXPath();
public XalanXPathEvaluator(String xpathExpression, DocumentBuilder builder) throws Exception {
this.xpathExpression = xpathExpression;
if (builder != null) {
this.builder = builder;
} else {
throw new RuntimeException("No document builder available");
}
}
public boolean evaluate(Message message) throws JMSException {
if (message instanceof TextMessage) {
String text = ((TextMessage)message).getText();
return evaluate(text);
} else if (message instanceof BytesMessage) {
BytesMessage bm = (BytesMessage)message;
byte data[] = new byte[(int)bm.getBodyLength()];
bm.readBytes(data);
return evaluate(data);
}
return false;
}
private boolean evaluate(byte[] data) {
try {
InputSource inputSource = new InputSource(new ByteArrayInputStream(data));
Document inputDocument = builder.parse(inputSource);
return ((Boolean) xpath.evaluate(xpathExpression, inputDocument, XPathConstants.BOOLEAN)).booleanValue();
} catch (Exception e) {
return false;
}
}
private boolean evaluate(String text) {
try {
InputSource inputSource = new InputSource(new StringReader(text));
Document inputDocument = builder.parse(inputSource);
return ((Boolean) xpath.evaluate(xpathExpression, inputDocument, XPathConstants.BOOLEAN)).booleanValue();
} catch (Exception e) {
return false;
}
}
@Override
public String toString() {
return xpathExpression;
}
}

View File

@ -42,7 +42,7 @@ public final class XPathExpression implements BooleanExpression {
private static final Logger LOG = LoggerFactory.getLogger(XPathExpression.class);
private static final String EVALUATOR_SYSTEM_PROPERTY = "org.apache.activemq.XPathEvaluatorClassName";
private static final String DEFAULT_EVALUATOR_CLASS_NAME = "org.apache.activemq.filter.XalanXPathEvaluator";
private static final String DEFAULT_EVALUATOR_CLASS_NAME = "org.apache.activemq.filter.JAXPXPathEvaluator";
public static final String DOCUMENT_BUILDER_FACTORY_FEATURE = "org.apache.activemq.documentBuilderFactory.feature";
private static final Constructor EVALUATOR_CONSTRUCTOR;

View File

@ -1,35 +0,0 @@
<!--
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.
-->
<web-app>
<!--
In order to be able to compatiable with Resin 2.1.x and 3.0.x,
both XML and XSLT have to be replaced.
If only xalan is included, Resin 2.1.x will fail but not 3.0.x.
Therefore the best way is to use the compatiable version of the
XML parser ans XSLT.
- Please refere to the following link for more detailed information.
- http://www.caucho.com/resin-3.0/xml/jaxp.xtp
-->
<!-- xml -->
<system-property javax.xml.parsers.DocumentBuilderFactory=
"org.apache.xerces.jaxp.DocumentBuilderFactoryImpl"/>
<system-property javax.xml.parsers.SAXParserFactory=
"org.apache.xerces.jaxp.SAXParserFactoryImpl"/>
<!-- xslt -->
<system-property javax.xml.transform.TransformerFactory=
"org.apache.xalan.processor.TransformerFactoryImpl"/>
</web-app>

View File

@ -23,6 +23,7 @@ import java.io.FileFilter;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashSet;
import java.util.Objects;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
@ -50,15 +51,9 @@ public class ValidateXMLConfigTest {
// resource:copy-resource brings all config files into target/conf
File sampleConfDir = new File("target/conf");
final HashSet<String> skipped = new HashSet<String>(java.util.Arrays.asList(new String[]{
"resin-web.xml", "web.xml", "camel.xml", "jolokia-access.xml"
}));
for (File xmlFile : sampleConfDir.listFiles(new FileFilter() {
public boolean accept(File pathname) {
return pathname.isFile() && pathname.getName().endsWith("xml") && !skipped.contains(pathname.getName());
}})) {
final HashSet<String> skipped = new HashSet<>(java.util.Arrays.asList("web.xml", "camel.xml", "jolokia-access.xml"));
for (File xmlFile : Objects.requireNonNull(sampleConfDir.listFiles(pathname -> pathname.isFile() && pathname.getName().endsWith("xml") && !skipped.contains(pathname.getName())))) {
validateXML(xmlFile);
}
}