use of org.expath.httpclient.HttpClientException in project exist by eXist-db.
the class SendRequestFunction method sendRequest.
private Sequence sendRequest(final NodeValue request, final String href, final Sequence bodies) throws XPathException {
HttpRequest req = null;
try {
final org.expath.tools.model.Sequence b = new EXistSequence(bodies, getContext());
final Element r = new EXistElement(request, getContext());
final RequestParser parser = new RequestParser(r);
req = parser.parse(b, href);
// override anyway it href exists
if (href != null && !href.isEmpty()) {
req.setHref(href);
}
final URI uri = new URI(req.getHref());
final EXistResult result = sendOnce(uri, req, parser);
return result.getResult();
} catch (final URISyntaxException ex) {
throw new XPathException(this, "Href is not valid: " + req != null ? req.getHref() : "" + ". " + ex.getMessage(), ex);
} catch (final HttpClientException hce) {
throw new XPathException(this, hce.getMessage(), hce);
}
}
use of org.expath.httpclient.HttpClientException in project exist by eXist-db.
the class EXistResult method add.
@Override
public void add(final InputStream is) throws HttpClientException {
try {
// we have to make a temporary copy of the data stream, as the socket will be closed shortly
final TemporaryFileManager temporaryFileManager = TemporaryFileManager.getInstance();
final Path tempFile = temporaryFileManager.getTemporaryFile();
Files.copy(is, tempFile, StandardCopyOption.REPLACE_EXISTING);
result.add(BinaryValueFromFile.getInstance(context, new Base64BinaryValueType(), tempFile, (isClosed, file) -> temporaryFileManager.returnTemporaryFile(file)));
} catch (final XPathException | IOException xpe) {
throw new HttpClientException("Unable to add binary value to result:" + xpe.getMessage(), xpe);
} finally {
try {
is.close();
} catch (final IOException ioe) {
logger.warn(ioe.getMessage(), ioe);
}
}
}
use of org.expath.httpclient.HttpClientException in project exist by eXist-db.
the class EXistResult method add.
@Override
public void add(final HttpResponse response) throws HttpClientException {
final EXistTreeBuilder builder = new EXistTreeBuilder(context);
response.outputResponseElement(builder);
final DocumentImpl doc = builder.close();
try {
// we add the root *element* to the result sequence
final NodeTest kind = new TypeTest(Type.ELEMENT);
// add the original items after
if (result.isEmpty()) {
doc.selectChildren(kind, result);
} else {
final ValueSequence newResult = new ValueSequence();
doc.selectChildren(kind, newResult);
newResult.addAll(result);
result = newResult;
}
} catch (final XPathException xpe) {
throw new HttpClientException("Unable to add HttpResponse to result:" + xpe.getMessage(), xpe);
}
}
use of org.expath.httpclient.HttpClientException in project exist by eXist-db.
the class EXistTreeBuilder method outputHeaders.
@Override
public void outputHeaders(HeaderSet headers) throws HttpClientException {
for (Header h : headers) {
assert h.getName() != null : "Header name cannot be null";
String name = h.getName().toLowerCase();
try {
startElem("header");
attribute("name", name);
attribute("value", h.getValue());
// startContent();
endElem();
} catch (ToolsException ex) {
throw new HttpClientException("Error building the header " + name, ex);
}
}
}
use of org.expath.httpclient.HttpClientException in project exist by eXist-db.
the class SendRequestFunction method sendOnce.
/**
* Send one request, not following redirect but handling authentication.
*
* Authentication may require to reply to an authentication challenge,
* by sending again the request, with credentials.
*/
private EXistResult sendOnce(final URI uri, final HttpRequest request, final RequestParser parser) throws HttpClientException {
EXistResult result = new EXistResult(getContext());
HttpConnection conn = null;
try {
conn = new ApacheHttpConnection(uri);
final HttpResponse response = request.send(result, conn, parser.getCredentials());
if (response.getStatus() == HttpStatus.SC_UNAUTHORIZED && parser.getCredentials() != null) {
// requires authorization, try again with auth
result = new EXistResult(getContext());
request.send(result, conn, parser.getCredentials());
}
} finally {
if (conn != null) {
try {
conn.disconnect();
} catch (final HttpClientException hcee) {
logger.warn(hcee.getMessage(), hcee);
}
}
}
return result;
}
Aggregations