This is an automated email from the ASF dual-hosted git repository.
nreich pushed a commit to branch feature/GEODE-3824
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/feature/GEODE-3824 by this
push:
new 665f21b fix xml parsing
665f21b is described below
commit 665f21b169fdbabf41a232026506f971d4183bcf
Author: Nick Reich <[email protected]>
AuthorDate: Tue Nov 21 15:17:50 2017 -0800
fix xml parsing
---
.../jdbc/internal/cli/CreateConnectionCommand.java | 9 ------
.../internal/cli/CreateConnectionFunction.java | 2 --
.../cli/CreateConnectionCommandDUnitTest.java | 28 +++++++++++++++---
.../connectors/jdbc/internal/xml/XPathTest.java | 28 ++++++++++++------
.../internal/configuration/domain/XmlEntity.java | 33 ++++++++++++++++++----
5 files changed, 71 insertions(+), 29 deletions(-)
diff --git
a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateConnectionCommand.java
b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateConnectionCommand.java
index 9e196e1..b281d9d 100644
---
a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateConnectionCommand.java
+++
b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateConnectionCommand.java
@@ -78,8 +78,6 @@ public class CreateConnectionCommand implements GfshCommand {
@CliOption(key = CREATE_CONNECTION__PARAMS,
help = CREATE_CONNECTION__PARAMS__HELP) String[] params) {
- InternalCache cache = getCache();
-
Set<DistributedMember> membersToCreateConnectionOn = getMembers(null,
null);
// TODO: add support for params to ConnectionConfigBuilder
@@ -90,11 +88,6 @@ public class CreateConnectionCommand implements GfshCommand {
executeFunction(new CreateConnectionFunction(), configuration,
membersToCreateConnectionOn);
Object resultCollectorResult = resultCollector.getResult();
- if (resultCollectorResult instanceof ArrayList) {
-// logger.error("createConnection got Throwable result", (Throwable)
resultCollectorResult);
-// ((Throwable) resultCollectorResult).printStackTrace();
- logger.error("resultCollectorResult=" + resultCollectorResult);
- }
List<CliFunctionResult> regionCreateResults =
(List<CliFunctionResult>) resultCollectorResult;
@@ -116,8 +109,6 @@ public class CreateConnectionCommand implements GfshCommand
{
Result result = ResultBuilder.buildResult(tabularResultData);
- // verifyDistributedRegionMbean(cache, regionPath);
-
if (xmlEntity.get() != null) {
persistClusterConfiguration(result,
() -> getSharedConfiguration().addXmlEntity(xmlEntity.get(), null));
diff --git
a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateConnectionFunction.java
b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateConnectionFunction.java
index 589373e..3a1b00a 100644
---
a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateConnectionFunction.java
+++
b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateConnectionFunction.java
@@ -62,8 +62,6 @@ public class CreateConnectionFunction implements
Function<ConnectionConfiguratio
InternalJdbcConnectorService service =
cache.getService(InternalJdbcConnectorService.class);
service.addOrUpdateConnectionConfig(configuration);
- // this line invokes AbstractExecution.executeFunctionLocally which
throws and catches
- // underlying Throwable which is provided to lastResult
XmlEntity xmlEntity = new XmlEntity(CacheXml.CACHE,
JdbcConnectorServiceXmlGenerator.PREFIX,
JdbcConnectorServiceXmlParser.NAMESPACE,
ElementType.CONNECTION_SERVICE.getTypeName());
diff --git
a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/CreateConnectionCommandDUnitTest.java
b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/CreateConnectionCommandDUnitTest.java
index c5fbd9c..8b1e842 100644
---
a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/CreateConnectionCommandDUnitTest.java
+++
b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/CreateConnectionCommandDUnitTest.java
@@ -22,10 +22,19 @@ import static org.assertj.core.api.Assertions.*;
import static org.mockito.Matchers.*;
import static org.mockito.Mockito.*;
+import java.util.Map;
import java.util.Properties;
+import org.apache.geode.cache.Cache;
+import org.apache.geode.cache.Region;
+import org.apache.geode.compression.SnappyCompressor;
+import org.apache.geode.connectors.jdbc.internal.ConnectionConfiguration;
+import org.apache.geode.connectors.jdbc.internal.InternalJdbcConnectorService;
import org.apache.geode.distributed.internal.InternalLocator;
+import org.apache.geode.internal.cache.InternalCache;
import org.apache.geode.management.internal.cli.util.CommandStringBuilder;
+import org.apache.geode.management.internal.configuration.domain.Configuration;
+import org.apache.geode.test.dunit.Host;
import org.apache.geode.test.dunit.rules.LocatorServerStartupRule;
import org.apache.geode.test.dunit.rules.MemberVM;
import org.apache.geode.test.junit.categories.DistributedTest;
@@ -33,6 +42,8 @@ import org.apache.geode.test.junit.categories.UnitTest;
import org.apache.geode.test.junit.rules.GfshCommandRule;
import org.apache.geode.test.junit.rules.serializable.SerializableTestName;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -61,10 +72,6 @@ public class CreateConnectionCommandDUnitTest {
gfsh.connectAndVerify(locator);
}
- public void connect(MemberVM serverVM) throws Exception {
- gfsh.connectAndVerify(serverVM.getJmxPort(),
GfshCommandRule.PortType.jmxManager);
- }
-
@Test
public void createsConnection() throws Exception {
CommandStringBuilder csb = new CommandStringBuilder(CREATE_CONNECTION);
@@ -76,5 +83,18 @@ public class CreateConnectionCommandDUnitTest {
gfsh.executeAndAssertThat(csb.toString())
.statusIsSuccess();
+
+ locator.invoke(() -> {String xml =
InternalLocator.getLocator().getSharedConfiguration().getConfiguration("cluster").getCacheXmlContent();
+ assertThat(xml).contains("jdbc:connector-service");
+ });
+
+ server.invoke(() -> {
+ InternalCache cache = LocatorServerStartupRule.getCache();
+ ConnectionConfiguration config =
cache.getService(InternalJdbcConnectorService.class).getConnectionConfig("name");
+ assertThat(config.getUrl()).isEqualTo("url");
+ assertThat(config.getUser()).isEqualTo("username");
+ assertThat(config.getPassword()).isEqualTo("secret");
+ //TODO add params
+ });
}
}
\ No newline at end of file
diff --git
a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/xml/XPathTest.java
b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/xml/XPathTest.java
index 1b08a4e..300d505 100644
---
a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/xml/XPathTest.java
+++
b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/xml/XPathTest.java
@@ -22,6 +22,7 @@ import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Files;
+import java.util.Iterator;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
@@ -32,6 +33,7 @@ import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;
import com.sun.org.apache.xpath.internal.NodeSet;
+import com.sun.xml.internal.bind.v2.runtime.NamespaceContext2;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
@@ -39,6 +41,7 @@ import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
+import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
@@ -130,7 +133,7 @@ public class XPathTest {
xmlBuilder.append("<author>Ayesha Malik</author>");
xmlBuilder.append("</article>");
xmlBuilder.append("</journal:journal>");
- xmlBuilder.append("<journal title=\"Java Technology\" publisher=\"IBM
developerWorks\">");
+ /*xmlBuilder.append("<journal title=\"Java Technology\" publisher=\"IBM
developerWorks\">");
xmlBuilder.append("<article level=\"Advanced\" date=\"January-2004\">");
xmlBuilder.append("<title>Design service-oriented architecture frameworks
with J2EE technology</title>");
xmlBuilder.append("<author>Naveen Balani </author>");
@@ -139,7 +142,7 @@ public class XPathTest {
xmlBuilder.append("<title>Advance DAO Programming</title>");
xmlBuilder.append("<author>Sean Sullivan </author>");
xmlBuilder.append("</article>");
- xmlBuilder.append("</journal>");
+ xmlBuilder.append("</journal>");*/
xmlBuilder.append("</catalog>");
System.out.println("xmlBuilder: " + xmlBuilder.toString());
@@ -161,20 +164,19 @@ public class XPathTest {
//String expression="/catalog/journal/article";
- String expression="//catalog/journal";
-
+ String expression="//catalog/*[name()='journal']";
NodeList nodes = (NodeList) xPath.evaluate(expression, inputSource,
XPathConstants.NODESET);
NodeList nodeList=(NodeList)nodes;
- System.out.println(nodeList.getLength());
+ System.out.println(nodeList.item(0).getNodeName());
}
@Test
public void test3() throws Exception {
StringBuilder xmlBuilder = new StringBuilder();
xmlBuilder.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
- xmlBuilder.append("<cache>");//
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
xmlns=\"http://geode.apache.org/schema/cache\"
xsi:schemaLocation=\"http://geode.apache.org/schema/cache
http://geode.apache.org/schema/cache/cache-1.0.xsd\" version=\"1.0\">");
- xmlBuilder.append("<jdbc:connector-service
xmlns:jdbc=\"http://geode.apache.org/schema/jdbc\" name=\"blah\">");
+ xmlBuilder.append("<cache>
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
xmlns=\"http://geode.apache.org/schema/cache\"
xsi:schemaLocation=\"http://geode.apache.org/schema/cache
http://geode.apache.org/schema/cache/cache-1.0.xsd\" version=\"1.0\">");
+ xmlBuilder.append("<jdbc:connector-service
xmlns:jdbc=\"http://geode.apache.org/schema/jdbc\">");
// xmlBuilder.append("<cache
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
xmlns=\"http://geode.apache.org/schema/cache\"
xmlns:jdbc=\"http://geode.apache.org/schema/jdbc\"
xsi:schemaLocation=\"http://geode.apache.org/schema/cache
http://geode.apache.org/schema/cache/cache-1.0.xsd\" version=\"1.0\">");
// xmlBuilder.append("<jdbc:connector-service>");
@@ -199,13 +201,21 @@ public class XPathTest {
// String publisher = xPath.evaluate("/catalog/journal/@publisher",
inputSource);
//String expression="/catalog/journal/article";
-
- String expression="//cache/jdbc:connector-service/jdbc:connection";
+ XmlUtils.XPathContext context = new XmlUtils.XPathContext();
+ context.addNamespace("cache", "http://geode.apache.org/schema/cache");
+ context.addNamespace("jdbc", "http://geode.apache.org/schema/jdbc");
+ xPath.setNamespaceContext(context);
+ String expression="//cache/jdbc:connector-service";
NodeList nodes = (NodeList) xPath.evaluate(expression, inputSource,
XPathConstants.NODESET);
NodeList nodeList=(NodeList)nodes;
System.out.println(nodeList.getLength());
+ System.out.println(nodeList.item(0).getNodeName());
+ inputSource = new InputSource(new FileInputStream(fileXml));
+ Document document = XmlUtils.getDocumentBuilder().parse(inputSource);
+ Node element = XmlUtils.querySingleElement(document, expression, context);
+ System.out.println(element.getNodeName());
}
private void print(NodeList nodeList) {
diff --git
a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/XmlEntity.java
b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/XmlEntity.java
index b041a40..83c9963 100644
---
a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/XmlEntity.java
+++
b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/XmlEntity.java
@@ -25,15 +25,19 @@ import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
+import javax.swing.text.html.parser.Parser;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.xpath.XPathExpressionException;
+import com.sun.org.apache.xml.internal.serialize.OutputFormat;
+import com.sun.org.apache.xml.internal.serialize.XMLSerializer;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.Logger;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
@@ -158,9 +162,31 @@ public class XmlEntity implements
VersionedDataSerializable {
sb.append("//").append(this.parentType);
sb.append("/").append(childPrefix).append(':').append(this.type);
this.searchString = sb.toString();
- this.xmlDefinition = loadXmlDefinition(); //TODO: delete this line
+ this.xmlDefinition = parseXmlForDefinition();
}
+ private String parseXmlForDefinition() {
+ final Cache cache = CacheFactory.getAnyInstance();
+
+ final StringWriter stringWriter = new StringWriter();
+ final PrintWriter printWriter = new PrintWriter(stringWriter);
+ CacheXmlGenerator.generate(cache, printWriter, true, false, false);
+ printWriter.close();
+ InputSource inputSource = new InputSource(new
StringReader(stringWriter.toString()));
+ try {
+ Document document = XmlUtils.getDocumentBuilder().parse(inputSource);
+ Node element = document.getElementsByTagNameNS(childNamespace,
type).item(0);
+ if (null != element) {
+ return XmlUtils.elementToString(element);
+ }
+ } catch (Exception e) {
+ throw new InternalGemFireError("Could not parse XML when creating
XMLEntity", e);
+ }
+ logger.warn("No XML definition could be found with name={} and
attributes={}", type,
+ attributes);
+ return null;
+ }
+
private void initializeSearchString(final String parentKey, final String
parentValue,
final String childPrefix, final String childKey, final String
childValue) {
StringBuffer sb = new StringBuffer();
@@ -219,7 +245,6 @@ public class XmlEntity implements VersionedDataSerializable
{
* @since GemFire 8.1
*/
private String loadXmlDefinition(final String xmlDocument) {
- final Cache cache = CacheFactory.getAnyInstance();
try {
InputSource inputSource = new InputSource(new StringReader(xmlDocument));
return
loadXmlDefinition(XmlUtils.getDocumentBuilder().parse(inputSource));
@@ -241,9 +266,7 @@ public class XmlEntity implements VersionedDataSerializable
{
*/
public String loadXmlDefinition(final Document document)
throws XPathExpressionException, TransformerFactoryConfigurationError,
TransformerException {
- final Cache cache = CacheFactory.getAnyInstance();
-
- // this.searchString = createQueryString(prefix, type, attributes);
+ this.searchString = createQueryString(prefix, type, attributes);
logger.info("XmlEntity:searchString: {}", this.searchString);
if (document != null) {
--
To stop receiving notification emails like this one, please contact
['"[email protected]" <[email protected]>'].