From: Mathieu Baudier Date: Sun, 5 Oct 2008 12:33:11 +0000 (+0000) Subject: Introduce XML un/marshallign for SLC Detached X-Git-Tag: argeo-slc-2.1.7~2495 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;ds=sidebyside;h=d4b76dcc41be6340beb91e959b9b69741be17bc0;p=gpl%2Fargeo-slc.git Introduce XML un/marshallign for SLC Detached git-svn-id: https://svn.argeo.org/slc/trunk@1698 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/org.argeo.slc.detached/.classpath b/org.argeo.slc.detached/.classpath index 1aa73cdbf..7dc80e91b 100644 --- a/org.argeo.slc.detached/.classpath +++ b/org.argeo.slc.detached/.classpath @@ -2,7 +2,9 @@ + + - + diff --git a/org.argeo.slc.detached/pom.xml b/org.argeo.slc.detached/pom.xml index 22dd847ef..1588b1163 100644 --- a/org.argeo.slc.detached/pom.xml +++ b/org.argeo.slc.detached/pom.xml @@ -1,78 +1,96 @@ - 4.0.0 - - org.argeo.slc - argeo-slc - 0.11.1-SNAPSHOT - ../org.argeo.slc - - org.argeo.slc.detached - Argeo SLC Detached - bundle - - - - org.apache.felix - maven-bundle-plugin - 1.4.3 - true - - - src/main/resources/META-INF - - - - ${pom.artifactId} - - org.argeo.slc.detached.Activator - - org.argeo.slc.detached.* - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - 1.3 - 1.3 - - - - org.apache.maven.plugins - maven-source-plugin - - - - - - org.apache.felix - org.osgi.core - + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + 4.0.0 + + org.argeo.slc + argeo-slc + 0.11.1-SNAPSHOT + ../org.argeo.slc + + org.argeo.slc.detached + Argeo SLC Detached + bundle + + + + org.apache.felix + maven-bundle-plugin + 1.4.3 + true + + + src/main/resources/META-INF + + + + ${pom.artifactId} + + + org.argeo.slc.detached.Activator + + + org.argeo.slc.detached.* + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.3 + 1.3 + + + + org.apache.maven.plugins + maven-source-plugin + + + + + + org.apache.felix + org.osgi.core + - - org.springframework - spring-context - 2.0.8 - + + org.springframework + spring-context + 2.0.8 + - - - junit - junit - test - - - log4j - log4j - - + + org.codehaus.castor + castor + 1.1.2 + + + adaptx + adaptx + + + + + + xerces + xercesImpl + + + + commons-io + commons-io + + + + junit + junit + test + + + log4j + log4j + + \ No newline at end of file diff --git a/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedAnswer.java b/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedAnswer.java index 582703786..219ab781a 100644 --- a/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedAnswer.java +++ b/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedAnswer.java @@ -58,4 +58,8 @@ public class DetachedAnswer implements DetachedCommunication { return uuid; } + public void setUuid(String uuid) { + this.uuid = uuid; + } + } diff --git a/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedXmlConverter.java b/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedXmlConverter.java new file mode 100644 index 000000000..455597d54 --- /dev/null +++ b/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedXmlConverter.java @@ -0,0 +1,14 @@ +package org.argeo.slc.detached; + +import javax.xml.transform.Result; +import javax.xml.transform.Source; + +public interface DetachedXmlConverter { + public void marshallRequest(DetachedRequest request, Result result); + + public DetachedRequest unmarshallRequest(Source source); + + public void marshallAnswer(DetachedAnswer answer, Result result); + + public DetachedAnswer unmarshallAnswer(Source source); +} diff --git a/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedXmlConverterCompat.java b/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedXmlConverterCompat.java new file mode 100644 index 000000000..1a361dfa1 --- /dev/null +++ b/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedXmlConverterCompat.java @@ -0,0 +1,109 @@ +package org.argeo.slc.detached; + +import java.io.StringReader; +import java.util.Enumeration; +import java.util.Properties; + +import javax.xml.transform.Result; +import javax.xml.transform.Source; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMResult; +import javax.xml.transform.stream.StreamSource; + +import org.apache.commons.io.IOUtils; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +/** For compatibility with old JDKs (pre 1.5). Use Spring base one when possible. */ +public class DetachedXmlConverterCompat implements DetachedXmlConverter { + public final static String SLC_DETACHED_NAMESPACE_URI = "http://argeo.org/projects/slc/schemas/detached"; + // private final static Log log = LogFactory + // .getLog(DetachedXmlConverterCompat.class); + + private final Transformer copy; + + public DetachedXmlConverterCompat() { + try { + copy = TransformerFactory.newInstance().newTransformer(); + } catch (Exception e) { + throw new DetachedException("Could not create transformer.", e); + } + } + + public void marshallAnswer(DetachedAnswer answer, Result result) { + StringBuffer buf = new StringBuffer(""); + buf.append(""); + if (answer.getUuid() != null) + buf.append("").append(answer.getUuid()).append( + ""); + buf.append("").append(answer.getStatus()).append( + ""); + if (answer.getLog() != null) + buf.append("").append(answer.getLog()).append( + ""); + if (answer.getProperties().size() != 0) { + buf.append(""); + Enumeration keys = answer.getProperties().keys(); + while (keys.hasMoreElements()) { + String key = (String) keys.nextElement(); + buf.append(""); + buf.append(answer.getProperties().getProperty(key)); + buf.append(""); + } + buf.append(""); + } + buf.append(""); + StringReader reader = new StringReader(buf.toString()); + Source source = new StreamSource(reader); + try { + copy.transform(source, result); + } catch (TransformerException e) { + throw new DetachedException("Could not copy xml to result", e); + } finally { + IOUtils.closeQuietly(reader); + } + } + + public void marshallRequest(DetachedRequest request, Result result) { + throw new DetachedException("Not implemented."); + } + + public DetachedAnswer unmarshallAnswer(Source source) { + throw new DetachedException("Not implemented."); + } + + public DetachedRequest unmarshallRequest(Source source) { + DOMResult result = new DOMResult(); + try { + copy.transform(source, result); + } catch (TransformerException e) { + throw new DetachedException("Could not copy xml source", e); + } + Element node = (Element) ((Document) result.getNode()) + .getDocumentElement(); + DetachedRequest request = new DetachedRequest(); + request.setUuid(node.getElementsByTagNameNS(SLC_DETACHED_NAMESPACE_URI, + "uuid").item(0).getTextContent()); + request.setRef(node.getElementsByTagNameNS(SLC_DETACHED_NAMESPACE_URI, + "ref").item(0).getTextContent()); + request.setPath(node.getElementsByTagNameNS(SLC_DETACHED_NAMESPACE_URI, + "path").item(0).getTextContent()); + Element propertiesElement = (Element) node.getElementsByTagNameNS( + SLC_DETACHED_NAMESPACE_URI, "properties").item(0); + NodeList propElements = propertiesElement.getElementsByTagNameNS( + SLC_DETACHED_NAMESPACE_URI, "prop"); + Properties properties = new Properties(); + for (int i = 0; i < propElements.getLength(); i++) { + Element propElement = (Element) propElements.item(i); + String key = propElement.getAttribute("key"); + String value = propElement.getTextContent(); + properties.setProperty(key, value); + } + request.setProperties(properties); + return request; + } +} diff --git a/org.argeo.slc.detached/src/main/resources/org/argeo/slc/detached/slc-detached.xsd b/org.argeo.slc.detached/src/main/resources/org/argeo/slc/detached/slc-detached.xsd new file mode 100644 index 000000000..c4fab177b --- /dev/null +++ b/org.argeo.slc.detached/src/main/resources/org/argeo/slc/detached/slc-detached.xsd @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file