public SampleResult sample()

in src/protocol/jms/src/main/java/org/apache/jmeter/protocol/jms/sampler/SubscriberSampler.java [143:229]


    public SampleResult sample() {
        // run threadStarted only if Destination setup on each sample
        if (!isDestinationStatic()) {
            threadStarted(true);
        }
        SampleResult result = new SampleResult();
        result.setDataType(SampleResult.TEXT);
        result.setSampleLabel(getName());
        result.sampleStart();
        if (exceptionDuringInit != null) {
            result.sampleEnd();
            result.setSuccessful(false);
            result.setResponseCode("000");
            result.setResponseMessage(exceptionDuringInit.toString());
            handleErrorAndAddTemporize(true);
            return result;
        }
        if (stopBetweenSamples){ // If so, we need to start collection here
            try {
                SUBSCRIBER.start();
            } catch (JMSException e) {
                log.warn("Problem starting subscriber", e);
            }
        }
        StringBuilder buffer = new StringBuilder();
        StringBuilder propBuffer = new StringBuilder();

        int loop = getIterationCount();
        int read = 0;

        long until = 0L;
        long now = System.currentTimeMillis();
        if (timeout > 0) {
            until = timeout + now;
        }
        while (!interrupted
                && (until == 0 || now < until)
                && read < loop) {
            Message msg;
            try {
                msg = SUBSCRIBER.getMessage(calculateWait(until, now));
                if (msg != null){
                    read++;
                    extractContent(buffer, propBuffer, msg, read == loop);
                }
            } catch (JMSException e) {
                String errorCode = Optional.ofNullable(e.getErrorCode()).orElse("");
                log.warn("Error [{}] {}", errorCode, e.toString(), e);

                handleErrorAndAddTemporize(getIsReconnectErrorCode().test(errorCode));
            }
            now = System.currentTimeMillis();
        }
        result.sampleEnd();
        if (getReadResponseAsBoolean()) {
            result.setResponseData(buffer.toString(), result.getDataEncodingWithDefault());
        } else {
            result.setBytes((long)buffer.toString().length());
        }
        result.setResponseHeaders(propBuffer.toString());
        if (read == 0) {
            result.setResponseCode("404"); // Not found
            result.setSuccessful(false);
        } else if (read < loop) { // Not enough messages found
            result.setResponseCode("500"); // Server error
            result.setSuccessful(false);
        } else {
            result.setResponseCodeOK();
            result.setSuccessful(true);
        }
        result.setResponseMessage(read + " message(s) received successfully of " + loop + " expected");
        result.setSamplerData(loop + " messages expected");
        result.setSampleCount(read);

        if (stopBetweenSamples){
            try {
                SUBSCRIBER.stop();
            } catch (JMSException e) {
                log.warn("Problem stopping subscriber", e);
            }
        }
        // run threadFinished only if Destination setup on each sample (stop Listen queue)
        if (!isDestinationStatic()) {
            threadFinished(true);
        }
        return result;
    }