Search in sources :

Example 6 with ErrorResponse

use of org.apache.directory.api.dsmlv2.response.ErrorResponse in project directory-ldap-api by apache.

the class BatchResponseTest method testResponseWith1ErrorResponse.

/**
 * Test parsing of a Response with the 1 ErrorResponse
 */
@Test
public void testResponseWith1ErrorResponse() {
    Dsmlv2ResponseParser parser = null;
    try {
        parser = new Dsmlv2ResponseParser(getCodec());
        parser.setInput(BatchResponseTest.class.getResource("response_with_1_ErrorResponse.xml").openStream(), "UTF-8");
        parser.parse();
    } catch (Exception e) {
        fail(e.getMessage());
    }
    BatchResponseDsml batchResponse = parser.getBatchResponse();
    assertEquals(1, batchResponse.getResponses().size());
    DsmlDecorator<? extends Response> response = batchResponse.getCurrentResponse();
    if (response instanceof ErrorResponse) {
        assertTrue(true);
    } else {
        fail();
    }
}
Also used : BatchResponseDsml(org.apache.directory.api.dsmlv2.response.BatchResponseDsml) Dsmlv2ResponseParser(org.apache.directory.api.dsmlv2.Dsmlv2ResponseParser) ErrorResponse(org.apache.directory.api.dsmlv2.response.ErrorResponse) Test(org.junit.Test) AbstractResponseTest(org.apache.directory.api.dsmlv2.AbstractResponseTest)

Example 7 with ErrorResponse

use of org.apache.directory.api.dsmlv2.response.ErrorResponse in project directory-ldap-api by apache.

the class Dsmlv2Engine method processDSML.

/**
 * Processes the DSML batch request and writes the response of each operation will be
 * written to the given response stream if it is not null
 *
 * @param outStream the stream to which the responses will be written, can be null
 * @throws IOException If we had an issue while reading or writing the data
 */
