summaryrefslogtreecommitdiffstats
path: root/branches/sca-java-1.4/samples/web-resource
diff options
context:
space:
mode:
Diffstat (limited to 'branches/sca-java-1.4/samples/web-resource')
-rw-r--r--branches/sca-java-1.4/samples/web-resource/README76
-rw-r--r--branches/sca-java-1.4/samples/web-resource/build.xml72
-rw-r--r--branches/sca-java-1.4/samples/web-resource/pom.xml79
-rw-r--r--branches/sca-java-1.4/samples/web-resource/src/main/java/web/resource/SampleServer.java44
-rw-r--r--branches/sca-java-1.4/samples/web-resource/src/main/resources/WebResource.composite32
-rw-r--r--branches/sca-java-1.4/samples/web-resource/src/main/resources/myContent/index.html49
-rw-r--r--branches/sca-java-1.4/samples/web-resource/web-resource.pngbin0 -> 8418 bytes
-rw-r--r--branches/sca-java-1.4/samples/web-resource/web-resource.svg197
8 files changed, 549 insertions, 0 deletions
diff --git a/branches/sca-java-1.4/samples/web-resource/README b/branches/sca-java-1.4/samples/web-resource/README
new file mode 100644
index 0000000000..56bffba6a3
--- /dev/null
+++ b/branches/sca-java-1.4/samples/web-resource/README
@@ -0,0 +1,76 @@
+Web Resource Component Sample
+======================================
+This sample demonstrates an SCA Web resource component.
+
+The README in the samples directory (the directory above this) provides
+general instructions about building and running samples. Take a look there
+first.
+
+If you just want to run it to see what happens open a command prompt, navigate
+to this sample directory and do:
+
+ant run
+
+OR if you don't have ant, on Windows do
+
+java -cp ..\..\lib\tuscany-sca-manifest.jar;target\sample-web-resource.jar web.resource.SampleServer
+
+and on *nix do
+
+java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-web-resource.jar web.resource.SampleServer
+
+Now the server is started you can point your Web browser to the URL of the Web resource.
+
+Sample Overview
+---------------
+The sample provides a single component exposing a Web resource.
+
+web-resource/
+ src/
+ main/
+ java/
+ web/resource/
+ SampleServer.java - starts the SCA Runtime and
+ deploys the WebResource.composite
+ resources/
+ myContent/
+ index.html - a Web HTML resource
+ WebResource.composite - the SCA assembly for this sample
+ web-resource.png - a pictorial representation of the
+ sample .composite file
+ build.xml - the Ant build file
+ pom.xml - the Maven build file
+
+Building And Running The Sample Using Ant
+-----------------------------------------
+With the binary distribution the sample can be built and run using Ant using the
+following commands
+
+cd web-resource
+ant compile
+ant run
+
+You should see the following output from the run target.
+
+run:
+ [java] 14-Jan-2008 14:28:07 org.apache.tuscany.sca.http.jetty.JettyServer a
+ddServletMapping
+ [java] INFO: Added Servlet mapping: http://L3AW203:8080/myWeb/*
+ [java] Sample server started (press enter to shutdown)
+ [java]
+ [java] To get the Web resource, point your Web browser to the following add
+ress:
+ [java] http://localhost:8080/myWeb/index.html
+ [java]
+
+As this point the Web resource is exposed by a web server started automatically
+by the SCA runtime. To stop the server just press enter.
+
+Building The Sample Using Maven
+-------------------------------------------
+With either the binary or source distributions the sample can be built using
+Maven as follows.
+
+cd web-resource
+mvn
+
diff --git a/branches/sca-java-1.4/samples/web-resource/build.xml b/branches/sca-java-1.4/samples/web-resource/build.xml
new file mode 100644
index 0000000000..5f6b6091e7
--- /dev/null
+++ b/branches/sca-java-1.4/samples/web-resource/build.xml
@@ -0,0 +1,72 @@
+<!--
+ * 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.
+-->
+<project name="web-resource" default="compile">
+ <property name="test.class" value="web.resource.SampleServer" />
+ <property name="test.jar" value="sample-web-resource.jar" />
+
+ <target name="init">
+ <mkdir dir="target/classes"/>
+ </target>
+
+ <target name="compile" depends="init">
+ <javac srcdir="src/main/java"
+ destdir="target/classes"
+ debug="on"
+ source="1.5"
+ target="1.5">
+ <classpath>
+ <pathelement location="../../lib/tuscany-sca-manifest.jar"/>
+ </classpath>
+ </javac>
+ <copy todir="target/classes">
+ <fileset dir="src/main/resources"/>
+ </copy>
+ <jar destfile="target/${test.jar}" basedir="target/classes">
+ <manifest>
+ <attribute name="Main-Class" value="${test.class}" />
+ </manifest>
+ </jar>
+ </target>
+
+ <target name="run-classes">
+ <java classname="${test.class}"
+ fork="true">
+ <classpath>
+ <pathelement path="target/classes"/>
+ <pathelement location="../../lib/tuscany-sca-manifest.jar"/>
+ </classpath>
+ </java>
+ </target>
+
+ <target name="run">
+ <java classname="${test.class}"
+ fork="true">
+ <classpath>
+ <pathelement path="target/${test.jar}"/>
+ <pathelement location="../../lib/tuscany-sca-manifest.jar"/>
+ </classpath>
+ </java>
+ </target>
+
+ <target name="clean">
+ <delete quiet="true" includeemptydirs="true">
+ <fileset dir="target"/>
+ </delete>
+ </target>
+</project>
diff --git a/branches/sca-java-1.4/samples/web-resource/pom.xml b/branches/sca-java-1.4/samples/web-resource/pom.xml
new file mode 100644
index 0000000000..52f082fbe8
--- /dev/null
+++ b/branches/sca-java-1.4/samples/web-resource/pom.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * 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.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-sca</artifactId>
+ <version>1.4-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+ <artifactId>sample-web-resource</artifactId>
+ <name>Apache Tuscany SCA Sample Web Resource</name>
+
+ <repositories>
+ <repository>
+ <id>apache.incubator</id>
+ <url>http://people.apache.org/repo/m2-incubating-repository</url>
+ </repository>
+ </repositories>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-host-embedded</artifactId>
+ <version>1.4-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-resource-runtime</artifactId>
+ <version>1.4-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-http-runtime</artifactId>
+ <version>1.4-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-host-tomcat</artifactId>
+ <version>1.4-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.5</version>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+ </build>
+
+</project>
diff --git a/branches/sca-java-1.4/samples/web-resource/src/main/java/web/resource/SampleServer.java b/branches/sca-java-1.4/samples/web-resource/src/main/java/web/resource/SampleServer.java
new file mode 100644
index 0000000000..9410de08c4
--- /dev/null
+++ b/branches/sca-java-1.4/samples/web-resource/src/main/java/web/resource/SampleServer.java
@@ -0,0 +1,44 @@
+/*
+ * 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 web.resource;
+
+import java.io.IOException;
+
+import org.apache.tuscany.sca.host.embedded.SCADomain;
+
+public class SampleServer {
+ public static void main(String[] args) throws Exception {
+
+ SCADomain scaDomain = SCADomain.newInstance("WebResource.composite");
+
+ try {
+ System.out.println("Sample server started (press enter to shutdown)");
+ System.out.println();
+ System.out.println("To get the Web resource, point your Web browser to the following address:");
+ System.out.println("http://localhost:8080/myWeb/index.html");
+ System.out.println();
+ System.in.read();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ scaDomain.close();
+ System.out.println("Sample server stopped");
+ }
+}
diff --git a/branches/sca-java-1.4/samples/web-resource/src/main/resources/WebResource.composite b/branches/sca-java-1.4/samples/web-resource/src/main/resources/WebResource.composite
new file mode 100644
index 0000000000..4536136a8b
--- /dev/null
+++ b/branches/sca-java-1.4/samples/web-resource/src/main/resources/WebResource.composite
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * 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.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://web"
+ name="WebResource">
+
+ <component name="myWeb">
+ <tuscany:implementation.resource location="myContent"/>
+ <service name="Resource">
+ <tuscany:binding.http/>
+ </service>
+ </component>
+
+</composite>
diff --git a/branches/sca-java-1.4/samples/web-resource/src/main/resources/myContent/index.html b/branches/sca-java-1.4/samples/web-resource/src/main/resources/myContent/index.html
new file mode 100644
index 0000000000..55de048373
--- /dev/null
+++ b/branches/sca-java-1.4/samples/web-resource/src/main/resources/myContent/index.html
@@ -0,0 +1,49 @@
+<html>
+<!--
+ * 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.
+ -->
+ <head>
+ <title>Tuscany Sample Web Resource</TITLE>
+ </head>
+
+ <body>
+ <h1>A Sample Web Resource</h1>
+
+ <p>Tuscany allows you to publish Web resources using SCA components declared with an
+ <b>&lt;implementation.resource&gt;</b> component implementation type and made available
+ to HTTP clients using a <b>&lt;binding.http&gt;</b> binding.</p>
+
+ <p>Here is the SCA composite that publishes this page:</p>
+
+ <pre>
+&lt;composite xmlns=&quot;http://www.osoa.org/xmlns/sca/1.0&quot;
+ targetNamespace=&quot;http://web&quot;
+ name=&quot;WebResource&quot;&gt;
+
+ &lt;component name=&quot;myWeb&quot;&gt;
+ &lt;implementation.resource location=&quot;myContent&quot;/&gt;
+ &lt;service name=&quot;Resource&quot;&gt;
+ &lt;binding.http/&gt;
+ &lt;/service&gt;
+ &lt;/component&gt;
+
+&lt;/composite&gt;
+ </pre>
+
+ </body>
+</html>
diff --git a/branches/sca-java-1.4/samples/web-resource/web-resource.png b/branches/sca-java-1.4/samples/web-resource/web-resource.png
new file mode 100644
index 0000000000..7259447b65
--- /dev/null
+++ b/branches/sca-java-1.4/samples/web-resource/web-resource.png
Binary files differ
diff --git a/branches/sca-java-1.4/samples/web-resource/web-resource.svg b/branches/sca-java-1.4/samples/web-resource/web-resource.svg
new file mode 100644
index 0000000000..0d1257316c
--- /dev/null
+++ b/branches/sca-java-1.4/samples/web-resource/web-resource.svg
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+ * 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.
+-->
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="1052.3622"
+ height="744.09448"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.45.1"
+ sodipodi:docbase="C:\simon\tuscany\java-panic\sca\samples\web-resource"
+ sodipodi:docname="web-resource.svg"
+ version="1.0"
+ inkscape:export-filename="C:\simon\tuscany\java-panic\sca\samples\web-resource\web-resource.png"
+ inkscape:export-xdpi="52.84"
+ inkscape:export-ydpi="52.84"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.4"
+ inkscape:cx="525.73551"
+ inkscape:cy="374.31238"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ inkscape:window-width="1143"
+ inkscape:window-height="653"
+ inkscape:window-x="342"
+ inkscape:window-y="109" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g2997"
+ transform="matrix(0.991389,0,0,0.9858089,2.215655,2.7105357)">
+ <rect
+ rx="13.798461"
+ ry="11.012117"
+ y="201.35284"
+ x="261.12485"
+ height="260.28641"
+ width="446.85785"
+ id="rect2067"
+ style="opacity:1;fill:#90baf4;fill-opacity:1;stroke:#060000;stroke-width:1.87128341;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <flowRoot
+ id="flowRoot2954"
+ xml:space="preserve"><flowRegion
+ id="flowRegion2956"><rect
+ y="212.66591"
+ x="281.42856"
+ height="61.42857"
+ width="170"
+ id="rect2958" /></flowRegion><flowPara
+ id="flowPara2960">WebResource</flowPara></flowRoot> <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="447.14285"
+ y="370.52304"
+ id="text2184"
+ transform="matrix(1.0086858,0,0,1.0143954,-2.2348997,-2.7495549)"><tspan
+ sodipodi:role="line"
+ id="tspan2186"
+ x="447.14285"
+ y="370.52304" /></text>
+ </g>
+ <rect
+ style="fill:#317fed;fill-opacity:1;stroke:#060000;stroke-width:2.24079084;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect2988"
+ width="137.56453"
+ height="90.622177"
+ x="419.32242"
+ y="262.28799"
+ rx="8.3209715"
+ ry="7.5178399" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot2966"
+ transform="translate(158.89697,68.086243)"><flowRegion
+ id="flowRegion2968"><rect
+ id="rect2970"
+ width="170"
+ height="61.42857"
+ x="281.42856"
+ y="212.66591" /></flowRegion><flowPara
+ id="flowPara1885">myWeb</flowPara></flowRoot> <path
+ style="fill:#5b9d05;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.64851415px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 371.6615,289.33886 L 427.41483,289.33886 L 437.55179,310.67646 L 425.72534,330.37273 L 371.6615,330.37273 L 384.33272,310.67646 L 371.6615,289.33886 z "
+ id="path3017" />
+ <text
+ xml:space="preserve"
+ style="font-size:10.96820259px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="479.19058"
+ y="292.96347"
+ id="text2202"
+ transform="scale(0.9140169,1.0940717)"><tspan
+ sodipodi:role="line"
+ id="tspan2204"
+ x="479.19058"
+ y="292.96347">implementation.resource</tspan></text>
+ <rect
+ style="opacity:0.18888891;fill:#223756;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.2524904;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect2206"
+ width="252.14285"
+ height="55.714287"
+ x="514.28571"
+ y="469.80875"
+ rx="8.3209715"
+ ry="7.5178399" />
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="530.71429"
+ y="484.09448"
+ id="text2208"><tspan
+ sodipodi:role="line"
+ id="tspan2210"
+ x="530.71429"
+ y="484.09448">File System</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="532.85718"
+ y="500.52304"
+ id="text2212"><tspan
+ sodipodi:role="line"
+ id="tspan2214"
+ x="532.85718"
+ y="500.52304">./myContent</tspan><tspan
+ sodipodi:role="line"
+ x="532.85718"
+ y="515.52304"
+ id="tspan2216"> /index.html</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:6,1;stroke-dashoffset:0"
+ d="M 482.85714,324.80877 L 482.85714,493.3802 L 531.42857,493.3802"
+ id="path2218" />
+ <text
+ xml:space="preserve"
+ style="font-size:9.94491482px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="390.92761"
+ y="302.53455"
+ id="text3193"
+ transform="scale(0.9925021,1.0075545)"><tspan
+ sodipodi:role="line"
+ id="tspan3195"
+ x="390.92761"
+ y="302.53455">binding.</tspan><tspan
+ sodipodi:role="line"
+ x="390.92761"
+ y="314.96569"
+ id="tspan3197">http</tspan></text>
+ </g>
+</svg>