Author: ilgrosso
Date: Thu Feb 21 15:15:45 2013
New Revision: 1448677

URL: http://svn.apache.org/r1448677
Log:
[SYNCOPE-319] Some more refinements

Modified:
    
syncope/trunk/common/src/main/java/org/apache/syncope/common/types/SyncopeClientExceptionType.java
    
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Resources.java
    
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/ResourceConnConfPanel.java
    
syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/ConnectorRestClient.java
    
syncope/trunk/core/src/main/java/org/apache/syncope/core/init/ConnectorManager.java
    
syncope/trunk/core/src/main/java/org/apache/syncope/core/propagation/impl/AsyncConnectorFacade.java
    
syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/PolicyController.java
    
syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/utils/RestServiceExceptionMapper.java
    
syncope/trunk/core/src/main/java/org/apache/syncope/core/util/ConnIdBundleManager.java
    syncope/trunk/core/src/main/webapp/syncopeClientError.jsp

Modified: 
syncope/trunk/common/src/main/java/org/apache/syncope/common/types/SyncopeClientExceptionType.java
URL: 
http://svn.apache.org/viewvc/syncope/trunk/common/src/main/java/org/apache/syncope/common/types/SyncopeClientExceptionType.java?rev=1448677&r1=1448676&r2=1448677&view=diff
==============================================================================
--- 
syncope/trunk/common/src/main/java/org/apache/syncope/common/types/SyncopeClientExceptionType.java
 (original)
+++ 
syncope/trunk/common/src/main/java/org/apache/syncope/common/types/SyncopeClientExceptionType.java
 Thu Feb 21 15:15:45 2013
