Search in sources :

Example 1 with InternalInvalidByteArrayValueException

use of nl.teslanet.mule.connectors.coap.internal.exceptions.InternalInvalidByteArrayValueException in project mule-coap-connector by teslanet-nl.

the class Listener method onSuccess.

@OnSuccess
@MediaType(value = "*/*", strict = false)
public void onSuccess(@Optional @NullSafe @Alias("response") @Placement(tab = "Response", order = 1) ResponseParams response, @Optional @NullSafe @Alias("response-options") @Expression(ExpressionSupport.SUPPORTED) @Summary("The CoAP options to send with the response.") @Placement(tab = "Response", order = 2) ResponseOptions responseOptions, SourceCallbackContext callbackContext) throws InternalInvalidByteArrayValueException, InternalInvalidResponseCodeException, IOException, InvalidETagException, InternalInvalidOptionValueException {
    CoAPResponseCode defaultCoapResponseCode = (CoAPResponseCode) callbackContext.getVariable("defaultCoAPResponseCode").get();
    Response coapResponse = new Response(AttributeUtils.toResponseCode(response.getResponseCode(), defaultCoapResponseCode));
    // TODO give user control
    TypedValue<Object> responsePayload = response.getResponsePayload();
    coapResponse.getOptions().setContentFormat(MediaTypeMediator.toContentFormat(responsePayload.getDataType().getMediaType()));
    if (responseOptions != null) {
        MessageUtils.copyOptions(responseOptions, coapResponse.getOptions(), transformationService);
    }
    // TODO add streaming & blockwise cooperation
    try {
        coapResponse.setPayload(MessageUtils.toBytes(responsePayload, transformationService));
    } catch (Exception e) {
        throw new InternalInvalidByteArrayValueException("Cannot convert payload to byte[]", e);
    }
    ((CoapExchange) callbackContext.getVariable("CoapExchange").get()).respond(coapResponse);
}
Also used : Response(org.eclipse.californium.core.coap.Response) EmitsResponse(org.mule.runtime.extension.api.annotation.source.EmitsResponse) InternalInvalidByteArrayValueException(nl.teslanet.mule.connectors.coap.internal.exceptions.InternalInvalidByteArrayValueException) CoAPResponseCode(nl.teslanet.mule.connectors.coap.api.CoAPResponseCode) InvalidETagException(nl.teslanet.mule.connectors.coap.api.error.InvalidETagException) InternalInvalidOptionValueException(nl.teslanet.mule.connectors.coap.internal.exceptions.InternalInvalidOptionValueException) MuleException(org.mule.runtime.api.exception.MuleException) InternalInvalidResponseCodeException(nl.teslanet.mule.connectors.coap.internal.exceptions.InternalInvalidResponseCodeException) InternalResourceUriException(nl.teslanet.mule.connectors.coap.internal.exceptions.InternalResourceUriException) IOException(java.io.IOException) InternalInvalidByteArrayValueException(nl.teslanet.mule.connectors.coap.internal.exceptions.InternalInvalidByteArrayValueException) DefaultMuleException(org.mule.runtime.api.exception.DefaultMuleException) InternalUriPatternException(nl.teslanet.mule.connectors.coap.internal.exceptions.InternalUriPatternException) CoapExchange(org.eclipse.californium.core.server.resources.CoapExchange) OnSuccess(org.mule.runtime.extension.api.annotation.execution.OnSuccess) MediaType(org.mule.runtime.extension.api.annotation.param.MediaType)

Example 2 with InternalInvalidByteArrayValueException

use of nl.teslanet.mule.connectors.coap.internal.exceptions.InternalInvalidByteArrayValueException in project mule-coap-connector by teslanet-nl.

the class MessageUtils method copyOptions.

/**
 * Copy options from {@link ResponseOptions} to {@link OptionSet}.
 * @param responseOptions to copy from
 * @param optionSet to copy to
 * @throws InternalInvalidOptionValueException
 * @throws InvalidETagException when an option containes invalid ETag value
 * @throws IOException when an option stream throws an error.
 */