protected void processDSML(OutputStream outStream) throws IOException {
    BufferedWriter respWriter = null;
    if (outStream != null) {
        respWriter = new BufferedWriter(new OutputStreamWriter(outStream, StandardCharsets.UTF_8));
        if (generateSoapResp) {
            respWriter.write("<Envelope ");
            Namespace soapNs = new Namespace(null, "http://www.w3.org/2001/12/soap-envelope");
            soapNs.write(respWriter);
            respWriter.write("><Body>");
        }
    }
    // Binding to LDAP Server
    try {
        bind(1);
    } catch (Exception e) {
        LOG.warn("Failed to bind", e);
        // Unable to connect to server
        // We create a new ErrorResponse and return the XML response.
        ErrorResponse errorResponse = new ErrorResponse(0, ErrorResponseType.COULD_NOT_CONNECT, e.getLocalizedMessage());
        batchResponse.addResponse(errorResponse);
        if (respWriter != null) {
            respWriter.write(batchResponse.toDsml());
            if (generateSoapResp) {
                respWriter.write(BODY_ENVELOPE);
            }
            respWriter.flush();
        }
        return;
    }
    // - Getting and registering options from BatchRequest
    try {
        processBatchRequest();
    } catch (XmlPullParserException e) {
        // We create a new ErrorResponse and return the XML response.
        ErrorResponse errorResponse = new ErrorResponse(0, ErrorResponseType.MALFORMED_REQUEST, I18n.err(I18n.ERR_03001, e.getLocalizedMessage(), e.getLineNumber(), e.getColumnNumber()));
        batchResponse.addResponse(errorResponse);
        if (respWriter != null) {
            respWriter.write(batchResponse.toDsml());
            if (generateSoapResp) {
                respWriter.write(BODY_ENVELOPE);
            }
            respWriter.flush();
        }
        return;
    }
    if (respWriter != null) {
        StringBuilder sb = new StringBuilder();
        sb.append("<batchResponse ");
        sb.append(ParserUtils.DSML_NAMESPACE.asXML());
        // a space to separate the namespace declarations
        sb.append(" ");
        sb.append(ParserUtils.XSD_NAMESPACE.asXML());
        // a space to separate the namespace declarations
        sb.append(" ");
        sb.append(ParserUtils.XSI_NAMESPACE.asXML());
        sb.append(" requestID=\"");
        sb.append(batchRequest.getRequestID());
        sb.append("\">");
        respWriter.write(sb.toString());
    }
    // Processing each request:
    // - Getting a new request
    // - Checking if the request is well formed
    // - Sending the request to the server
    // - Getting and converting reponse(s) as XML
    // - Looping until last request
    DsmlDecorator<? extends Request> request = null;
    try {
        request = parser.getNextRequest();
    } catch (XmlPullParserException e) {
        LOG.warn("Failed while getting next request", e);
        int reqId = 0;
        // We create a new ErrorResponse and return the XML response.
        ErrorResponse errorResponse = new ErrorResponse(reqId, ErrorResponseType.MALFORMED_REQUEST, I18n.err(I18n.ERR_03001, e.getLocalizedMessage(), e.getLineNumber(), e.getColumnNumber()));
        batchResponse.addResponse(errorResponse);
        if (respWriter != null) {
            respWriter.write(batchResponse.toDsml());
            if (generateSoapResp) {
                respWriter.write(BODY_ENVELOPE);
            }
            respWriter.flush();
        }
        return;
    }
    // (Request == null when there's no more request to process)
    while (request != null) {
        // Checking the request has a requestID attribute if Processing = Parallel and ResponseOrder = Unordered
        if ((batchRequest.getProcessing().equals(Processing.PARALLEL)) && (batchRequest.getResponseOrder().equals(ResponseOrder.UNORDERED)) && (request.getDecorated().getMessageId() <= 0)) {
            // Then we have to send an errorResponse
            ErrorResponse errorResponse = new ErrorResponse(0, ErrorResponseType.MALFORMED_REQUEST, I18n.err(I18n.ERR_03002));
            if (respWriter != null) {
                writeResponse(respWriter, errorResponse);
            } else {
                batchResponse.addResponse(errorResponse);
            }
            break;
        }
        try {
            processRequest(request, respWriter);
        } catch (Exception e) {
            LOG.warn("Failed to process request", e);
            // We create a new ErrorResponse and return the XML response.
            ErrorResponse errorResponse = new ErrorResponse(request.getDecorated().getMessageId(), ErrorResponseType.GATEWAY_INTERNAL_ERROR, I18n.err(I18n.ERR_03003, e.getMessage()));
            if (respWriter != null) {
                writeResponse(respWriter, errorResponse);
            } else {
                batchResponse.addResponse(errorResponse);
            }
            break;
        }
        // Checking if we need to exit processing (if an error has occurred if onError == Exit)
        if (exit) {
            break;
        }
        // Getting next request
        try {
            request = parser.getNextRequest();
        } catch (XmlPullParserException e) {
            // We create a new ErrorResponse and return the XML response.
            ErrorResponse errorResponse = new ErrorResponse(0, ErrorResponseType.MALFORMED_REQUEST, I18n.err(I18n.ERR_03001, e.getLocalizedMessage(), e.getLineNumber(), e.getColumnNumber()));
            if (respWriter != null) {
                writeResponse(respWriter, errorResponse);
            } else {
                batchResponse.addResponse(errorResponse);
            }
            break;
        }
    }
    if (respWriter != null) {
        respWriter.write("</batchResponse>");
        if (generateSoapResp) {
            respWriter.write(BODY_ENVELOPE);
        }
        respWriter.flush();
    }
}
Also used : OutputStreamWriter(java.io.OutputStreamWriter) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) Namespace(org.dom4j.Namespace) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) EncoderException(org.apache.directory.api.asn1.EncoderException) DecoderException(org.apache.directory.api.asn1.DecoderException) IOException(java.io.IOException) LdapException(org.apache.directory.api.ldap.model.exception.LdapException) BufferedWriter(java.io.BufferedWriter) ErrorResponse(org.apache.directory.api.dsmlv2.response.ErrorResponse)

Example 8 with ErrorResponse

use of org.apache.directory.api.dsmlv2.response.ErrorResponse in project directory-ldap-api by apache.

the class BatchResponseTest method testResponseWith2ErrorResponse.

/**
 * Test parsing of a Response with the 2 ErrorResponse
 */
