Search in sources :

Example 1 with StringSource

use of org.apache.camel.StringSource in project camel by apache.

the class DefaultRestletBinding method populateRestletResponseFromExchange.

public void populateRestletResponseFromExchange(Exchange exchange, Response response) throws Exception {
    Message out;
    if (exchange.isFailed()) {
        // 500 for internal server error which can be overridden by response code in header
        response.setStatus(Status.valueOf(500));
        Message msg = exchange.hasOut() ? exchange.getOut() : exchange.getIn();
        if (msg.isFault()) {
            out = msg;
        } else {
            // print exception as message and stacktrace
            Exception t = exchange.getException();
            StringWriter sw = new StringWriter();
            PrintWriter pw = new PrintWriter(sw);
            t.printStackTrace(pw);
            response.setEntity(sw.toString(), MediaType.TEXT_PLAIN);
            return;
        }
    } else {
        out = exchange.hasOut() ? exchange.getOut() : exchange.getIn();
    }
    // get content type
    MediaType mediaType = out.getHeader(Exchange.CONTENT_TYPE, MediaType.class);
    if (mediaType == null) {
        Object body = out.getBody();
        mediaType = MediaType.TEXT_PLAIN;
        if (body instanceof String) {
            mediaType = MediaType.TEXT_PLAIN;
        } else if (body instanceof StringSource || body instanceof DOMSource) {
            mediaType = MediaType.TEXT_XML;
        }
    }
    // get response code
    Integer responseCode = out.getHeader(Exchange.HTTP_RESPONSE_CODE, Integer.class);
    if (responseCode != null) {
        response.setStatus(Status.valueOf(responseCode));
    }
    // set response body according to the message body
    Object body = out.getBody();
    if (body instanceof WrappedFile) {
        // grab body from generic file holder
        GenericFile<?> gf = (GenericFile<?>) body;
        body = gf.getBody();
    }
    if (body == null) {
        // empty response
        response.setEntity("", MediaType.TEXT_PLAIN);
    } else if (body instanceof Response) {
        // its already a restlet response, so dont do anything
        LOG.debug("Using existing Restlet Response from exchange body: {}", body);
    } else if (body instanceof Representation) {
        response.setEntity(out.getBody(Representation.class));
    } else if (body instanceof InputStream) {
        response.setEntity(new InputRepresentation(out.getBody(InputStream.class), mediaType));
    } else if (body instanceof File) {
        response.setEntity(new FileRepresentation(out.getBody(File.class), mediaType));
    } else if (body instanceof byte[]) {
        byte[] bytes = out.getBody(byte[].class);
        response.setEntity(new ByteArrayRepresentation(bytes, mediaType, bytes.length));
    } else {
        // fallback and use string
        String text = out.getBody(String.class);
        response.setEntity(text, mediaType);
    }
    LOG.debug("Populate Restlet response from exchange body: {}", body);
    if (exchange.getProperty(Exchange.CHARSET_NAME) != null) {
        CharacterSet cs = CharacterSet.valueOf(exchange.getProperty(Exchange.CHARSET_NAME, String.class));
        response.getEntity().setCharacterSet(cs);
    }
    // set headers at the end, as the entity must be set first
    // NOTE: setting HTTP headers on restlet is cumbersome and its API is "weird" and has some flaws
    // so we need to headers two times, and the 2nd time we add the non-internal headers once more
    Series<Header> series = new Series<Header>(Header.class);
    for (Map.Entry<String, Object> entry : out.getHeaders().entrySet()) {
        String key = entry.getKey();
        Object value = entry.getValue();
        if (!headerFilterStrategy.applyFilterToCamelHeaders(key, value, exchange)) {
            boolean added = setResponseHeader(exchange, response, key, value);
            if (!added) {
                // we only want non internal headers
                if (!key.startsWith("Camel") && !key.startsWith("org.restlet")) {
                    String text = exchange.getContext().getTypeConverter().tryConvertTo(String.class, exchange, value);
                    if (text != null) {
                        series.add(key, text);
                    }
                }
            }
        }
    }
    // set HTTP headers so we return these in the response
    if (!series.isEmpty()) {
        response.getAttributes().put(HeaderConstants.ATTRIBUTE_HEADERS, series);
    }
}
Also used : DOMSource(javax.xml.transform.dom.DOMSource) Message(org.apache.camel.Message) StringWriter(java.io.StringWriter) WrappedFile(org.apache.camel.WrappedFile) MediaType(org.restlet.data.MediaType) CharacterSet(org.restlet.data.CharacterSet) PrintWriter(java.io.PrintWriter) InputRepresentation(org.restlet.representation.InputRepresentation) InputStream(java.io.InputStream) EmptyRepresentation(org.restlet.representation.EmptyRepresentation) StringRepresentation(org.restlet.representation.StringRepresentation) InputRepresentation(org.restlet.representation.InputRepresentation) ByteArrayRepresentation(org.restlet.representation.ByteArrayRepresentation) FileRepresentation(org.restlet.representation.FileRepresentation) StreamRepresentation(org.restlet.representation.StreamRepresentation) Representation(org.restlet.representation.Representation) DecodeRepresentation(org.restlet.engine.application.DecodeRepresentation) ParseException(java.text.ParseException) RuntimeCamelException(org.apache.camel.RuntimeCamelException) ChallengeResponse(org.restlet.data.ChallengeResponse) Response(org.restlet.Response) Series(org.restlet.util.Series) Header(org.restlet.data.Header) FileRepresentation(org.restlet.representation.FileRepresentation) ByteArrayRepresentation(org.restlet.representation.ByteArrayRepresentation) StringSource(org.apache.camel.StringSource) WrappedFile(org.apache.camel.WrappedFile) GenericFile(org.apache.camel.component.file.GenericFile) File(java.io.File) Map(java.util.Map) GenericFile(org.apache.camel.component.file.GenericFile)