public static void copyOptions(ResponseOptions responseOptions, OptionSet optionSet, TransformationService transformationService) throws InternalInvalidOptionValueException, IOException, InvalidETagException {
    if (responseOptions.getEtag() != null) {
        ETag etag = MessageUtils.toETag(responseOptions.getEtag(), transformationService);
        if (etag.isEmpty())
            throw new InternalInvalidOptionValueException("ETag", "empty etag is not valid");
        optionSet.addETag(etag.getValue());
    }
    if (responseOptions.getContentFormat() != null) {
        optionSet.setContentFormat(responseOptions.getContentFormat());
    }
    if (responseOptions.getMaxAge() != null) {
        optionSet.setMaxAge(responseOptions.getMaxAge());
    }
    if (responseOptions.getLocationPath() != null) {
        optionSet.setLocationPath(responseOptions.getLocationPath());
    }
    if (responseOptions.getLocationQuery() != null) {
        for (AbstractQueryParam param : responseOptions.getLocationQuery()) {
            optionSet.addLocationQuery(param.toString());
        }
    }
    if (responseOptions.getResponseSize() != null) {
        optionSet.setSize2(responseOptions.getResponseSize());
    }
    if (responseOptions.getAcceptableRequestSize() != null) {
        optionSet.setSize1(responseOptions.getAcceptableRequestSize());
    }
    for (OtherOption otherOption : responseOptions.getOtherResponseOptions()) {
        try {
            optionSet.addOption(new Option(otherOption.getNumber(), toBytes(otherOption.getValue(), transformationService)));
        } catch (InternalInvalidByteArrayValueException e) {
            throw new InternalInvalidOptionValueException("Other-Option", "Number { " + otherOption.getNumber() + " }", e);
        }
    }
}
Also used : OtherOption(nl.teslanet.mule.connectors.coap.api.options.OtherOption) ETag(nl.teslanet.mule.connectors.coap.api.options.ETag) InternalInvalidByteArrayValueException(nl.teslanet.mule.connectors.coap.internal.exceptions.InternalInvalidByteArrayValueException) AbstractQueryParam(nl.teslanet.mule.connectors.coap.api.query.AbstractQueryParam) BlockOption(org.eclipse.californium.core.coap.BlockOption) OtherOption(nl.teslanet.mule.connectors.coap.api.options.OtherOption) Option(org.eclipse.californium.core.coap.Option) InternalInvalidOptionValueException(nl.teslanet.mule.connectors.coap.internal.exceptions.InternalInvalidOptionValueException)

Aggregations

InternalInvalidByteArrayValueException (nl.teslanet.mule.connectors.coap.internal.exceptions.InternalInvalidByteArrayValueException)2 InternalInvalidOptionValueException (nl.teslanet.mule.connectors.coap.internal.exceptions.InternalInvalidOptionValueException)2 IOException (java.io.IOException)1 CoAPResponseCode (nl.teslanet.mule.connectors.coap.api.CoAPResponseCode)1 InvalidETagException (nl.teslanet.mule.connectors.coap.api.error.InvalidETagException)1 ETag (nl.teslanet.mule.connectors.coap.api.options.ETag)1 OtherOption (nl.teslanet.mule.connectors.coap.api.options.OtherOption)1 AbstractQueryParam (nl.teslanet.mule.connectors.coap.api.query.AbstractQueryParam)1 InternalInvalidResponseCodeException (nl.teslanet.mule.connectors.coap.internal.exceptions.InternalInvalidResponseCodeException)1 InternalResourceUriException (nl.teslanet.mule.connectors.coap.internal.exceptions.InternalResourceUriException)1 InternalUriPatternException (nl.teslanet.mule.connectors.coap.internal.exceptions.InternalUriPatternException)1 BlockOption (org.eclipse.californium.core.coap.BlockOption)1 Option (org.eclipse.californium.core.coap.Option)1 Response (org.eclipse.californium.core.coap.Response)1 CoapExchange (org.eclipse.californium.core.server.resources.CoapExchange)1 DefaultMuleException (org.mule.runtime.api.exception.DefaultMuleException)1 MuleException (org.mule.runtime.api.exception.MuleException)1 OnSuccess (org.mule.runtime.extension.api.annotation.execution.OnSuccess)1 MediaType (org.mule.runtime.extension.api.annotation.param.MediaType)1 EmitsResponse (org.mule.runtime.extension.api.annotation.source.EmitsResponse)1