{
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;
}
// Processing BatchRequest:
// - Parsing and Getting BatchRequest
// - 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() );
sb.append( " " ); // a space to separate the namespace declarations
sb.append( ParserUtils.XSD_NAMESPACE.asXML() );
sb.append( " " ); // a space to separate the namespace declarations
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;
}
while ( request != null ) // (Request == null when there's no more request to process)
{
// 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 );