Search in sources :

Example 1 with Error

use of com.sforce.soap.partner.Error in project teiid by teiid.

the class SalesforceConnectionImpl method delete.

public int delete(String[] ids) throws ResourceException {
    DeleteResult[] results = null;
    try {
        results = partnerConnection.delete(ids);
    } catch (UnexpectedErrorFault e) {
        throw new ResourceException(e);
    } catch (ConnectionException e) {
        throw new ResourceException(e);
    }
    boolean allGood = true;
    StringBuffer errorMessages = new StringBuffer();
    for (int i = 0; i < results.length; i++) {
        DeleteResult result = results[i];
        if (!result.isSuccess()) {
            if (allGood) {
                // $NON-NLS-1$
                errorMessages.append("Error(s) executing DELETE: ");
                allGood = false;
            }
            Error[] errors = result.getErrors();
            if (null != errors && errors.length > 0) {
                for (int x = 0; x < errors.length; x++) {
                    Error error = errors[x];
                    errorMessages.append(error.getMessage()).append(';');
                }
            }
        }
    }
    if (!allGood) {
        throw new ResourceException(errorMessages.toString());
    }
    return results.length;
}
Also used : Error(com.sforce.soap.partner.Error) UnexpectedErrorFault(com.sforce.soap.partner.fault.UnexpectedErrorFault) ResourceException(javax.resource.ResourceException) ConnectionException(com.sforce.ws.ConnectionException)

Example 2 with Error

use of com.sforce.soap.partner.Error in project components by Talend.

the class SalesforceRuntimeTest method testAddLog.

@Test
public void testAddLog() throws IOException {
    Error error1 = new Error();
    error1.setStatusCode(StatusCode.INVALID_STATUS);
    error1.setMessage("Error message 1");
    Error error2 = new Error();
    error2.setStatusCode(StatusCode.FIELD_NOT_UPDATABLE);
    error2.setMessage("Error message 2");
    error2.setFields(new String[] { "Id", "Created" });
    StringWriter logStringWriter = new StringWriter();
    BufferedWriter logWriter = new BufferedWriter(logStringWriter);
    StringBuilder sb = SalesforceRuntime.addLog(new Error[] { error1, error2 }, "12345", logWriter);
    logWriter.flush();
    assertNotNull(sb);
    String content = sb.toString();
    assertThat(content, containsString(error1.getMessage()));
    assertThat(content, containsString(error2.getMessage()));
    String logContent = logStringWriter.toString();
    assertThat(logContent, containsString(error1.getMessage()));
    assertThat(logContent, containsString(error1.getStatusCode().toString()));
    assertThat(logContent, containsString(error2.getMessage()));
    assertThat(logContent, containsString(error2.getStatusCode().toString()));
    assertThat(logContent, containsString("12345"));
    assertThat(logContent, containsString("Id"));
    assertThat(logContent, containsString("Created"));
}
Also used : StringWriter(java.io.StringWriter) Error(com.sforce.soap.partner.Error) Matchers.containsString(org.hamcrest.Matchers.containsString) BufferedWriter(java.io.BufferedWriter) Test(org.junit.Test)

Example 3 with Error

use of com.sforce.soap.partner.Error in project components by Talend.

the class SalesforceRuntime method addLog.

public static StringBuilder addLog(Error[] resultErrors, String row_key, BufferedWriter logWriter) {
    StringBuilder errors = new StringBuilder("");
    if (resultErrors != null) {
        for (Error error : resultErrors) {
            errors.append(error.getMessage()).append("\n");
            if (logWriter != null) {
                try {
                    logWriter.append("\tStatus Code: ").append(error.getStatusCode().toString());
                    logWriter.newLine();
                    logWriter.newLine();
                    logWriter.append("\tRowKey/RowNo: " + row_key);
                    if (error.getFields() != null) {
                        logWriter.newLine();
                        logWriter.append("\tFields: ");
                        boolean flag = false;
                        for (String field : error.getFields()) {
                            if (flag) {
                                logWriter.append(", ");
                            } else {
                                flag = true;
                            }
                            logWriter.append(field);
                        }
                    }
                    logWriter.newLine();
                    logWriter.newLine();
                    logWriter.append("\tMessage: ").append(error.getMessage());
                    logWriter.newLine();
                    logWriter.append("\t--------------------------------------------------------------------------------");
                    logWriter.newLine();
                    logWriter.newLine();
                } catch (IOException ex) {
                    ComponentException.unexpectedException(ex);
                }
            }
        }
    }
    return errors;
}
Also used : Error(com.sforce.soap.partner.Error) IOException(java.io.IOException)

Example 4 with Error

use of com.sforce.soap.partner.Error in project components by Talend.

the class SalesforceWriter method handleReject.

