Author: jm
Date: 2012-04-02 13:14:27 -0700 (Mon, 02 Apr 2012)
New Revision: 28714
Added:
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/StaxHack.java
core3/impl/trunk/cpath2-impl/src/main/java/org/cytoscape/cpath2/internal/StaxHack.java
Modified:
core3/impl/trunk/biopax-impl/pom.xml
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/BioPaxMapper.java
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/CyActivator.java
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/util/BioPaxUtil.java
core3/impl/trunk/cpath2-impl/pom.xml
core3/impl/trunk/cpath2-impl/src/main/java/org/cytoscape/cpath2/internal/task/ExecuteGetRecordByCPathId.java
Log:
Fixes #829: Re-added StaxHack to temporarily set the thread context ClassLoader
when using SimpleIOHandler so it can locate a StAX implementation. Also added
dependency on WoodStox as StAX provider to ensure proper OSGi metadata gets
added to biopax-impl and cpath2-impl bundles.
Modified: core3/impl/trunk/biopax-impl/pom.xml
===================================================================
--- core3/impl/trunk/biopax-impl/pom.xml 2012-04-02 19:04:06 UTC (rev
28713)
+++ core3/impl/trunk/biopax-impl/pom.xml 2012-04-02 20:14:27 UTC (rev
28714)
@@ -62,7 +62,12 @@
<groupId>org.biopax.paxtools</groupId>
<artifactId>biopax-converter</artifactId>
<version>${paxtools.version}</version>
- </dependency>
+ </dependency>
+ <dependency>
+ <groupId>cytoscape-temp</groupId>
+ <artifactId>woodstox-core-lgpl</artifactId>
+ <version>4.0.5</version>
+ </dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
Modified:
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/BioPaxMapper.java
===================================================================
---
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/BioPaxMapper.java
2012-04-02 19:04:06 UTC (rev 28713)
+++
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/BioPaxMapper.java
2012-04-02 20:14:27 UTC (rev 28714)
@@ -197,7 +197,7 @@
// (converted to L3, processed) RDF/XML data
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
- new SimpleIOHandler().convertToOWL(model, baos);
+ convertToOWL(model, baos);
AttributeUtil.set(network, network,
CyNetwork.HIDDEN_ATTRS,
BioPaxUtil.BIOPAX_DATA,
baos.toString("UTF-8"), String.class);
} catch (Exception e) {
@@ -207,6 +207,14 @@
return network;
}
+ private void convertToOWL(final Model model, final
ByteArrayOutputStream stream) {
+ StaxHack.runWithHack(new Runnable() {
+ @Override
+ public void run() {
+ new SimpleIOHandler().convertToOWL(model,
stream);
+ }
+ });
+ }
private void createMemberEdges(CyNetwork network) {
// for each PE,
Modified:
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/CyActivator.java
===================================================================
---
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/CyActivator.java
2012-04-02 19:04:06 UTC (rev 28713)
+++
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/CyActivator.java
2012-04-02 20:14:27 UTC (rev 28714)
@@ -80,14 +80,14 @@
//quick sanity test
- try {
- Model model = (new SimpleIOHandler())
-
.convertFromOWL(this.getClass().getResourceAsStream("biopax3-short-metabolic-pathway.owl"));
- System.out.println("Started biopax-impl!");
- } catch (Throwable t) {
- System.out.println("Failed test biopax-impl.");
- t.printStackTrace();
- }
+// try {
+// Model model = (new SimpleIOHandler())
+//
.convertFromOWL(this.getClass().getResourceAsStream("biopax3-short-metabolic-pathway.owl"));
+// System.out.println("Started biopax-impl!");
+// } catch (Throwable t) {
+// System.out.println("Failed test biopax-impl.");
+// t.printStackTrace();
+// }
}
}
Added:
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/StaxHack.java
===================================================================
---
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/StaxHack.java
(rev 0)
+++
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/StaxHack.java
2012-04-02 20:14:27 UTC (rev 28714)
@@ -0,0 +1,16 @@
+package org.cytoscape.biopax.internal;
+
+import com.ctc.wstx.stax.WstxInputFactory;
+
+public class StaxHack {
+ public static final void runWithHack(Runnable runnable) {
+ Thread thread = Thread.currentThread();
+ ClassLoader loader = thread.getContextClassLoader();
+ try {
+
thread.setContextClassLoader(WstxInputFactory.class.getClassLoader());
+ runnable.run();
+ } finally {
+ thread.setContextClassLoader(loader);
+ }
+ }
+}
Modified:
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/util/BioPaxUtil.java
===================================================================
---
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/util/BioPaxUtil.java
2012-04-02 19:04:06 UTC (rev 28713)
+++
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/util/BioPaxUtil.java
2012-04-02 20:14:27 UTC (rev 28714)
@@ -58,6 +58,7 @@
import org.biopax.paxtools.model.level3.Xref;
import org.biopax.paxtools.util.ClassFilterSet;
import org.cytoscape.biopax.internal.BioPaxMapper;
+import org.cytoscape.biopax.internal.StaxHack;
import org.cytoscape.model.CyNetwork;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -128,20 +129,30 @@
* @throws FileNotFoundException
*/
public static Model read(final InputStream in) throws
FileNotFoundException {
- Model model = null;
- try {
- SimpleIOHandler handler = new SimpleIOHandler();
- handler.mergeDuplicates(true); // a workaround
(illegal) BioPAX data having duplicated rdf:ID...
- model = handler.convertFromOWL(in);
- // immediately convert to BioPAX Level3 model
- if(model != null &&
BioPAXLevel.L2.equals(model.getLevel())) {
- model = new OneTwoThree().filter(model);
- }
- } catch (Throwable e) {
- log.warn("Import failed: " + e);
+ Model model = convertFromOwl(in);
+ // immediately convert to BioPAX Level3 model
+ if(model != null && BioPAXLevel.L2.equals(model.getLevel())) {
+ model = new OneTwoThree().filter(model);
}
return model;
}
+
+ private static Model convertFromOwl(final InputStream stream) {
+ final Model[] model = new Model[1];
+ final SimpleIOHandler handler = new SimpleIOHandler();
+ handler.mergeDuplicates(true); // a workaround (illegal) BioPAX
data having duplicated rdf:ID...
+ StaxHack.runWithHack(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ model[0] =
handler.convertFromOWL(stream);
+ } catch (Throwable e) {
+ log.warn("Import failed: " + e);
+ }
+ }
+ });
+ return model[0];
+ }
/**
@@ -555,14 +566,19 @@
}
- public static String toOwl(BioPAXElement bpe) {
- StringWriter writer = new StringWriter();
- try {
- SimpleIOHandler simpleExporter = new
SimpleIOHandler(BioPAXLevel.L3);
- simpleExporter.writeObject(writer, bpe);
- } catch (Exception e) {
- log.error("Failed printing '" + bpe.getRDFId() + "' to
OWL", e);
- }
+ public static String toOwl(final BioPAXElement bpe) {
+ final StringWriter writer = new StringWriter();
+ final SimpleIOHandler simpleExporter = new
SimpleIOHandler(BioPAXLevel.L3);
+ StaxHack.runWithHack(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ simpleExporter.writeObject(writer, bpe);
+ } catch (Exception e) {
+ log.error("Failed printing '" +
bpe.getRDFId() + "' to OWL", e);
+ }
+ }
+ });
return writer.toString();
}
Modified: core3/impl/trunk/cpath2-impl/pom.xml
===================================================================
--- core3/impl/trunk/cpath2-impl/pom.xml 2012-04-02 19:04:06 UTC (rev
28713)
+++ core3/impl/trunk/cpath2-impl/pom.xml 2012-04-02 20:14:27 UTC (rev
28714)
@@ -96,6 +96,11 @@
<artifactId>biopax-converter</artifactId>
<version>${paxtools.version}</version>
</dependency>
+ <dependency>
+ <groupId>cytoscape-temp</groupId>
+ <artifactId>woodstox-core-lgpl</artifactId>
+ <version>4.0.5</version>
+ </dependency>
</dependencies>
<build>
Added:
core3/impl/trunk/cpath2-impl/src/main/java/org/cytoscape/cpath2/internal/StaxHack.java
===================================================================
---
core3/impl/trunk/cpath2-impl/src/main/java/org/cytoscape/cpath2/internal/StaxHack.java
(rev 0)
+++
core3/impl/trunk/cpath2-impl/src/main/java/org/cytoscape/cpath2/internal/StaxHack.java
2012-04-02 20:14:27 UTC (rev 28714)
@@ -0,0 +1,16 @@
+package org.cytoscape.cpath2.internal;
+
+import com.ctc.wstx.stax.WstxInputFactory;
+
+public class StaxHack {
+ public static final void runWithHack(Runnable runnable) {
+ Thread thread = Thread.currentThread();
+ ClassLoader loader = thread.getContextClassLoader();
+ try {
+
thread.setContextClassLoader(WstxInputFactory.class.getClassLoader());
+ runnable.run();
+ } finally {
+ thread.setContextClassLoader(loader);
+ }
+ }
+}
Modified:
core3/impl/trunk/cpath2-impl/src/main/java/org/cytoscape/cpath2/internal/task/ExecuteGetRecordByCPathId.java
===================================================================
---
core3/impl/trunk/cpath2-impl/src/main/java/org/cytoscape/cpath2/internal/task/ExecuteGetRecordByCPathId.java
2012-04-02 19:04:06 UTC (rev 28713)
+++
core3/impl/trunk/cpath2-impl/src/main/java/org/cytoscape/cpath2/internal/task/ExecuteGetRecordByCPathId.java
2012-04-02 20:14:27 UTC (rev 28714)
@@ -4,6 +4,7 @@
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
+import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
@@ -26,6 +27,7 @@
import org.biopax.paxtools.model.level3.PhysicalEntity;
import org.biopax.paxtools.model.level3.SimplePhysicalEntity;
import org.cytoscape.cpath2.internal.CPath2Factory;
+import org.cytoscape.cpath2.internal.StaxHack;
import org.cytoscape.cpath2.internal.util.AttributeUtil;
import org.cytoscape.cpath2.internal.util.BioPaxUtil;
import org.cytoscape.cpath2.internal.util.SelectUtil;
@@ -427,7 +429,7 @@
}
try {
final String xml = webApi.getRecordsByIds(ids,
CPathResponseFormat.BIOPAX, new NullTaskMonitor());
- Model model = (new
SimpleIOHandler()).convertFromOWL(new ByteArrayInputStream(xml.getBytes()));
+ Model model = convertFromOwl(new
ByteArrayInputStream(xml.getBytes()));
// convert L2 to L3 if required (L1 is
converted to L2 always anyway - by the handler)
if(BioPAXLevel.L2.equals(model.getLevel())) {
//
model = (new
OneTwoThree()).filter(model);
@@ -467,6 +469,17 @@
}
}
}
+
+ private Model convertFromOwl(final InputStream stream) {
+ final Model[] model = new Model[1];
+ StaxHack.runWithHack(new Runnable() {
+ @Override
+ public void run() {
+ model[0] = (new
SimpleIOHandler()).convertFromOWL(stream);
+ }
+ });
+ return model[0];
+ }
private List<List<CyNode>> createBatchArray(CyNetwork cyNetwork) {
int max_ids_per_request = 50;
--
You received this message because you are subscribed to the Google Groups
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/cytoscape-cvs?hl=en.