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]>'].

Reply via email to