private void handleReject(IndexedRecord input, Error[] resultErrors, String[] changedItemKeys, int batchIdx) throws IOException {
    String changedItemKey = null;
    if (batchIdx < changedItemKeys.length) {
        if (changedItemKeys[batchIdx] != null) {
            changedItemKey = changedItemKeys[batchIdx];
        } else {
            changedItemKey = String.valueOf(batchIdx + 1);
        }
    } else {
        changedItemKey = "Batch index out of bounds";
    }
    StringBuilder errors = SalesforceRuntime.addLog(resultErrors, changedItemKey, logWriter);
    if (exceptionForErrors) {
        if (errors.toString().length() > 0) {
            if (logWriter != null) {
                logWriter.close();
            }
            throw new IOException(errors.toString());
        }
    } else {
        rejectCount++;
        Schema outSchema = sprops.schemaReject.schema.getValue();
        if (outSchema == null || outSchema.getFields().size() == 0) {
            return;
        }
        if (input.getSchema().equals(outSchema)) {
            rejectedWrites.add(input);
        } else {
            IndexedRecord reject = null;
            if (AvroUtils.isIncludeAllFields(outSchema)) {
                Schema runtimeSchema = input.getSchema();
                List<Schema.Field> addedFields = new ArrayList<>();
                // Check whether design schema has additional field
                Schema.Field errorCodeField = outSchema.getField(TSalesforceOutputProperties.FIELD_ERROR_CODE);
                Schema.Field errorField = outSchema.getField(TSalesforceOutputProperties.FIELD_ERROR_FIELDS);
                Schema.Field errorMsgField = outSchema.getField(TSalesforceOutputProperties.FIELD_ERROR_MESSAGE);
                if (errorCodeField != null) {
                    addedFields.add(new Schema.Field(errorCodeField.name(), errorCodeField.schema(), errorCodeField.doc(), errorCodeField.defaultVal()));
                }
                if (errorField != null) {
                    addedFields.add(new Schema.Field(errorField.name(), errorField.schema(), errorField.doc(), errorField.defaultVal()));
                }
                if (errorMsgField != null) {
                    addedFields.add(new Schema.Field(errorMsgField.name(), errorMsgField.schema(), errorMsgField.doc(), errorMsgField.defaultVal()));
                }
                if (addedFields.size() > 0) {
                    // Append additional fields to the runtime schema
                    runtimeSchema = AvroUtils.appendFields(runtimeSchema, addedFields.toArray(new Schema.Field[addedFields.size()]));
                }
                reject = new GenericData.Record(runtimeSchema);
            } else {
                reject = new GenericData.Record(outSchema);
            }
            for (Schema.Field outField : reject.getSchema().getFields()) {
                Object outValue = null;
                Schema.Field inField = input.getSchema().getField(outField.name());
                if (inField != null) {
                    outValue = input.get(inField.pos());
                } else if (resultErrors.length > 0) {
                    Error error = resultErrors[0];
                    if (TSalesforceOutputProperties.FIELD_ERROR_CODE.equals(outField.name())) {
                        outValue = error.getStatusCode() != null ? error.getStatusCode().toString() : null;
                    } else if (TSalesforceOutputProperties.FIELD_ERROR_FIELDS.equals(outField.name())) {
                        StringBuffer fields = new StringBuffer();
                        for (String field : error.getFields()) {
                            fields.append(field);
                            fields.append(",");
                        }
                        if (fields.length() > 0) {
                            fields.deleteCharAt(fields.length() - 1);
                        }
                        outValue = fields.toString();
                    } else if (TSalesforceOutputProperties.FIELD_ERROR_MESSAGE.equals(outField.name())) {
                        outValue = error.getMessage();
                    }
                }
                reject.put(outField.pos(), outValue);
            }
            rejectedWrites.add(reject);
        }
        Property<OutputAction> outputAction = sprops.outputAction;
        LOGGER.info(MESSAGES.getMessage("info.rejectedRecord", sprops.outputAction.getPossibleValuesDisplayName(outputAction.getValue()).toLowerCase(), dataCount));
    }
}
Also used : IndexedRecord(org.apache.avro.generic.IndexedRecord) Schema(org.apache.avro.Schema) ArrayList(java.util.ArrayList) Error(com.sforce.soap.partner.Error) IOException(java.io.IOException) GenericData(org.apache.avro.generic.GenericData) OutputAction(org.talend.components.salesforce.SalesforceOutputProperties.OutputAction) XmlObject(com.sforce.ws.bind.XmlObject) SObject(com.sforce.soap.partner.sobject.SObject)

Aggregations

Error (com.sforce.soap.partner.Error)4 IOException (java.io.IOException)2 UnexpectedErrorFault (com.sforce.soap.partner.fault.UnexpectedErrorFault)1 SObject (com.sforce.soap.partner.sobject.SObject)1 ConnectionException (com.sforce.ws.ConnectionException)1 XmlObject (com.sforce.ws.bind.XmlObject)1 BufferedWriter (java.io.BufferedWriter)1 StringWriter (java.io.StringWriter)1 ArrayList (java.util.ArrayList)1 ResourceException (javax.resource.ResourceException)1 Schema (org.apache.avro.Schema)1 GenericData (org.apache.avro.generic.GenericData)1 IndexedRecord (org.apache.avro.generic.IndexedRecord)1 Matchers.containsString (org.hamcrest.Matchers.containsString)1 Test (org.junit.Test)1 OutputAction (org.talend.components.salesforce.SalesforceOutputProperties.OutputAction)1