@Test
public void testResponseWith2ErrorResponse() {
    Dsmlv2ResponseParser parser = null;
    try {
        parser = new Dsmlv2ResponseParser(getCodec());
        parser.setInput(BatchResponseTest.class.getResource("response_with_2_ErrorResponse.xml").openStream(), "UTF-8");
        parser.parse();
    } catch (Exception e) {
        fail(e.getMessage());
    }
    BatchResponseDsml batchResponse = parser.getBatchResponse();
    assertEquals(2, batchResponse.getResponses().size());
    DsmlDecorator<? extends Response> response = batchResponse.getCurrentResponse();
    if (response instanceof ErrorResponse) {
        assertTrue(true);
    } else {
        fail();
    }
}
Also used : BatchResponseDsml(org.apache.directory.api.dsmlv2.response.BatchResponseDsml) Dsmlv2ResponseParser(org.apache.directory.api.dsmlv2.Dsmlv2ResponseParser) ErrorResponse(org.apache.directory.api.dsmlv2.response.ErrorResponse) Test(org.junit.Test) AbstractResponseTest(org.apache.directory.api.dsmlv2.AbstractResponseTest)

Example 9 with ErrorResponse

use of org.apache.directory.api.dsmlv2.response.ErrorResponse in project directory-ldap-api by apache.

the class ErrorResponseTest method testResponseWithTypeCouldNotConnect.

/**
 * Test parsing of a response with type == couldNotConnect
 */
@Test
public void testResponseWithTypeCouldNotConnect() {
    Dsmlv2ResponseParser parser = null;
    try {
        parser = new Dsmlv2ResponseParser(getCodec());
        parser.setInput(ErrorResponseTest.class.getResource("response_with_type_couldNotConnect.xml").openStream(), "UTF-8");
        parser.parse();
    } catch (Exception e) {
        fail(e.getMessage());
    }
    ErrorResponse errorResponse = (ErrorResponse) parser.getBatchResponse().getCurrentResponse();
    assertEquals(ErrorResponseType.COULD_NOT_CONNECT, errorResponse.getErrorType());
}
Also used : Dsmlv2ResponseParser(org.apache.directory.api.dsmlv2.Dsmlv2ResponseParser) ErrorResponse(org.apache.directory.api.dsmlv2.response.ErrorResponse) Test(org.junit.Test) AbstractResponseTest(org.apache.directory.api.dsmlv2.AbstractResponseTest)

Example 10 with ErrorResponse

use of org.apache.directory.api.dsmlv2.response.ErrorResponse in project directory-ldap-api by apache.

the class ErrorResponseTest method testResponseWithTypeUnresolvableURI.

/**
 * Test parsing of a response with type == unresolvableURI
 */
@Test
public void testResponseWithTypeUnresolvableURI() {
    Dsmlv2ResponseParser parser = null;
    try {
        parser = new Dsmlv2ResponseParser(getCodec());
        parser.setInput(ErrorResponseTest.class.getResource("response_with_type_unresolvableURI.xml").openStream(), "UTF-8");
        parser.parse();
    } catch (Exception e) {
        fail(e.getMessage());
    }
    ErrorResponse errorResponse = (ErrorResponse) parser.getBatchResponse().getCurrentResponse();
    assertEquals(ErrorResponseType.UNRESOLVABLE_URI, errorResponse.getErrorType());
}
Also used : Dsmlv2ResponseParser(org.apache.directory.api.dsmlv2.Dsmlv2ResponseParser) ErrorResponse(org.apache.directory.api.dsmlv2.response.ErrorResponse) Test(org.junit.Test) AbstractResponseTest(org.apache.directory.api.dsmlv2.AbstractResponseTest)

Aggregations

ErrorResponse (org.apache.directory.api.dsmlv2.response.ErrorResponse)14 AbstractResponseTest (org.apache.directory.api.dsmlv2.AbstractResponseTest)13 Dsmlv2ResponseParser (org.apache.directory.api.dsmlv2.Dsmlv2ResponseParser)13 Test (org.junit.Test)13 BatchResponseDsml (org.apache.directory.api.dsmlv2.response.BatchResponseDsml)2 BufferedWriter (java.io.BufferedWriter)1 IOException (java.io.IOException)1 OutputStreamWriter (java.io.OutputStreamWriter)1 DecoderException (org.apache.directory.api.asn1.DecoderException)1 EncoderException (org.apache.directory.api.asn1.EncoderException)1 LdapException (org.apache.directory.api.ldap.model.exception.LdapException)1 Namespace (org.dom4j.Namespace)1 XmlPullParserException (org.xmlpull.v1.XmlPullParserException)1