From c949073f047b5c826a9e8f4d4932e7a5e26aaa81 Mon Sep 17 00:00:00 2001 From: Jem Day Date: Mon, 13 Mar 2023 12:07:41 -0700 Subject: [PATCH] Cleanup - SStill W.I.P Signed-off-by: Jem Day --- .../core/BaseMqttBinaryMessageReader.java | 22 ++++++- .../io/cloudevents/mqtt/core/MqttUtils.java | 24 +++++++- .../mqtt/hivemq/BinaryMessageReader.java | 16 +++++ .../mqtt/hivemq/MqttMessageFactory.java | 20 ++++++- .../mqtt/hivemq/V3MessageWriter.java | 24 ++++++-- .../mqtt/hivemq/V5MessageWriter.java | 16 +++++ .../cloudevents/mqtt/hivemq/package-info.java | 5 +- .../mqtt/hivemq/MqttMessageFactoryTest.java | 16 +++++ .../mqtt/hivemq/V3MessageWriterTest.java | 16 +++++ .../mqtt/hivemq/V3RoundTripTests.java | 16 +++++ .../mqtt/hivemq/V5MessageWriterTest.java | 16 +++++ .../mqtt/hivemq/V5RoundTripTests.java | 16 +++++ .../mqtt/paho/BinaryMessageReader.java | 16 +++++ .../mqtt/paho/PahoMessageUtils.java | 16 +++++ .../mqtt/paho/V3MessageWriter.java | 22 ++++++- .../mqtt/paho/V3MqttMessageFactory.java | 18 +++++- .../mqtt/paho/V5MessageWriter.java | 16 +++++ .../mqtt/paho/V5MqttMessageFactory.java | 19 +++++- .../cloudevents/mqtt/paho/package-info.java | 3 +- .../mqtt/paho/PahoMessageUtilsTest.java | 16 +++++ .../mqtt/paho/V3MessageFactoryTest.java | 32 +++++----- .../mqtt/paho/V3RoundTripTests.java | 51 ++++++++++------ .../mqtt/paho/V5MessageFactoryTest.java | 16 +++++ .../mqtt/paho/V5RoundTripTests.java | 16 +++++ docs/index.md | 3 +- docs/mqtt-paho.md | 41 ------------- docs/mqtt.md | 60 +++++++++++++++++++ 27 files changed, 453 insertions(+), 99 deletions(-) delete mode 100644 docs/mqtt-paho.md create mode 100644 docs/mqtt.md diff --git a/bindings/mqtt/core/src/main/java/io/cloudevents/mqtt/core/BaseMqttBinaryMessageReader.java b/bindings/mqtt/core/src/main/java/io/cloudevents/mqtt/core/BaseMqttBinaryMessageReader.java index a0aadea0..86f3c590 100644 --- a/bindings/mqtt/core/src/main/java/io/cloudevents/mqtt/core/BaseMqttBinaryMessageReader.java +++ b/bindings/mqtt/core/src/main/java/io/cloudevents/mqtt/core/BaseMqttBinaryMessageReader.java @@ -1,3 +1,19 @@ +/* + * Copyright 2018-Present The CloudEvents Authors + *

+ * Licensed 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 io.cloudevents.mqtt.core; import io.cloudevents.SpecVersion; @@ -25,9 +41,10 @@ public abstract class BaseMqttBinaryMessageReader extends BaseGenericBinaryMessa /** * Initialise the binary message reader. - * @param version The CloudEvent message version. + * + * @param version The CloudEvent message version. * @param contentType The assigned media content type. - * @param payload The raw data payload from the MQTT message. + * @param payload The raw data payload from the MQTT message. */ protected BaseMqttBinaryMessageReader(final SpecVersion version, final String contentType, final byte[] payload) { super(version, payload != null && payload.length > 0 ? BytesCloudEventData.wrap(payload) : null); @@ -82,6 +99,7 @@ public abstract class BaseMqttBinaryMessageReader extends BaseGenericBinaryMessa /** * Visit each MQTT user-property and invoke the supplied function. + * * @param fn The function to invoke for each MQTT User property. */ protected abstract void forEachUserProperty(BiConsumer fn); diff --git a/bindings/mqtt/core/src/main/java/io/cloudevents/mqtt/core/MqttUtils.java b/bindings/mqtt/core/src/main/java/io/cloudevents/mqtt/core/MqttUtils.java index 9efb2285..5953c0c4 100644 --- a/bindings/mqtt/core/src/main/java/io/cloudevents/mqtt/core/MqttUtils.java +++ b/bindings/mqtt/core/src/main/java/io/cloudevents/mqtt/core/MqttUtils.java @@ -1,3 +1,19 @@ +/* + * Copyright 2018-Present The CloudEvents Authors + *

+ * Licensed 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 io.cloudevents.mqtt.core; import io.cloudevents.core.format.EventFormat; @@ -8,9 +24,10 @@ import io.cloudevents.core.provider.EventFormatProvider; */ public class MqttUtils { - private MqttUtils() {} + private static final String DEFAULT_FORMAT = "application/cloudevents+json"; - private static final String DEFAULT_FORMAT = "application/cloudevents+json"; + private MqttUtils() { + } /** * Obtain the {@link EventFormat} to use when working with MQTT V3 @@ -18,7 +35,7 @@ public class MqttUtils { * * @return An event format. */ - public static EventFormat getDefaultEventFormat () { + public static EventFormat getDefaultEventFormat() { return EventFormatProvider.getInstance().resolveFormat(DEFAULT_FORMAT); @@ -26,6 +43,7 @@ public class MqttUtils { /** * Get the default content type to assume for MQTT messages. + * * @return A Content-Type */ public static final String getDefaultContentType() { diff --git a/bindings/mqtt/hivemq/src/main/java/io/cloudevents/mqtt/hivemq/BinaryMessageReader.java b/bindings/mqtt/hivemq/src/main/java/io/cloudevents/mqtt/hivemq/BinaryMessageReader.java index ac5d16c6..4b689dc0 100644 --- a/bindings/mqtt/hivemq/src/main/java/io/cloudevents/mqtt/hivemq/BinaryMessageReader.java +++ b/bindings/mqtt/hivemq/src/main/java/io/cloudevents/mqtt/hivemq/BinaryMessageReader.java @@ -1,3 +1,19 @@ +/* + * Copyright 2018-Present The CloudEvents Authors + *

+ * Licensed 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 io.cloudevents.mqtt.hivemq; import com.hivemq.client.mqtt.mqtt5.message.publish.Mqtt5Publish; diff --git a/bindings/mqtt/hivemq/src/main/java/io/cloudevents/mqtt/hivemq/MqttMessageFactory.java b/bindings/mqtt/hivemq/src/main/java/io/cloudevents/mqtt/hivemq/MqttMessageFactory.java index 3016c277..7a850d26 100644 --- a/bindings/mqtt/hivemq/src/main/java/io/cloudevents/mqtt/hivemq/MqttMessageFactory.java +++ b/bindings/mqtt/hivemq/src/main/java/io/cloudevents/mqtt/hivemq/MqttMessageFactory.java @@ -1,3 +1,19 @@ +/* + * Copyright 2018-Present The CloudEvents Authors + *

+ * Licensed 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 io.cloudevents.mqtt.hivemq; import com.hivemq.client.mqtt.datatypes.MqttUtf8String; @@ -20,7 +36,6 @@ import java.util.Optional; * A factory to obtain: * - {@link MessageReader} instances to read CloudEvents from MQTT messages. * - {@link MessageWriter} instances to write CloudEvents into MQTT messages. - * */ public class MqttMessageFactory { @@ -74,7 +89,7 @@ public class MqttMessageFactory { /** * Create a {@link MessageWriter} for an MQTT V3 Message. - * + *

* Only supports structured messages. * * @param builder {@link Mqtt3PublishBuilder.Complete} @@ -89,6 +104,7 @@ public class MqttMessageFactory { /** * Find the value of the CloudEvent 'specversion' in the MQTT V5 User Properties. + * * @param message An MQTT message. * @return spec version attribute content. */ diff --git a/bindings/mqtt/hivemq/src/main/java/io/cloudevents/mqtt/hivemq/V3MessageWriter.java b/bindings/mqtt/hivemq/src/main/java/io/cloudevents/mqtt/hivemq/V3MessageWriter.java index 9cbafdee..62a5ecf4 100644 --- a/bindings/mqtt/hivemq/src/main/java/io/cloudevents/mqtt/hivemq/V3MessageWriter.java +++ b/bindings/mqtt/hivemq/src/main/java/io/cloudevents/mqtt/hivemq/V3MessageWriter.java @@ -1,3 +1,19 @@ +/* + * Copyright 2018-Present The CloudEvents Authors + *

+ * Licensed 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 io.cloudevents.mqtt.hivemq; import com.hivemq.client.mqtt.mqtt3.message.publish.Mqtt3PublishBuilder; @@ -20,21 +36,21 @@ class V3MessageWriter implements MessageWriter create(SpecVersion version) throws CloudEventRWException { // No-Op - return null; + throw CloudEventRWException.newOther("Internal Error"); } @Override public Mqtt3PublishBuilder setEvent(EventFormat format, byte[] value) throws CloudEventRWException { // No-Op - return null; + throw CloudEventRWException.newOther("Internal Error"); } @Override public Mqtt3PublishBuilder writeStructured(CloudEvent event, String format) { - EventFormat eventFormat = EventFormatProvider.getInstance().resolveFormat(format); + final EventFormat eventFormat = EventFormatProvider.getInstance().resolveFormat(format); if (eventFormat != null) { - return writeStructured(event, EventFormatProvider.getInstance().resolveFormat(format)); + return writeStructured(event, eventFormat); } else { throw CloudEventRWException.newOther("Unsupported Format: " + format); } diff --git a/bindings/mqtt/hivemq/src/main/java/io/cloudevents/mqtt/hivemq/V5MessageWriter.java b/bindings/mqtt/hivemq/src/main/java/io/cloudevents/mqtt/hivemq/V5MessageWriter.java index 03fb2d81..0bb70369 100644 --- a/bindings/mqtt/hivemq/src/main/java/io/cloudevents/mqtt/hivemq/V5MessageWriter.java +++ b/bindings/mqtt/hivemq/src/main/java/io/cloudevents/mqtt/hivemq/V5MessageWriter.java @@ -1,3 +1,19 @@ +/* + * Copyright 2018-Present The CloudEvents Authors + *

+ * Licensed 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 io.cloudevents.mqtt.hivemq; import com.hivemq.client.mqtt.mqtt5.message.publish.Mqtt5PublishBuilder; diff --git a/bindings/mqtt/hivemq/src/main/java/io/cloudevents/mqtt/hivemq/package-info.java b/bindings/mqtt/hivemq/src/main/java/io/cloudevents/mqtt/hivemq/package-info.java index 2bbf2ebc..f3042254 100644 --- a/bindings/mqtt/hivemq/src/main/java/io/cloudevents/mqtt/hivemq/package-info.java +++ b/bindings/mqtt/hivemq/src/main/java/io/cloudevents/mqtt/hivemq/package-info.java @@ -1,14 +1,13 @@ /** * This module implements the MQTT binding specification using the * HiveMQ MQTT client library. - * + *

* Use the {@link io.cloudevents.mqtt.hivemq.MqttMessageFactory} to obtain * CloudEvent reader and writer instances. - * + *

* Both V3 and V5 versions of MQTT are supported. * * @since 2.5.0 - * */ package io.cloudevents.mqtt.hivemq; diff --git a/bindings/mqtt/hivemq/src/test/java/io/cloudevents/mqtt/hivemq/MqttMessageFactoryTest.java b/bindings/mqtt/hivemq/src/test/java/io/cloudevents/mqtt/hivemq/MqttMessageFactoryTest.java index 583248db..377a24fe 100644 --- a/bindings/mqtt/hivemq/src/test/java/io/cloudevents/mqtt/hivemq/MqttMessageFactoryTest.java +++ b/bindings/mqtt/hivemq/src/test/java/io/cloudevents/mqtt/hivemq/MqttMessageFactoryTest.java @@ -1,3 +1,19 @@ +/* + * Copyright 2018-Present The CloudEvents Authors + *

+ * Licensed 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 io.cloudevents.mqtt.hivemq; import com.hivemq.client.mqtt.mqtt3.message.publish.Mqtt3Publish; diff --git a/bindings/mqtt/hivemq/src/test/java/io/cloudevents/mqtt/hivemq/V3MessageWriterTest.java b/bindings/mqtt/hivemq/src/test/java/io/cloudevents/mqtt/hivemq/V3MessageWriterTest.java index 800589f1..79897805 100644 --- a/bindings/mqtt/hivemq/src/test/java/io/cloudevents/mqtt/hivemq/V3MessageWriterTest.java +++ b/bindings/mqtt/hivemq/src/test/java/io/cloudevents/mqtt/hivemq/V3MessageWriterTest.java @@ -1,3 +1,19 @@ +/* + * Copyright 2018-Present The CloudEvents Authors + *

+ * Licensed 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 io.cloudevents.mqtt.hivemq; import com.hivemq.client.mqtt.mqtt3.message.publish.Mqtt3Publish; diff --git a/bindings/mqtt/hivemq/src/test/java/io/cloudevents/mqtt/hivemq/V3RoundTripTests.java b/bindings/mqtt/hivemq/src/test/java/io/cloudevents/mqtt/hivemq/V3RoundTripTests.java index 828a56f4..0227d473 100644 --- a/bindings/mqtt/hivemq/src/test/java/io/cloudevents/mqtt/hivemq/V3RoundTripTests.java +++ b/bindings/mqtt/hivemq/src/test/java/io/cloudevents/mqtt/hivemq/V3RoundTripTests.java @@ -1,3 +1,19 @@ +/* + * Copyright 2018-Present The CloudEvents Authors + *

+ * Licensed 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 io.cloudevents.mqtt.hivemq; import com.hivemq.client.mqtt.mqtt3.message.publish.Mqtt3Publish; diff --git a/bindings/mqtt/hivemq/src/test/java/io/cloudevents/mqtt/hivemq/V5MessageWriterTest.java b/bindings/mqtt/hivemq/src/test/java/io/cloudevents/mqtt/hivemq/V5MessageWriterTest.java index 791b1246..0e9cdc49 100644 --- a/bindings/mqtt/hivemq/src/test/java/io/cloudevents/mqtt/hivemq/V5MessageWriterTest.java +++ b/bindings/mqtt/hivemq/src/test/java/io/cloudevents/mqtt/hivemq/V5MessageWriterTest.java @@ -1,3 +1,19 @@ +/* + * Copyright 2018-Present The CloudEvents Authors + *

+ * Licensed 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 io.cloudevents.mqtt.hivemq; import com.hivemq.client.mqtt.mqtt5.datatypes.Mqtt5UserProperty; diff --git a/bindings/mqtt/hivemq/src/test/java/io/cloudevents/mqtt/hivemq/V5RoundTripTests.java b/bindings/mqtt/hivemq/src/test/java/io/cloudevents/mqtt/hivemq/V5RoundTripTests.java index 5dd9d170..dd78177f 100644 --- a/bindings/mqtt/hivemq/src/test/java/io/cloudevents/mqtt/hivemq/V5RoundTripTests.java +++ b/bindings/mqtt/hivemq/src/test/java/io/cloudevents/mqtt/hivemq/V5RoundTripTests.java @@ -1,3 +1,19 @@ +/* + * Copyright 2018-Present The CloudEvents Authors + *

+ * Licensed 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 io.cloudevents.mqtt.hivemq; import com.hivemq.client.mqtt.mqtt5.message.publish.Mqtt5Publish; diff --git a/bindings/mqtt/paho/src/main/java/io/cloudevents/mqtt/paho/BinaryMessageReader.java b/bindings/mqtt/paho/src/main/java/io/cloudevents/mqtt/paho/BinaryMessageReader.java index e333a5af..fcbf631b 100644 --- a/bindings/mqtt/paho/src/main/java/io/cloudevents/mqtt/paho/BinaryMessageReader.java +++ b/bindings/mqtt/paho/src/main/java/io/cloudevents/mqtt/paho/BinaryMessageReader.java @@ -1,3 +1,19 @@ +/* + * Copyright 2018-Present The CloudEvents Authors + *

+ * Licensed 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 io.cloudevents.mqtt.paho; import io.cloudevents.SpecVersion; diff --git a/bindings/mqtt/paho/src/main/java/io/cloudevents/mqtt/paho/PahoMessageUtils.java b/bindings/mqtt/paho/src/main/java/io/cloudevents/mqtt/paho/PahoMessageUtils.java index 1710f7cd..098bab2d 100644 --- a/bindings/mqtt/paho/src/main/java/io/cloudevents/mqtt/paho/PahoMessageUtils.java +++ b/bindings/mqtt/paho/src/main/java/io/cloudevents/mqtt/paho/PahoMessageUtils.java @@ -1,3 +1,19 @@ +/* + * Copyright 2018-Present The CloudEvents Authors + *

+ * Licensed 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 io.cloudevents.mqtt.paho; import org.eclipse.paho.mqttv5.common.MqttMessage; diff --git a/bindings/mqtt/paho/src/main/java/io/cloudevents/mqtt/paho/V3MessageWriter.java b/bindings/mqtt/paho/src/main/java/io/cloudevents/mqtt/paho/V3MessageWriter.java index 18162c68..844e7ca6 100644 --- a/bindings/mqtt/paho/src/main/java/io/cloudevents/mqtt/paho/V3MessageWriter.java +++ b/bindings/mqtt/paho/src/main/java/io/cloudevents/mqtt/paho/V3MessageWriter.java @@ -1,9 +1,24 @@ +/* + * Copyright 2018-Present The CloudEvents Authors + *

+ * Licensed 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 io.cloudevents.mqtt.paho; import io.cloudevents.CloudEvent; import io.cloudevents.SpecVersion; import io.cloudevents.core.format.EventFormat; -import io.cloudevents.core.format.EventSerializationException; import io.cloudevents.core.message.MessageWriter; import io.cloudevents.core.provider.EventFormatProvider; import io.cloudevents.mqtt.core.MqttUtils; @@ -13,7 +28,7 @@ import org.eclipse.paho.client.mqttv3.MqttMessage; /** * A {@link MessageWriter} that writes an CloudEvent to a V3 MQTT Message. - * + *

* Note: This only supports Structured messages in JSON format as defined * by the MQTT CloudEvent binding specification. */ @@ -28,8 +43,9 @@ class V3MessageWriter implements MessageWriter, Mq /** * Ensure the supplied content type is appropriate for V3 messages * as-per binding specification. - * + *

* Raises exception if not valid. + * * @param contentType */ private void ensureValidContent(String contentType) { diff --git a/bindings/mqtt/paho/src/main/java/io/cloudevents/mqtt/paho/V3MqttMessageFactory.java b/bindings/mqtt/paho/src/main/java/io/cloudevents/mqtt/paho/V3MqttMessageFactory.java index b539cf5f..b4474b95 100644 --- a/bindings/mqtt/paho/src/main/java/io/cloudevents/mqtt/paho/V3MqttMessageFactory.java +++ b/bindings/mqtt/paho/src/main/java/io/cloudevents/mqtt/paho/V3MqttMessageFactory.java @@ -1,10 +1,24 @@ +/* + * Copyright 2018-Present The CloudEvents Authors + *

+ * Licensed 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 io.cloudevents.mqtt.paho; -import io.cloudevents.core.format.EventFormat; import io.cloudevents.core.message.MessageReader; import io.cloudevents.core.message.MessageWriter; import io.cloudevents.core.message.impl.GenericStructuredMessageReader; -import io.cloudevents.core.provider.EventFormatProvider; import io.cloudevents.mqtt.core.MqttUtils; import io.cloudevents.rw.CloudEventWriter; import org.eclipse.paho.client.mqttv3.MqttMessage; diff --git a/bindings/mqtt/paho/src/main/java/io/cloudevents/mqtt/paho/V5MessageWriter.java b/bindings/mqtt/paho/src/main/java/io/cloudevents/mqtt/paho/V5MessageWriter.java index e04b9f9c..ec10170b 100644 --- a/bindings/mqtt/paho/src/main/java/io/cloudevents/mqtt/paho/V5MessageWriter.java +++ b/bindings/mqtt/paho/src/main/java/io/cloudevents/mqtt/paho/V5MessageWriter.java @@ -1,3 +1,19 @@ +/* + * Copyright 2018-Present The CloudEvents Authors + *

+ * Licensed 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 io.cloudevents.mqtt.paho; import io.cloudevents.CloudEventData; diff --git a/bindings/mqtt/paho/src/main/java/io/cloudevents/mqtt/paho/V5MqttMessageFactory.java b/bindings/mqtt/paho/src/main/java/io/cloudevents/mqtt/paho/V5MqttMessageFactory.java index 65444d3e..20d7141f 100644 --- a/bindings/mqtt/paho/src/main/java/io/cloudevents/mqtt/paho/V5MqttMessageFactory.java +++ b/bindings/mqtt/paho/src/main/java/io/cloudevents/mqtt/paho/V5MqttMessageFactory.java @@ -1,3 +1,19 @@ +/* + * Copyright 2018-Present The CloudEvents Authors + *

+ * Licensed 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 io.cloudevents.mqtt.paho; import io.cloudevents.core.message.MessageReader; @@ -7,9 +23,6 @@ import io.cloudevents.core.message.impl.MessageUtils; import io.cloudevents.core.v1.CloudEventV1; import io.cloudevents.rw.CloudEventWriter; import org.eclipse.paho.mqttv5.common.MqttMessage; -import org.eclipse.paho.mqttv5.common.packet.UserProperty; - -import java.util.List; /** * MQTT V5 factory to : diff --git a/bindings/mqtt/paho/src/main/java/io/cloudevents/mqtt/paho/package-info.java b/bindings/mqtt/paho/src/main/java/io/cloudevents/mqtt/paho/package-info.java index 8f8e594f..13cfd876 100644 --- a/bindings/mqtt/paho/src/main/java/io/cloudevents/mqtt/paho/package-info.java +++ b/bindings/mqtt/paho/src/main/java/io/cloudevents/mqtt/paho/package-info.java @@ -1,11 +1,10 @@ /** * This module implements the MQTT binding specification using the * Paho MQTT client library. - * + *

* Separate factories are provided for MQTT V3 and V5. * * @since 2.5.0 - * */ package io.cloudevents.mqtt.paho; diff --git a/bindings/mqtt/paho/src/test/java/io/cloudevents/mqtt/paho/PahoMessageUtilsTest.java b/bindings/mqtt/paho/src/test/java/io/cloudevents/mqtt/paho/PahoMessageUtilsTest.java index abb9789f..a7661c30 100644 --- a/bindings/mqtt/paho/src/test/java/io/cloudevents/mqtt/paho/PahoMessageUtilsTest.java +++ b/bindings/mqtt/paho/src/test/java/io/cloudevents/mqtt/paho/PahoMessageUtilsTest.java @@ -1,3 +1,19 @@ +/* + * Copyright 2018-Present The CloudEvents Authors + *

+ * Licensed 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 io.cloudevents.mqtt.paho; import org.eclipse.paho.mqttv5.common.MqttMessage; diff --git a/bindings/mqtt/paho/src/test/java/io/cloudevents/mqtt/paho/V3MessageFactoryTest.java b/bindings/mqtt/paho/src/test/java/io/cloudevents/mqtt/paho/V3MessageFactoryTest.java index 9985682b..885296dd 100644 --- a/bindings/mqtt/paho/src/test/java/io/cloudevents/mqtt/paho/V3MessageFactoryTest.java +++ b/bindings/mqtt/paho/src/test/java/io/cloudevents/mqtt/paho/V3MessageFactoryTest.java @@ -1,32 +1,34 @@ +/* + * Copyright 2018-Present The CloudEvents Authors + *

+ * Licensed 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 io.cloudevents.mqtt.paho; import io.cloudevents.CloudEvent; -import io.cloudevents.SpecVersion; import io.cloudevents.core.format.EventDeserializationException; -import io.cloudevents.core.format.EventSerializationException; -import io.cloudevents.core.message.Encoding; import io.cloudevents.core.message.MessageReader; import io.cloudevents.core.message.MessageWriter; import io.cloudevents.core.mock.CSVFormat; import io.cloudevents.core.test.Data; -import io.cloudevents.core.v03.CloudEventV03; import io.cloudevents.rw.CloudEventRWException; -import io.cloudevents.types.Time; - import org.eclipse.paho.client.mqttv3.MqttMessage; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import java.beans.EventSetDescriptor; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static org.assertj.core.api.Assertions.assertThat; - public class V3MessageFactoryTest { @Test @@ -64,7 +66,7 @@ public class V3MessageFactoryTest { MessageReader reader = V3MqttMessageFactory.createReader(m); Assertions.assertNotNull(reader); - // This should fail + // This should fail // Expect an exception Assertions.assertThrows(EventDeserializationException.class, () -> { diff --git a/bindings/mqtt/paho/src/test/java/io/cloudevents/mqtt/paho/V3RoundTripTests.java b/bindings/mqtt/paho/src/test/java/io/cloudevents/mqtt/paho/V3RoundTripTests.java index 3d13fc11..6be040f6 100644 --- a/bindings/mqtt/paho/src/test/java/io/cloudevents/mqtt/paho/V3RoundTripTests.java +++ b/bindings/mqtt/paho/src/test/java/io/cloudevents/mqtt/paho/V3RoundTripTests.java @@ -1,11 +1,25 @@ +/* + * Copyright 2018-Present The CloudEvents Authors + *

+ * Licensed 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 io.cloudevents.mqtt.paho; import io.cloudevents.CloudEvent; import io.cloudevents.core.format.EventFormat; import io.cloudevents.core.message.MessageReader; import io.cloudevents.core.message.MessageWriter; -import io.cloudevents.core.mock.CSVFormat; -import io.cloudevents.core.provider.EventFormatProvider; import io.cloudevents.core.test.Data; import io.cloudevents.jackson.JsonFormat; import org.eclipse.paho.client.mqttv3.MqttMessage; @@ -25,6 +39,23 @@ import java.util.stream.Stream; public class V3RoundTripTests { + /** + * This test set is limited owing to the the fact that: + * (a) We only support JSON Format + * (b) Round-tripping of events with JSON 'data' doesn't reliably work owing to the way the equality tests work on the event. + * + * @return + */ + static Stream simpleEvents() { + return Stream.of( + Data.V03_MIN, + Data.V03_WITH_TEXT_DATA, + Data.V1_MIN, + Data.V1_WITH_TEXT_DATA, + Data.V1_WITH_XML_DATA + ); + } + @ParameterizedTest @MethodSource("simpleEvents") public void roundTrip(CloudEvent ce) { @@ -53,20 +84,4 @@ public class V3RoundTripTests { } - /** - * This test set is limited owing to the the fact that: - * (a) We only support JSON Format - * (b) Round-tripping of events with JSON 'data' doesn't reliably work owing to the way the equality tests work on the event. - * @return - */ - static Stream simpleEvents() { - return Stream.of( - Data.V03_MIN, - Data.V03_WITH_TEXT_DATA, - Data.V1_MIN, - Data.V1_WITH_TEXT_DATA, - Data.V1_WITH_XML_DATA - ); - } - } diff --git a/bindings/mqtt/paho/src/test/java/io/cloudevents/mqtt/paho/V5MessageFactoryTest.java b/bindings/mqtt/paho/src/test/java/io/cloudevents/mqtt/paho/V5MessageFactoryTest.java index a8d02acf..dc3402c0 100644 --- a/bindings/mqtt/paho/src/test/java/io/cloudevents/mqtt/paho/V5MessageFactoryTest.java +++ b/bindings/mqtt/paho/src/test/java/io/cloudevents/mqtt/paho/V5MessageFactoryTest.java @@ -1,3 +1,19 @@ +/* + * Copyright 2018-Present The CloudEvents Authors + *

+ * Licensed 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 io.cloudevents.mqtt.paho; import io.cloudevents.CloudEvent; diff --git a/bindings/mqtt/paho/src/test/java/io/cloudevents/mqtt/paho/V5RoundTripTests.java b/bindings/mqtt/paho/src/test/java/io/cloudevents/mqtt/paho/V5RoundTripTests.java index c50fb184..f692283a 100644 --- a/bindings/mqtt/paho/src/test/java/io/cloudevents/mqtt/paho/V5RoundTripTests.java +++ b/bindings/mqtt/paho/src/test/java/io/cloudevents/mqtt/paho/V5RoundTripTests.java @@ -1,3 +1,19 @@ +/* + * Copyright 2018-Present The CloudEvents Authors + *

+ * Licensed 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 io.cloudevents.mqtt.paho; import io.cloudevents.CloudEvent; diff --git a/docs/index.md b/docs/index.md index ef174600..8078c4e3 100644 --- a/docs/index.md +++ b/docs/index.md @@ -32,7 +32,8 @@ Using the Java SDK you can: | AMQP Protocol Binding | :x: | :x: | | - [Proton](amqp-proton.md) | :heavy_check_mark: | :heavy_check_mark: | | MQTT Protocol Binding | :x: | :x: | - | - [Paho](mqtt-paho.md) | :heavy_check_mark: | :heavy_check_mark: | + | - [Paho](mqtt.md) | :heavy_check_mark: | :heavy_check_mark: | + | - [HiveMQ](mqtt.md) | :heavy_check_mark: | :heavy_check_mark: | | AVRO Event Format | :x: | :x: | | HTTP Protocol Binding | :heavy_check_mark: | :heavy_check_mark: | | - [Vert.x](http-vertx.md) | :heavy_check_mark: | :heavy_check_mark: | diff --git a/docs/mqtt-paho.md b/docs/mqtt-paho.md deleted file mode 100644 index b529196d..00000000 --- a/docs/mqtt-paho.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: CloudEvents MQTT (Paho) -nav_order: 5 ---- - -# CloudEvents MQTT Paho - -This module implements `MessageReader` and `MessageWriter` using the Paho -library. - -It currently only support MQTT Version 5. - -For Maven based projects, use the following to include the `Paho` MQTT Binding - -```xml - - io.cloudevents - cloudevents-mqtt-paho - 2.5.0 - -``` - -# Sending & Receiving CloudEvents - -The `PahoMessageFactory` provides methods to create CloudEvent `MessageReader` and `MessageWriter` -instances that are used to encode and decode CloudEvents into MQTT messages. - -```java -public final class PahoMessageFactory { - - public static MessageReader createReader(MqttMessage mqttMessage); - - public static MessageWriter createWriter(); - -} -``` - -## Reading CloudEvents - -## Sending CloudEvents - diff --git a/docs/mqtt.md b/docs/mqtt.md new file mode 100644 index 00000000..4d1aacee --- /dev/null +++ b/docs/mqtt.md @@ -0,0 +1,60 @@ +--- +title: CloudEvents MQTT +nav_order: 5 +--- + +# MQTT Support + +The SDK supports both V3 and V5 MQTT binding specifications via these Java client libraries: + + * [Paho]() + * [HiveMQ]() + +NOTE: MQTT V3 *only* supports structured mode transfer of CloudEVents. Operations related to binary mode transmission +are either not available or will throw runtime exceptions if an attempt is made to use them. + +Both client library implementations rely on a *provided* maven dependency. + +# General Usage + +There is a slight variance in usage between the two supported client libraries owing to the way those clients +have implemented support for the two versions of MQTT but the general pattern is the same as every other protocol +binding. + +## Creating a message from a CloudEvent + + 1. Obtain a `MessageWriter` from a factory. + 2. Use the writer to populate the MQTT message using structured or binary mode. + * `mqttMessage = messageWriter.writeBinary(cloudEvent);` or, + * `mqttMessage = messageWriter.writeStructured(cloudEvent, eventFormat);` + +## Creating a CloudEvent from a message. + + 1. Obtain a 'MessageReader' from a message factory for an MQTT message. + 2. Obtain a CloudEvent from the reader. + * _CloudEvent cloudEvent = reader.toEvent();_ + + +# PAHO Client Usage + +## Maven + +```xml + + io.cloudevents + cloudevents-mqtt-paho + 2.x.y + +``` + +# HiveMQ Client Usage + +## Maven + +```xml + + io.cloudevents + cloudevents-mqtt-hivemq + 2.x.y + +```