The behavior you're seeing is expected at this point given the fix for
ARTEMIS-4234 [1]. The capabilities of the JUnit resources are very basic,
and it doesn't really make sense to make them support more complex
use-cases when the client API already does this. Therefore you just need to
create your own consumer, e.g.:
@Test
void testInputStream() throws Exception {
File file = new
File(Objects.requireNonNull(getClass().getResource("/testFile.txt")).toURI());
String content = Files.readString(file.toPath());
InputStream inputStream = new FileInputStream(file);
BufferedInputStream bufferedInputStream = new
BufferedInputStream(inputStream);
jmsTemplate.send(LargeMessageTest.TOPIC_NAME, session -> {
javax.jms.Message msg = session.createBytesMessage();
msg.setObjectProperty("JMS_AMQ_InputStream",
bufferedInputStream);
return msg;
});
ServerLocator serverLocator =
ActiveMQClient.createServerLocator(embeddedActiveMQResource.getVmURL());
ClientSessionFactory clientSessionFactory =
serverLocator.createSessionFactory();
ClientSession session = clientSessionFactory.createSession();
ByteArrayOutputStream byteArrayOutputStream = new
ByteArrayOutputStream();
BufferedOutputStream bufferedOutput = new
BufferedOutputStream(byteArrayOutputStream);
try (ClientConsumer consumer = session.createConsumer(TOPIC_NAME)) {
session.start();
ClientMessage receivedMessage = consumer.receive();
receivedMessage.saveToOutputStream(bufferedOutput);
}
String readContent = byteArrayOutputStream.toString();
assertEquals(content, readContent);
}
Justin
[1] https://issues.apache.org/jira/browse/ARTEMIS-4234
On Thu, Aug 17, 2023 at 12:13 PM Vojtěch Frič <[email protected]>
wrote:
> Hi.
>
> After upgrading to Artemis 2.30 which contains changes from
> https://issues.apache.org/jira/browse/ARTEMIS-4234 one of our tests
> started failing. We were able to track it down to the previously
> mentioned issue.
>
> Fixing of the leaking ClientConsumer resources in the
> EmbeddedActiveMQResource causes the underlying data stream to be mark as
> closed as well. This means it is not possible to actually save the
> received message into a buffer. The result is AMQ219023:
>
>
> ActiveMQIllegalStateException[errorType=ILLEGAL_STATE message=AMQ219023:
> The large message lost connection with its session, either because of a
> rollback or a closed session
> ]
> at
>
> org.apache.activemq.artemis.core.client.impl.LargeMessageControllerImpl.saveBuffer(LargeMessageControllerImpl.java:265)
> at
>
> org.apache.activemq.artemis.core.client.impl.ClientLargeMessageImpl.saveToOutputStream(ClientLargeMessageImpl.java:113)
> at LargeMessageTest.testInputStream(LargeMessageTest.java:68)
>
>
> I have a working example showing this error available here
> https://github.com/sutr90/artemis-junit-large-message/tree/master
>
>
> Can you advise how to fix this test, or confirm that this is expected
> behavior of the EmbeddedActiveMQResource?
>
>
> Thank you.
>
> Vojtěch Frič
>
>
> --
> *This email is intended solely for the addressee(s) and all its contents,
> including all attachments and files transmitted with it, represent
> confidential information. Unauthorized distribution, modification or
> disclosure of its contents and unauthorized reliance on its contents are
> prohibited. If you have received this email in error, please notify the
> sender immediately by return email. Please then delete the email from your
> system and do not (i) copy or distribute it, (ii) rely on its contents, or
> (iii) disclose its contents to any person.*
>
>