diff --git a/.gitignore b/.gitignore index 7a7b4d5..be659bd 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,7 @@ /http-client-java/dist/ /http-client-saxon/build/ /http-client-saxon/dist/ +target +*~ + +/bin diff --git a/http-client-java/pom.xml b/http-client-java/pom.xml new file mode 100644 index 0000000..da049ac --- /dev/null +++ b/http-client-java/pom.xml @@ -0,0 +1,115 @@ + + 4.0.0 + org.expath.httpclient + expath-httpclient-java + 0.0.1-SNAPSHOT + jar + + org.sonatype.oss + oss-parent + 7 + + EXPath HTTP Client + EXPath HTTP Client + http://expath.org/ + + git@github.com:fgeorges/expath-http-client-java.git + scm:git@github.com:fgeorges/expath-http-client-java.git + scm:git:https://github.com/fgeorges/expath-http-client-java + + + + fgeorges + Florent Georges + fgeorges@expath.org + + + + UTF-8 + UTF-8 + + + + org.apache.httpcomponents + httpclient + 4.3.1 + + + org.ccil.cowan.tagsoup + tagsoup + 1.2.1 + + + org.apache.james + apache-mime4j + 0.6.1 + + + junit + junit + 4.10 + test + + + + + src + test + + + org.apache.maven.plugins + maven-compiler-plugin + 2.0.2 + + 1.6 + 1.6 + UTF-8 + + + + org.apache.maven.plugins + maven-resources-plugin + 2.5 + + UTF-8 + + + + org.codehaus.mojo + cobertura-maven-plugin + 2.5.1 + + + 90 + + + + + org.apache.maven.plugins + maven-source-plugin + 2.2.1 + + + attach-sources + + jar + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9 + + + attach-javadocs + + jar + + + + + + + diff --git a/http-client-saxon/pom.xml b/http-client-saxon/pom.xml new file mode 100644 index 0000000..cb42a9e --- /dev/null +++ b/http-client-saxon/pom.xml @@ -0,0 +1,116 @@ + + 4.0.0 + org.expath.httpclient + expath-httpclient-saxon + 0.1.0-SNAPSHOT + jar + + org.sonatype.oss + oss-parent + 7 + + EXPath HTTP Client + EXPath HTTP Client + http://expath.org/ + + git@github.com:fgeorges/expath-http-client-java.git + scm:git@github.com:fgeorges/expath-http-client-java.git + scm:git:https://github.com/fgeorges/expath-http-client-java + + + + fgeorges + Florent Georges + fgeorges@expath.org + + + + UTF-8 + UTF-8 + + + + org.expath.httpclient + expath-httpclient-java + 0.0.1-SNAPSHOT + + + org.expath.packaging + pkg-saxon + 1.1-SNAPSHOT + + + net.sf.saxon + Saxon-HE + 9.5.1-2 + + + + junit + junit + 4.10 + test + + + + + src + test + + + org.apache.maven.plugins + maven-compiler-plugin + 2.0.2 + + 1.6 + 1.6 + UTF-8 + + + + org.apache.maven.plugins + maven-resources-plugin + 2.5 + + UTF-8 + + + + org.codehaus.mojo + cobertura-maven-plugin + 2.5.1 + + + 90 + + + + + org.apache.maven.plugins + maven-source-plugin + 2.2.1 + + + attach-sources + + jar + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9 + + + attach-javadocs + + jar + + + + + + + diff --git a/http-client-saxon/src/org/expath/httpclient/saxon/SaxonElement.java b/http-client-saxon/src/org/expath/httpclient/saxon/SaxonElement.java index a918182..7fbbd3e 100644 --- a/http-client-saxon/src/org/expath/httpclient/saxon/SaxonElement.java +++ b/http-client-saxon/src/org/expath/httpclient/saxon/SaxonElement.java @@ -12,7 +12,7 @@ import java.util.Arrays; import java.util.Iterator; import net.sf.saxon.expr.XPathContext; -import net.sf.saxon.om.Axis; +import net.sf.saxon.om.AxisInfo; import net.sf.saxon.om.NamePool; import net.sf.saxon.om.NodeInfo; import net.sf.saxon.om.SequenceIterator; @@ -77,7 +77,7 @@ public String getAttribute(String local_name) // get the attribute NamePool pool = myNode.getNamePool(); NodeTest pred = new NameTest(Type.ATTRIBUTE, "", local_name, pool); - AxisIterator attrs = myNode.iterateAxis(Axis.ATTRIBUTE, pred); + AxisIterator attrs = myNode.iterateAxis(AxisInfo.ATTRIBUTE, pred); NodeInfo a = (NodeInfo) attrs.next(); // return its string value, or null if there is no such attribute if ( a == null ) { @@ -91,7 +91,7 @@ public String getAttribute(String local_name) @Override public Iterable attributes() { - AxisIterator it = myNode.iterateAxis(Axis.ATTRIBUTE); + AxisIterator it = myNode.iterateAxis(AxisInfo.ATTRIBUTE); return new AttributeIterable(it); } @@ -101,7 +101,7 @@ public boolean hasNoNsChild() { NamePool pool = myNode.getNamePool(); NodeTest no_ns_pred = new NamespaceTest(pool, Type.ELEMENT, ""); - return myNode.iterateAxis(Axis.CHILD, no_ns_pred).moveNext(); + return myNode.iterateAxis(AxisInfo.CHILD, no_ns_pred).moveNext(); } @Override @@ -117,7 +117,7 @@ public void noOtherNCNameAttribute(String[] names) } Arrays.sort(sorted); String elem_name = myNode.getDisplayName(); - AxisIterator it = myNode.iterateAxis(Axis.ATTRIBUTE); + AxisIterator it = myNode.iterateAxis(AxisInfo.ATTRIBUTE); NodeInfo attr; while ( (attr = (NodeInfo) it.next()) != null ) { String attr_name = attr.getDisplayName(); @@ -140,7 +140,7 @@ else if ( Arrays.binarySearch(sorted, attr.getLocalPart()) < 0 ) { public Sequence getContent() throws HttpClientException { - SequenceIterator it = myNode.iterateAxis(Axis.CHILD); + SequenceIterator it = myNode.iterateAxis(AxisInfo.CHILD); return new SaxonSequence(it, myCtxt); } @@ -148,7 +148,7 @@ public Sequence getContent() public Iterable children() throws HttpClientException { - AxisIterator it = myNode.iterateAxis(Axis.CHILD, NodeKindTest.ELEMENT); + AxisIterator it = myNode.iterateAxis(AxisInfo.CHILD, NodeKindTest.ELEMENT); return new ElemIterable(it); } @@ -158,7 +158,7 @@ public Iterable children(String ns) { NamePool pool = myNode.getNamePool(); NodeTest pred = new NamespaceTest(pool, Type.ELEMENT, ns); - AxisIterator it = myNode.iterateAxis(Axis.CHILD, pred); + AxisIterator it = myNode.iterateAxis(AxisInfo.CHILD, pred); return new ElemIterable(it); } diff --git a/http-client-saxon/src/org/expath/httpclient/saxon/SaxonResult.java b/http-client-saxon/src/org/expath/httpclient/saxon/SaxonResult.java index ac71f21..0aa8e24 100644 --- a/http-client-saxon/src/org/expath/httpclient/saxon/SaxonResult.java +++ b/http-client-saxon/src/org/expath/httpclient/saxon/SaxonResult.java @@ -14,10 +14,12 @@ import javax.xml.transform.Source; import net.sf.saxon.expr.XPathContext; import net.sf.saxon.om.Item; +import net.sf.saxon.om.Sequence; import net.sf.saxon.om.SequenceIterator; import net.sf.saxon.trans.XPathException; import net.sf.saxon.tree.iter.ArrayIterator; import net.sf.saxon.value.Base64BinaryValue; +import net.sf.saxon.value.SequenceExtent; import net.sf.saxon.value.StringValue; import org.expath.httpclient.HttpClientException; import org.expath.httpclient.HttpResponse; @@ -85,6 +87,13 @@ public SequenceIterator newIterator() return new ArrayIterator(array); } + public Sequence asSequence() + throws HttpClientException + { + Item[] array = myItems.toArray(new Item[0]); + return new SequenceExtent(array); + } + private List myItems; private XPathContext myCtxt; /** The namespace used for the elements. */ diff --git a/http-client-saxon/src/org/expath/httpclient/saxon/SaxonSequence.java b/http-client-saxon/src/org/expath/httpclient/saxon/SaxonSequence.java index 1e70515..8c76398 100644 --- a/http-client-saxon/src/org/expath/httpclient/saxon/SaxonSequence.java +++ b/http-client-saxon/src/org/expath/httpclient/saxon/SaxonSequence.java @@ -55,12 +55,11 @@ public Sequence next() Item item; try { item = myIt == null ? null : myIt.next(); + return new SaxonSequence(item.iterate(), myCtxt); } catch ( XPathException ex ) { throw new HttpClientException("Error getting the next item in the sequence", ex); } - SequenceIterator it = SingletonIterator.makeIterator(item); - return new SaxonSequence(it, myCtxt); } @Override diff --git a/http-client-saxon/src/org/expath/httpclient/saxon/SendRequestCall.java b/http-client-saxon/src/org/expath/httpclient/saxon/SendRequestCall.java index 698c6b3..73660b8 100644 --- a/http-client-saxon/src/org/expath/httpclient/saxon/SendRequestCall.java +++ b/http-client-saxon/src/org/expath/httpclient/saxon/SendRequestCall.java @@ -13,7 +13,7 @@ import net.sf.saxon.lib.ExtensionFunctionCall; import net.sf.saxon.om.Item; import net.sf.saxon.om.NodeInfo; -import net.sf.saxon.om.SequenceIterator; +import net.sf.saxon.om.Sequence; import net.sf.saxon.trans.XPathException; import net.sf.saxon.value.StringValue; import org.expath.saxon.HttpClient; @@ -28,12 +28,12 @@ public class SendRequestCall extends ExtensionFunctionCall { @Override - public SequenceIterator call(SequenceIterator[] params, XPathContext ctxt) + public Sequence call(XPathContext ctxt, Sequence[] params) throws XPathException { NodeInfo request = null; String href = null; - SequenceIterator bodies = null; + Sequence bodies = null; switch ( params.length ) { case 3: bodies = params[2]; @@ -48,10 +48,10 @@ public SequenceIterator call(SequenceIterator[] params, XPathContext ctxt) return HttpClient.sendRequest(ctxt, request, href, bodies); } - private NodeInfo getRequest(SequenceIterator param) + private NodeInfo getRequest(Sequence param) throws XPathException { - Item item = param.next(); + Item item = param.head(); if ( item == null ) { throw new XPathException("The request param is an empty sequence"); } @@ -61,10 +61,10 @@ private NodeInfo getRequest(SequenceIterator param) return (NodeInfo) item; } - private String getHref(SequenceIterator param) + private String getHref(Sequence param) throws XPathException { - Item item = param.next(); + Item item = param.head(); if ( item == null ) { return null; } diff --git a/http-client-saxon/src/org/expath/saxon/HttpClient.java b/http-client-saxon/src/org/expath/saxon/HttpClient.java index 057fa52..d78151c 100644 --- a/http-client-saxon/src/org/expath/saxon/HttpClient.java +++ b/http-client-saxon/src/org/expath/saxon/HttpClient.java @@ -13,7 +13,7 @@ import java.net.URISyntaxException; import net.sf.saxon.expr.XPathContext; import net.sf.saxon.om.NodeInfo; -import net.sf.saxon.om.SequenceIterator; +import net.sf.saxon.om.Sequence; import net.sf.saxon.trans.XPathException; import org.expath.httpclient.HttpClientException; import org.expath.httpclient.HttpConnection; @@ -22,7 +22,6 @@ import org.expath.httpclient.impl.ApacheHttpConnection; import org.expath.httpclient.impl.RequestParser; import org.expath.httpclient.model.Element; -import org.expath.httpclient.model.Sequence; import org.expath.httpclient.saxon.SaxonElement; import org.expath.httpclient.saxon.SaxonResult; import org.expath.httpclient.saxon.SaxonSequence; @@ -43,7 +42,7 @@ public class HttpClient * http:send-request($request as element(http:request)?) as item()+ * */ - public static SequenceIterator sendRequest(XPathContext ctxt, NodeInfo request) + public static Sequence sendRequest(XPathContext ctxt, NodeInfo request) throws XPathException { return sendRequest(ctxt, request, null, null); @@ -57,9 +56,9 @@ public static SequenceIterator sendRequest(XPathContext ctxt, NodeInfo request) * $href as xs:string?) as item()+ * */ - public static SequenceIterator sendRequest(XPathContext ctxt, - NodeInfo request, - String href) + public static Sequence sendRequest(XPathContext ctxt, + NodeInfo request, + String href) throws XPathException { return sendRequest(ctxt, request, href, null); @@ -74,10 +73,10 @@ public static SequenceIterator sendRequest(XPathContext ctxt, * $bodies as item()*) as item()+ * */ - public static SequenceIterator sendRequest(XPathContext ctxt, - NodeInfo request, - String href, - SequenceIterator bodies) + public static Sequence sendRequest(XPathContext ctxt, + NodeInfo request, + String href, + Sequence bodies) throws XPathException { HttpClient client = new HttpClient(); @@ -97,14 +96,14 @@ public static SequenceIterator sendRequest(XPathContext ctxt, // response content if the user does: http:send-request(...)[1], // that is, if he/she does not actually access the content). See // if we can use that... - private SequenceIterator doSendRequest(XPathContext ctxt, - NodeInfo request, - String href, - SequenceIterator bodies) + private Sequence doSendRequest(XPathContext ctxt, + NodeInfo request, + String href, + Sequence bodies) throws HttpClientException , XPathException { - Sequence b = new SaxonSequence(bodies, ctxt); + SaxonSequence b = new SaxonSequence(bodies.iterate(), ctxt); Element r = new SaxonElement(request, ctxt); RequestParser parser = new RequestParser(r); HttpRequest req = parser.parse(b, href); @@ -115,7 +114,7 @@ private SequenceIterator doSendRequest(XPathContext ctxt, try { URI uri = new URI(req.getHref()); SaxonResult result = sendOnce(uri, req, parser, ctxt); - return result.newIterator(); + return result.asSequence(); } catch ( URISyntaxException ex ) { throw new HttpClientException("Href is not valid: " + req.getHref(), ex);