Example 2 with StringSource

use of org.apache.camel.StringSource in project camel by apache.

the class ProducerLocalRouteTest method consumeStockQuoteWebserviceWithCamelStringSourceInput.

@Test
public void consumeStockQuoteWebserviceWithCamelStringSourceInput() throws Exception {
    Object result = template.requestBody("direct:stockQuoteWebservice", new StringSource(xmlRequestForGoogleStockQuote));
    assertNotNull(result);
    assertTrue(result instanceof Source);
}
Also used : StringSource(org.apache.camel.StringSource) Source(javax.xml.transform.Source) StringSource(org.apache.camel.StringSource) Test(org.junit.Test)

Example 3 with StringSource

use of org.apache.camel.StringSource in project camel by apache.

the class SaxonConverterTest method setUp.

@Before
public void setUp() throws Exception {
    super.setUp();
    exchange = new DefaultExchange(context);
    evaluator = new XPathEvaluator();
    doc = evaluator.getConfiguration().buildDocumentTree(new StringSource(CONTENT)).getRootNode();
}
Also used : DefaultExchange(org.apache.camel.impl.DefaultExchange) XPathEvaluator(net.sf.saxon.xpath.XPathEvaluator) StringSource(org.apache.camel.StringSource) Before(org.junit.Before)

Example 4 with StringSource

use of org.apache.camel.StringSource in project camel by apache.

the class ValidatingProcessorFromSourceTest method setUp.

@Override
protected void setUp() throws Exception {
    super.setUp();
    File file = new File("src/test/resources/org/apache/camel/processor/ValidatingProcessor.xsd");
    String body = context.getTypeConverter().convertTo(String.class, file);
    validating = new ValidatingProcessor();
    validating.setSchemaSource(new StringSource(body));
    // loading scheme can be forced so lets try it
    validating.loadSchema();
}
Also used : ValidatingProcessor(org.apache.camel.processor.validation.ValidatingProcessor) StringSource(org.apache.camel.StringSource) File(java.io.File)

Example 5 with StringSource

use of org.apache.camel.StringSource in project camel by apache.

the class StreamCachingInterceptorTest method testNoConversionForOtherXmlSourceTypes.

public void testNoConversionForOtherXmlSourceTypes() throws Exception {
    a.expectedMessageCount(3);
    send(converter.toDOMSource(MESSAGE));
    send(new StringSource(MESSAGE));
    send(new BytesSource(MESSAGE.getBytes()));
    assertMockEndpointsSatisfied();
    for (Exchange exchange : a.getExchanges()) {
        assertFalse(exchange.getIn().getHeader(BODY_TYPE, Class.class).toString() + " shouldn't have been converted to StreamCache", exchange.getIn().getBody() instanceof StreamCache);
    }
}
Also used : Exchange(org.apache.camel.Exchange) BytesSource(org.apache.camel.BytesSource) StreamCache(org.apache.camel.StreamCache) StringSource(org.apache.camel.StringSource)

Aggregations

StringSource (org.apache.camel.StringSource)20 MockEndpoint (org.apache.camel.component.mock.MockEndpoint)8 Source (javax.xml.transform.Source)7 Test (org.junit.Test)6 StreamSource (javax.xml.transform.stream.StreamSource)4 File (java.io.File)3 BytesSource (org.apache.camel.BytesSource)3 InputStream (java.io.InputStream)2 StringWriter (java.io.StringWriter)2 Converter (org.apache.camel.Converter)2 StreamCache (org.apache.camel.StreamCache)2 WrappedFile (org.apache.camel.WrappedFile)2 ByteArrayInputStream (java.io.ByteArrayInputStream)1 ByteArrayOutputStream (java.io.ByteArrayOutputStream)1 IOException (java.io.IOException)1 ObjectInputStream (java.io.ObjectInputStream)1 ObjectOutputStream (java.io.ObjectOutputStream)1 OutputStream (java.io.OutputStream)1 PrintWriter (java.io.PrintWriter)1 Reader (java.io.Reader)1