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();
}
}
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();
}
}
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();
}
}
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());
}
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());
}
Aggregations