package org.opendaylight.controller.sal.rest.impl;
+import static org.opendaylight.controller.sal.rest.api.Draft02.RestConfModule.ERRORS_CONTAINER_QNAME;
+import static org.opendaylight.controller.sal.rest.api.Draft02.RestConfModule.ERROR_APP_TAG_QNAME;
+import static org.opendaylight.controller.sal.rest.api.Draft02.RestConfModule.ERROR_INFO_QNAME;
+import static org.opendaylight.controller.sal.rest.api.Draft02.RestConfModule.ERROR_LIST_QNAME;
+import static org.opendaylight.controller.sal.rest.api.Draft02.RestConfModule.ERROR_MESSAGE_QNAME;
+import static org.opendaylight.controller.sal.rest.api.Draft02.RestConfModule.ERROR_TAG_QNAME;
+import static org.opendaylight.controller.sal.rest.api.Draft02.RestConfModule.ERROR_TYPE_QNAME;
+import static org.opendaylight.controller.sal.rest.api.Draft02.RestConfModule.NAMESPACE;
+
+import com.google.common.base.Charsets;
+import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableList;
+import com.google.gson.stream.JsonWriter;
+
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
-import static org.opendaylight.controller.sal.rest.api.Draft02.RestConfModule.*;
-
import org.opendaylight.controller.sal.restconf.impl.ControllerContext;
import org.opendaylight.controller.sal.restconf.impl.RestconfDocumentedException;
import org.opendaylight.controller.sal.restconf.impl.RestconfError;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
-import com.google.common.base.Strings;
-import com.google.common.collect.ImmutableList;
-import com.google.gson.stream.JsonWriter;
-
/**
* This class defines an ExceptionMapper that handles RestconfDocumentedExceptions thrown by
* resource implementations and translates appropriately to restconf error response as defined in
private HttpHeaders headers;
@Override
- public Response toResponse( RestconfDocumentedException exception ) {
+ public Response toResponse( final RestconfDocumentedException exception ) {
LOG.debug( "In toResponse: {}", exception.getMessage() );
// single space char in the entity.
return Response.status( exception.getStatus() )
- .type( MediaType.TEXT_PLAIN_TYPE )
- .entity( " " ).build();
+ .type( MediaType.TEXT_PLAIN_TYPE )
+ .entity( " " ).build();
}
int status = errors.iterator().next().getErrorTag().getStatusCode();
if( errorsSchemaNode == null ) {
return Response.status( status )
- .type( MediaType.TEXT_PLAIN_TYPE )
- .entity( exception.getMessage() ).build();
+ .type( MediaType.TEXT_PLAIN_TYPE )
+ .entity( exception.getMessage() ).build();
}
ImmutableList.Builder<Node<?>> errorNodes = ImmutableList.<Node<?>> builder();
}
ImmutableCompositeNode errorsNode =
- ImmutableCompositeNode.create( ERRORS_CONTAINER_QNAME, errorNodes.build() );
+ ImmutableCompositeNode.create( ERRORS_CONTAINER_QNAME, errorNodes.build() );
Object responseBody;
if( mediaType.getSubtype().endsWith( "json" ) ) {
return Response.status( status ).type( mediaType ).entity( responseBody ).build();
}
- private Object toJsonResponseBody( ImmutableCompositeNode errorsNode,
- DataNodeContainer errorsSchemaNode ) {
+ private Object toJsonResponseBody( final ImmutableCompositeNode errorsNode,
+ final DataNodeContainer errorsSchemaNode ) {
- JsonMapper jsonMapper = new JsonMapper();
+ JsonMapper jsonMapper = new JsonMapper(null);
Object responseBody = null;
try {
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
- JsonWriter writer = new JsonWriter( new OutputStreamWriter( outStream, "UTF-8" ) );
+ JsonWriter writer = new JsonWriter(new OutputStreamWriter( outStream, Charsets.UTF_8));
writer.setIndent( " " );
- jsonMapper.write( writer, errorsNode, errorsSchemaNode, null );
+ jsonMapper.write( writer, errorsNode, errorsSchemaNode);
writer.flush();
responseBody = outStream.toString( "UTF-8" );
- }
- catch( IOException e ) {
+ } catch( IOException e ) {
LOG.error( "Error writing error response body", e );
}
return responseBody;
}
- private Object toXMLResponseBody( ImmutableCompositeNode errorsNode,
- DataNodeContainer errorsSchemaNode ) {
+ private Object toXMLResponseBody( final ImmutableCompositeNode errorsNode,
+ final DataNodeContainer errorsSchemaNode ) {
XmlMapper xmlMapper = new XmlMapper();
return responseBody;
}
- private String documentToString( Document doc ) throws TransformerException, UnsupportedEncodingException {
+ private String documentToString( final Document doc ) throws TransformerException, UnsupportedEncodingException {
Transformer transformer = createTransformer();
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
}
private Transformer createTransformer() throws TransformerFactoryConfigurationError,
- TransformerConfigurationException {
+ TransformerConfigurationException {
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty( OutputKeys.OMIT_XML_DECLARATION, "no" );
return transformer;
}
- private Node<?> toDomNode( RestconfError error ) {
+ private Node<?> toDomNode( final RestconfError error ) {
CompositeNodeBuilder<ImmutableCompositeNode> builder = ImmutableCompositeNode.builder();
builder.setQName( ERROR_LIST_QNAME );
return builder.toInstance();
}
- private Node<?> parseErrorInfo( String errorInfo ) {
+ private Node<?> parseErrorInfo( final String errorInfo ) {
if( Strings.isNullOrEmpty( errorInfo ) ) {
return null;
}
String errorInfoWithRoot =
new StringBuilder( "<error-info xmlns=\"" ).append( NAMESPACE ).append( "\">" )
- .append( errorInfo ).append( "</error-info>" ).toString();
+ .append( errorInfo ).append( "</error-info>" ).toString();
Document doc = null;
try {
doc = factory.newDocumentBuilder().parse(
- new InputSource( new StringReader( errorInfoWithRoot ) ) );
- }
- catch( Exception e ) {
+ new InputSource( new StringReader( errorInfoWithRoot ) ) );
+ } catch( Exception e ) {
// TODO: what if the content is text that happens to contain invalid markup? Could
// wrap in CDATA and try again.
- LOG.warn( "Error parsing restconf error-info, \"" + errorInfo + "\", as XML: " +
- e.toString() );
+ LOG.warn( "Error parsing restconf error-info, \"{}\", as XML", errorInfo, e);
return null;
}
return errorInfoNode;
}
- private void addLeaf( CompositeNodeBuilder<ImmutableCompositeNode> builder, QName qname,
- String value ) {
+ private void addLeaf( final CompositeNodeBuilder<ImmutableCompositeNode> builder, final QName qname,
+ final String value ) {
if( !Strings.isNullOrEmpty( value ) ) {
builder.addLeaf( qname, value );
}