@@ -29,6 +29,7 @@ public enum SyncopeClientExceptionType {
     GenericPersistence("Syncope.GenericPersistence", 
"Syncope.GenericPersistence.cause"),
     InvalidLogger("Syncope.InvalidLogger", "Syncope.InvalidLogger.message"),
     InvalidConnInstance("Syncope.InvalidConnInstance", 
"Syncope.InvalidConnInstance.message"),
+    InvalidConnIdConf("Syncope.InvalidConnIdConf", 
"Syncope.InvalidConnIdConf.message"),
     InvalidPasswordPolicy("Syncope.InvalidPasswordPolicy", 
"Syncope.InvalidPasswordPolicy.reason"),
     InvalidAccountPolicy("Syncope.InvalidAccountPolicy", 
"Syncope.InvalidAccountPolicy.reason"),
     InvalidSyncPolicy("Syncope.InvalidSyncPolicy", 
"Syncope.InvalidSyncPolicy.reason"),
@@ -38,8 +39,8 @@ public enum SyncopeClientExceptionType {
     InvalidSchemaDefinition("Syncope.InvalidSchemaDefinition", ""),
     InvalidSearchCondition("Syncope.InvalidSearchCondition", ""),
     InvalidPropagationTaskExecReport(
-            "Syncope.InvalidPropagationTaskExecReport",
-            "Syncope.InvalidPropagationTaskExecReport.element"),
+    "Syncope.InvalidPropagationTaskExecReport",
+    "Syncope.InvalidPropagationTaskExecReport.element"),
     InvalidUSchema("Syncope.InvalidUSchemaUpdate", 
"Syncope.InvalidUSchemaUpdate.name"),
     InvalidUDerSchema("Syncope.InvalidUDerSchemaUpdate", 
"Syncope.InvalidUDerSchemaUpdate.name"),
     InvalidUVirSchema("Syncope.InvalidUVirSchemaUpdate", 
"Syncope.InvalidUVirSchemaUpdate.name"),
@@ -70,14 +71,12 @@ public enum SyncopeClientExceptionType {
 
     private String elementHeaderName;
 
-    private SyncopeClientExceptionType(String headerValue, String 
elementHeaderName) {
-
+    private SyncopeClientExceptionType(final String headerValue, final String 
elementHeaderName) {
         this.headerValue = headerValue;
         this.elementHeaderName = elementHeaderName;
     }
 
-    public static SyncopeClientExceptionType getFromHeaderValue(String 
exceptionTypeHeaderValue) {
-
+    public static SyncopeClientExceptionType getFromHeaderValue(final String 
exceptionTypeHeaderValue) {
         SyncopeClientExceptionType result = null;
         for (SyncopeClientExceptionType syncopeClientExceptionType : values()) 
{
             if 
(exceptionTypeHeaderValue.equals(syncopeClientExceptionType.getHeaderValue())) {

Modified: 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Resources.java
URL: 
http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Resources.java?rev=1448677&r1=1448676&r2=1448677&view=diff
==============================================================================
--- 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Resources.java
 (original)
+++ 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Resources.java
 Thu Feb 21 15:15:45 2013
@@ -119,6 +119,7 @@ public class Resources extends BasePage 
                     error(getString("error") + ": " + e.getMessage());
                 }
                 target.add(feedbackPanel);
+                target.add(connectorContainer);
             }
 
             @Override
@@ -578,4 +579,4 @@ public class Resources extends BasePage 
             return connectorRestClient.getAllConnectors();
         }
     }
-}
+}
\ No newline at end of file

Modified: 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/ResourceConnConfPanel.java
URL: 
http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/ResourceConnConfPanel.java?rev=1448677&r1=1448676&r2=1448677&view=diff
==============================================================================
--- 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/ResourceConnConfPanel.java
 (original)
+++ 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/ResourceConnConfPanel.java
 Thu Feb 21 15:15:45 2013
@@ -49,7 +49,6 @@ import org.apache.wicket.markup.html.lis
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.PropertyModel;
-import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -87,14 +86,13 @@ public class ResourceConnConfPanel exten
 
     private WebMarkupContainer connConfPropContainer;
 
-    private AjaxLink check;
+    private AjaxLink<Void> check;
 
     private boolean createFlag;
 
     private ResourceTO resourceTO;
 
     public ResourceConnConfPanel(final String id, final ResourceTO resourceTO, 
final boolean createFlag) {
-
         super(id);
         setOutputMarkupId(true);
 
@@ -107,7 +105,7 @@ public class ResourceConnConfPanel exten
         connConfPropContainer.setOutputMarkupId(true);
         add(connConfPropContainer);
 
-        check = new IndicatingAjaxLink("check", new ResourceModel("check")) {
+        check = new IndicatingAjaxLink<Void>("check") {
 
             private static final long serialVersionUID = -4199438518229098169L;
 

Modified: 
syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/ConnectorRestClient.java
URL: 
http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/ConnectorRestClient.java?rev=1448677&r1=1448676&r2=1448677&view=diff
==============================================================================
--- 
syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/ConnectorRestClient.java
 (original)
+++ 
syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/ConnectorRestClient.java
 Thu Feb 21 15:15:45 2013
@@ -43,20 +43,16 @@ public class ConnectorRestClient extends
 
     private static final long serialVersionUID = -6870366819966266617L;
 
-    /**
-     * Get all connectors.
-     *
-     * @return ConnectorInstanceTOs
-     */
     public List<ConnInstanceTO> getAllConnectors() {
-        return 
getService(ConnectorService.class).list(SyncopeSession.get().getLocale().toString());
+        List<ConnInstanceTO> connectors = 
Collections.<ConnInstanceTO>emptyList();
+        try {
+            connectors = 
getService(ConnectorService.class).list(SyncopeSession.get().getLocale().toString());
+        } catch (Exception e) {
+            LOG.error("While reading connectors", e);
+        }
+        return connectors;
     }
 
-    /**
-     * Create new connector.
-     *
-     * @param connectorTO
-     */
     public void create(final ConnInstanceTO connectorTO) {
         
connectorTO.setConfiguration(filterProperties(connectorTO.getConfiguration()));
         getService(ConnectorService.class).create(connectorTO);
@@ -164,12 +160,6 @@ public class ConnectorRestClient extends
         return check;
     }
 
-    /**
-     * Test resource connection.
-     *
-     * @param resourceTO resource
-     * @return Connection status
-     */
     public boolean check(final ResourceTO resourceTO) {
         boolean check = false;
         try {

Modified: 
syncope/trunk/core/src/main/java/org/apache/syncope/core/init/ConnectorManager.java
URL: 
http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/init/ConnectorManager.java?rev=1448677&r1=1448676&r2=1448677&view=diff
==============================================================================
--- 
syncope/trunk/core/src/main/java/org/apache/syncope/core/init/ConnectorManager.java
 (original)
+++ 
syncope/trunk/core/src/main/java/org/apache/syncope/core/init/ConnectorManager.java
 Thu Feb 21 15:15:45 2013
@@ -18,6 +18,7 @@
  */
 package org.apache.syncope.core.init;
 
+import java.util.List;
 import java.util.Locale;
 import java.util.Set;
 import org.apache.commons.lang.SerializationUtils;
@@ -31,11 +32,12 @@ import org.apache.syncope.core.propagati
 import org.apache.syncope.core.propagation.impl.ConnectorFacadeProxy;
 import org.apache.syncope.core.rest.data.ResourceDataBinder;
 import org.apache.syncope.core.util.ApplicationContextProvider;
+import org.apache.syncope.core.util.ConnIdBundleManager;
 import org.identityconnectors.common.l10n.CurrentLocale;
 import org.identityconnectors.framework.api.ConnectorFacadeFactory;
+import org.identityconnectors.framework.api.ConnectorInfo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
@@ -59,9 +61,7 @@ class ConnectorManager implements Connec
     }
 
     @Override
-    public Connector getConnector(final ExternalResource resource)
-            throws BeansException {
-
+    public Connector getConnector(final ExternalResource resource) {
         // Try to re-create connector bean from underlying resource (useful 
for managing failover scenarios)
         if 
(!ApplicationContextProvider.getBeanFactory().containsBean(getBeanName(resource)))
 {
             registerConnector(resource);
@@ -76,8 +76,10 @@ class ConnectorManager implements Connec
 
         connInstanceClone.setConfiguration(configuration);
 
-        return ApplicationContextProvider.getBeanFactory().getBean(
-                "connectorFacadeProxy", ConnectorFacadeProxy.class, 
connInstanceClone);
+        Connector connector = new ConnectorFacadeProxy(connInstanceClone);
+        ApplicationContextProvider.getBeanFactory().autowireBean(connector);
+
+        return connector;
     }
 
     @Override
@@ -104,21 +106,30 @@ class ConnectorManager implements Connec
     @Transactional(readOnly = true)
     @Override
     public void load() {
-        // This is needed to avoid encoding problems when sending error 
messages via REST
+        // This is needed in order to avoid encoding problems when sending 
error messages via REST
         CurrentLocale.set(Locale.ENGLISH);
 
-        // Next load all resource-specific connectors.
+        // Init ConnIdBundleManager
+        List<ConnectorInfo> connInfos = 
ConnIdBundleManager.getConnManager().getConnectorInfos();
+        if (LOG.isDebugEnabled()) {
+            for (ConnectorInfo connInfo : connInfos) {
+                LOG.debug("Found connector bundle {}", 
connInfo.getConnectorDisplayName());
+            }
+        }
+
+        // Next load all resource-specific connectors
+        int connectors = 0;
         for (ExternalResource resource : resourceDAO.findAll()) {
             LOG.info("Registering resource-connector pair {}-{}", resource, 
resource.getConnector());
             try {
                 registerConnector(resource);
+                connectors++;
             } catch (Exception e) {
                 LOG.error("While registering resource-connector pair {}-{}", 
resource, resource.getConnector(), e);
             }
         }
 
-        LOG.info("Done loading {} connectors", 
ApplicationContextProvider.getBeanFactory().getBeansOfType(
-                ConnectorFacadeProxy.class, false, true).size());
+        LOG.info("Done loading {} connectors", connectors);
     }
 
     @Transactional(readOnly = true)
@@ -137,6 +148,7 @@ class ConnectorManager implements Connec
         LOG.info("Done unloading {} connectors", connectors);
 
         ConnectorFacadeFactory.getInstance().dispose();
+        ConnIdBundleManager.resetConnManager();
         LOG.info("All connector resources disposed");
     }
 }

Modified: 
syncope/trunk/core/src/main/java/org/apache/syncope/core/propagation/impl/AsyncConnectorFacade.java
URL: 
http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/propagation/impl/AsyncConnectorFacade.java?rev=1448677&r1=1448676&r2=1448677&view=diff
==============================================================================
--- 
syncope/trunk/core/src/main/java/org/apache/syncope/core/propagation/impl/AsyncConnectorFacade.java
 (original)
+++ 
syncope/trunk/core/src/main/java/org/apache/syncope/core/propagation/impl/AsyncConnectorFacade.java
 Thu Feb 21 15:15:45 2013
@@ -24,6 +24,7 @@ import java.util.concurrent.Future;
 import org.identityconnectors.framework.api.ConnectorFacade;
 import org.identityconnectors.framework.common.objects.Attribute;
 import org.identityconnectors.framework.common.objects.AttributeInfo;
+import org.identityconnectors.framework.common.objects.AttributeUtil;
 import org.identityconnectors.framework.common.objects.ConnectorObject;
 import org.identityconnectors.framework.common.objects.ObjectClass;
 import org.identityconnectors.framework.common.objects.ObjectClassInfo;
@@ -139,24 +140,21 @@ public class AsyncConnectorFacade {
     }
 
     @Async
-    public Future<Set<String>> getSchema(
-            final ConnectorFacade connector,
-            final boolean showall) {
+    public Future<Set<String>> getSchema(final ConnectorFacade connector, 
final boolean showall) {
         final Set<String> resourceSchemaNames = new HashSet<String>();
 
-        final Schema schema = connector.schema();
-
         try {
+            final Schema schema = connector.schema();
             for (ObjectClassInfo info : schema.getObjectClassInfo()) {
                 for (AttributeInfo attrInfo : info.getAttributeInfo()) {
-                    if (showall || !isSpecialName(attrInfo.getName())) {
+                    if (showall || 
!AttributeUtil.isSpecialName(attrInfo.getName())) {
                         resourceSchemaNames.add(attrInfo.getName());
                     }
                 }
             }
         } catch (Exception e) {
             // catch exception in order to manage unpredictable behaviors
-            LOG.debug("Unsupported operation {}", e);
+            LOG.debug("While reading schema on connector {}", connector, e);
         }
 
         return new AsyncResult<Set<String>>(resourceSchemaNames);
@@ -173,8 +171,4 @@ public class AsyncConnectorFacade {
         connector.test();
         return new AsyncResult<String>("OK");
     }
-
-    private boolean isSpecialName(final String name) {
-        return (name.startsWith("__") && name.endsWith("__"));
-    }
 }

Modified: 
syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/PolicyController.java
URL: 
http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/PolicyController.java?rev=1448677&r1=1448676&r2=1448677&view=diff
==============================================================================
--- 
syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/PolicyController.java
 (original)
+++ 
syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/PolicyController.java
 Thu Feb 21 15:15:45 2013
@@ -148,7 +148,7 @@ public class PolicyController extends Ab
 
         final List<T> policyTOs = new ArrayList<T>();
         for (Policy policy : policies) {
-            policyTOs.add((T) binder.getPolicyTO(policy));
+            policyTOs.add(binder.<T>getPolicyTO(policy));
         }
 
         auditManager.audit(Category.policy, PolicySubCategory.list, 
Result.success,

Modified: 
syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/utils/RestServiceExceptionMapper.java
URL: 
http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/utils/RestServiceExceptionMapper.java?rev=1448677&r1=1448676&r2=1448677&view=diff
==============================================================================
--- 
syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/utils/RestServiceExceptionMapper.java
 (original)
+++ 
syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/utils/RestServiceExceptionMapper.java
 Thu Feb 21 15:15:45 2013
@@ -18,16 +18,15 @@
  */
 package org.apache.syncope.core.rest.utils;
 
-import java.util.Map.Entry;
+import java.util.Map;
 import java.util.Set;
-
 import javax.persistence.PersistenceException;
+import javax.ws.rs.BadRequestException;
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.ResponseBuilder;
 import javax.ws.rs.ext.ExceptionMapper;
 import javax.ws.rs.ext.Provider;
-
 import org.apache.cxf.jaxrs.client.ResponseExceptionMapper;
 import org.apache.syncope.common.services.InvalidSearchConditionException;
 import org.apache.syncope.common.types.EntityViolationType;
@@ -46,12 +45,15 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.dao.DataIntegrityViolationException;
 import org.springframework.orm.jpa.JpaSystemException;
+import org.springframework.security.access.AccessDeniedException;
 
 @Provider
 public class RestServiceExceptionMapper implements ExceptionMapper<Exception>, 
ResponseExceptionMapper<Exception> {
 
     private static final String BASIC_REALM_UNAUTHORIZED = "Basic 
realm=\"Spring Security Application\"";
+
     private static final Logger LOG = 
LoggerFactory.getLogger(RestServiceExceptionMapper.class);
+
     public static final String EXCEPTION_TYPE_HEADER = "ExceptionType";
 
     @Override
@@ -59,22 +61,25 @@ public class RestServiceExceptionMapper 
         LOG.error("Exception thrown by REST method: " + ex.getMessage(), ex);
 
         if (ex instanceof SyncopeClientCompositeErrorException) {
-            return getCompositeExceptionResponse(ex);
+            return 
getCompositeExceptionResponse((SyncopeClientCompositeErrorException) ex);
         }
 
-        if (ex instanceof 
org.springframework.security.access.AccessDeniedException) {
-            return Response.status(Response.Status.UNAUTHORIZED)
-                    .header(HttpHeaders.WWW_AUTHENTICATE, 
BASIC_REALM_UNAUTHORIZED).build();
+        if (ex instanceof AccessDeniedException) {
+            return Response.status(Response.Status.UNAUTHORIZED).
+                    header(HttpHeaders.WWW_AUTHENTICATE, 
BASIC_REALM_UNAUTHORIZED).
+                    build();
         }
 
         if (ex instanceof UnauthorizedRoleException) {
-            return buildResponse(Response.status(Response.Status.FORBIDDEN), 
SyncopeClientExceptionType.UnauthorizedRole,
+            return buildResponse(Response.status(Response.Status.FORBIDDEN),
+                    SyncopeClientExceptionType.UnauthorizedRole,
                     getExMessage(ex));
         }
 
         if (ex instanceof DataIntegrityViolationException) {
-            return buildResponse(Response.status(Response.Status.CONFLICT), 
-                    SyncopeClientExceptionType.DataIntegrityViolation, 
getExMessage(ex));
+            return buildResponse(Response.status(Response.Status.CONFLICT),
+                    SyncopeClientExceptionType.DataIntegrityViolation,
+                    getExMessage(ex));
         }
 
         Response response = processBadRequestExceptions(ex);
@@ -93,21 +98,20 @@ public class RestServiceExceptionMapper 
         }
 
         // Rest is interpreted as InternalServerError
-        return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
-                
.header(SyncopeClientExceptionType.Unknown.getElementHeaderName(), 
getExMessage(ex))
-                .build();
+        return Response.status(Response.Status.INTERNAL_SERVER_ERROR).
+                
header(SyncopeClientExceptionType.Unknown.getElementHeaderName(), 
getExMessage(ex)).
+                build();
     }
-    
+
     @Override
     public Exception fromResponse(final Response r) {
         throw new UnsupportedOperationException(
                 "Call of fromResponse() method is not expected in 
RestServiceExceptionMapper");
     }
 
-    public Response getCompositeExceptionResponse(Exception ex) {
-        ResponseBuilder responseBuilder = 
Response.status(((SyncopeClientCompositeErrorException) ex)
-                .getStatusCode().value());
-        for (SyncopeClientException sce : 
((SyncopeClientCompositeErrorException) ex).getExceptions()) {
+    private Response getCompositeExceptionResponse(final 
SyncopeClientCompositeErrorException ex) {
+        ResponseBuilder responseBuilder = 
Response.status(ex.getStatusCode().value());
+        for (SyncopeClientException sce : ex.getExceptions()) {
             responseBuilder.header(EXCEPTION_TYPE_HEADER, 
sce.getType().getHeaderValue());
 
             for (String attributeName : sce.getElements()) {
@@ -117,7 +121,7 @@ public class RestServiceExceptionMapper 
         return responseBuilder.build();
     }
 
-    private Response processServerErrorExceptions(Exception ex) {
+    private Response processServerErrorExceptions(final Exception ex) {
         ResponseBuilder responseBuilder = 
Response.status(Response.Status.INTERNAL_SERVER_ERROR);
         if (ex instanceof org.apache.ibatis.exceptions.PersistenceException) {
             return buildResponse(responseBuilder, 
SyncopeClientExceptionType.Workflow, getMessage(ex,
@@ -126,13 +130,13 @@ public class RestServiceExceptionMapper 
             return buildResponse(responseBuilder, 
SyncopeClientExceptionType.DataIntegrityViolation, getExMessage(ex));
 
         } else if (ex instanceof ConfigurationException) {
-            return buildResponse(responseBuilder, 
SyncopeClientExceptionType.InvalidExternalResource, getExMessage(ex));
+            return buildResponse(responseBuilder, 
SyncopeClientExceptionType.InvalidConnIdConf, getExMessage(ex));
         }
 
         return null;
     }
 
-    private Response processNotFoundExceptions(Exception ex) {
+    private Response processNotFoundExceptions(final Exception ex) {
         ResponseBuilder responseBuilder = 
Response.status(Response.Status.NOT_FOUND);
 
         if (ex instanceof javax.ws.rs.NotFoundException) {
@@ -148,40 +152,38 @@ public class RestServiceExceptionMapper 
         return null;
     }
 
-    private Response processBadRequestExceptions(Exception ex) {
+    private Response processBadRequestExceptions(final Exception ex) {
         ResponseBuilder responseBuilder = 
Response.status(Response.Status.BAD_REQUEST);
 
-        if (ex instanceof javax.ws.rs.BadRequestException) {
-            if (((javax.ws.rs.BadRequestException) ex).getResponse() != null) {
-                return ((javax.ws.rs.BadRequestException) ex).getResponse();
-            } else {
+        if (ex instanceof BadRequestException) {
+            if (((BadRequestException) ex).getResponse() == null) {
                 return responseBuilder.build();
+            } else {
+                return ((BadRequestException) ex).getResponse();
             }
-            
+
         } else if (ex instanceof InvalidEntityException) {
             SyncopeClientExceptionType exType = 
SyncopeClientExceptionType.valueOf("Invalid"
                     + ((InvalidEntityException) 
ex).getEntityClassSimpleName());
 
             
responseBuilder.header(SyncopeClientErrorHandler.EXCEPTION_TYPE_HEADER, 
exType.getHeaderValue());
 
-            for (@SuppressWarnings("rawtypes")
-            Entry<Class, Set<EntityViolationType>> violation : 
((InvalidEntityException) ex).getViolations().entrySet()) {
+            for (@SuppressWarnings("rawtypes") Map.Entry<Class, 
Set<EntityViolationType>> violation :
+                    ((InvalidEntityException) ex).getViolations().entrySet()) {
 
                 for (EntityViolationType violationType : violation.getValue()) 
{
-                    responseBuilder.header(exType.getElementHeaderName(), 
violation.getClass().getSimpleName() + ": "
-                            + violationType);
+                    responseBuilder.header(exType.getElementHeaderName(),
+                            violation.getClass().getSimpleName() + ": " + 
violationType);
                 }
             }
             return responseBuilder.build();
         } else if (ex instanceof WorkflowException) {
             return buildResponse(responseBuilder, 
SyncopeClientExceptionType.Workflow, getExMessage(ex));
-
         } else if (ex instanceof PropagationException) {
-            return buildResponse(responseBuilder, 
SyncopeClientExceptionType.Propagation, getMessage(ex, ((PropagationException) 
ex).getResourceName()));
-
+            return buildResponse(responseBuilder, 
SyncopeClientExceptionType.Propagation, getMessage(ex,
+                    ((PropagationException) ex).getResourceName()));
         } else if (ex instanceof InvalidSearchConditionException) {
             return buildResponse(responseBuilder, 
SyncopeClientExceptionType.InvalidSearchCondition, getExMessage(ex));
-
         } else if (ex instanceof PersistenceException) {
             return buildResponse(responseBuilder, 
SyncopeClientExceptionType.GenericPersistence, getExMessage(ex));
         }
@@ -189,17 +191,19 @@ public class RestServiceExceptionMapper 
         return null;
     }
 
-    private Response buildResponse(ResponseBuilder responseBuilder, 
SyncopeClientExceptionType hType, String msg) {
-        return 
responseBuilder.header(SyncopeClientErrorHandler.EXCEPTION_TYPE_HEADER, 
hType.getHeaderValue())
-               .header(hType.getElementHeaderName(), msg)
-               .build();
+    private Response buildResponse(final ResponseBuilder responseBuilder, 
final SyncopeClientExceptionType hType,
+            final String msg) {
+
+        return 
responseBuilder.header(SyncopeClientErrorHandler.EXCEPTION_TYPE_HEADER, 
hType.getHeaderValue()).
+                header(hType.getElementHeaderName(), msg).
+                build();
     }
 
-    public String getMessage(Throwable ex, String msg) {
-        return (msg != null) ? msg : getExMessage(ex);
+    private String getMessage(final Throwable ex, final String msg) {
+        return (msg == null) ? getExMessage(ex) : msg;
     }
 
-    public String getExMessage(Throwable ex) {
+    private String getExMessage(final Throwable ex) {
         return (ex.getCause() == null) ? ex.getMessage() : 
ex.getCause().getMessage();
     }
-}
+}
\ No newline at end of file

Modified: 
syncope/trunk/core/src/main/java/org/apache/syncope/core/util/ConnIdBundleManager.java
URL: 
http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/util/ConnIdBundleManager.java?rev=1448677&r1=1448676&r2=1448677&view=diff
==============================================================================
--- 
syncope/trunk/core/src/main/java/org/apache/syncope/core/util/ConnIdBundleManager.java
 (original)
+++ 
syncope/trunk/core/src/main/java/org/apache/syncope/core/util/ConnIdBundleManager.java
 Thu Feb 21 15:15:45 2013
@@ -111,6 +111,12 @@ public final class ConnIdBundleManager {
         connManager = manager;
     }
 
+    public static void resetConnManager() {
+        synchronized (LOCK) {
+            connManager = null;
+        }
+    }
+
     public static ConnectorInfoManager getConnManager() {
         synchronized (LOCK) {
             if (connManager == null) {

Modified: syncope/trunk/core/src/main/webapp/syncopeClientError.jsp
URL: 
http://svn.apache.org/viewvc/syncope/trunk/core/src/main/webapp/syncopeClientError.jsp?rev=1448677&r1=1448676&r2=1448677&view=diff
==============================================================================
--- syncope/trunk/core/src/main/webapp/syncopeClientError.jsp (original)
+++ syncope/trunk/core/src/main/webapp/syncopeClientError.jsp Thu Feb 21 
15:15:45 2013
@@ -135,8 +135,8 @@ under the License.
         statusCode = HttpServletResponse.SC_BAD_REQUEST;
     } else if (ex instanceof ConfigurationException) {
         response.setHeader(SyncopeClientErrorHandler.EXCEPTION_TYPE_HEADER,
-                
SyncopeClientExceptionType.InvalidExternalResource.getHeaderValue());
-        
response.setHeader(SyncopeClientExceptionType.InvalidExternalResource.getElementHeaderName(),
+                SyncopeClientExceptionType.InvalidConnIdConf.getHeaderValue());
+        
response.setHeader(SyncopeClientExceptionType.InvalidConnIdConf.getElementHeaderName(),
                 ex.getCause() == null ? ex.getMessage() : 
ex.getCause().getMessage());
 
         statusCode = HttpServletResponse.SC_BAD_REQUEST;


Reply via email to