You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by zr...@apache.org on 2019/08/19 14:57:08 UTC

[camel] branch master updated: Camel-Salesforce: Support for relationship queries.

This is an automated email from the ASF dual-hosted git repository.

zregvart pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/master by this push:
     new 0cd6fa4  Camel-Salesforce: Support for relationship queries.
0cd6fa4 is described below

commit 0cd6fa45fa7a13ee5ca8a13f837049dee4a82575
Author: Jeremy Ross <je...@jeremyross.org>
AuthorDate: Mon Aug 19 09:37:15 2019 -0500

    Camel-Salesforce: Support for relationship queries.
    
    * Enhancements: Support for relationship queries – both child queries
    and parent queries.
    
    * Fix: Polymorphic fields can result in broken DTOs. E.g., if Contact and
    Lead both have an External Id field, the POJO generator would generate
    two fields with the same name. The solution is to have a `who` property
    that accepts an AbstractDescribedSObjectBase instance.
    
    * The "_Lookup" DTOs are no longer needed. You can now just use the
    Class you’re looking up to, e.g. "Account" instead of
    "Account_Lookup". This is a breaking change.
    
    * Fixed: Tests unnecessarily referring to Custom Fields that are not
    represented in the salesforce metadata.
---
 .../salesforce/api/dto/AbstractSObjectBase.java    |    8 +
 .../component/salesforce/api/dto/Attributes.java   |   21 +
 .../salesforce/api/dto/SObjectDescription.java     |    1 +
 .../salesforce/api/dto/composite/Attributes.java   |   53 -
 .../salesforce/api/dto/composite/SObjectNode.java  |   14 +-
 .../dto/composite/SObjectNodeXStreamConverter.java |    4 +-
 .../salesforce/api/dto/composite/SObjectTree.java  |    7 +-
 .../salesforce/RestApiIntegrationTest.java         |  136 +-
 .../api/MultiSelectPicklistJsonTest.java           |    4 +-
 .../api/dto/composite/SObjectBatchTest.java        |  129 +-
 .../api/dto/composite/SObjectCompositeTest.java    |    6 +-
 .../api/dto/composite/SObjectTreeTest.java         |  101 +-
 .../salesforce/api/utils/QueryHelperTest.java      |   26 +-
 .../salesforce/dto/generated/Account.java          | 2965 +-------------------
 .../component/salesforce/dto/generated/Asset.java  |    4 +
 .../salesforce/dto/generated/Contact.java          |  854 +++---
 .../salesforce/dto/generated/Document.java         |  110 +-
 .../salesforce/dto/generated/Line_Item__c.java     |  114 +-
 .../salesforce/dto/generated/MSPTest.java          |    5 +-
 .../salesforce/dto/generated/Merchandise__c.java   |  119 +-
 .../dto/generated/QueryRecordsAccount.java         |   19 +
 .../dto/generated/QueryRecordsContact.java         |   19 +
 .../api/dto/composite_request_example.json         |   15 +-
 .../java/org/apache/camel/maven/GenerateMojo.java  |   51 +-
 .../org/apache/camel/maven/ObjectDescriptions.java |    4 +
 .../src/main/resources/sobject-lookup.vm           |   62 -
 .../src/main/resources/sobject-pojo.vm             |   63 +-
 .../camel/maven/CamelSalesforceMojoOutputTest.java |   13 +-
 .../src/test/resources/generated/Asset.java        |   12 +-
 .../resources/generated/Asset_LocalDateTime.java   |   12 +-
 .../src/test/resources/generated/Case.java         |   12 +-
 .../generated/ComplexCalculatedFormula.java        |   10 +-
 .../resources/generated/With_Reference__c.java     |   23 +-
 .../it/resources/salesforce/objects/Account.object |   11 +
 .../it/resources/salesforce/package.xml            |    1 +
 .../System Administrator With Hard Delete.profile  |    7 +-
 36 files changed, 1445 insertions(+), 3570 deletions(-)

diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/AbstractSObjectBase.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/AbstractSObjectBase.java
index 9d44ec1..dc032e6 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/AbstractSObjectBase.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/AbstractSObjectBase.java
@@ -19,6 +19,7 @@ package org.apache.camel.component.salesforce.api.dto;
 import java.time.ZonedDateTime;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.thoughtworks.xstream.annotations.XStreamOmitField;
 
 //CHECKSTYLE:OFF
 public abstract class AbstractSObjectBase extends AbstractDTOBase {
@@ -26,6 +27,7 @@ public abstract class AbstractSObjectBase extends AbstractDTOBase {
     // WARNING: these fields have case sensitive names,
     // the field name MUST match the field name used by Salesforce
     // DO NOT change these field names to camel case!!!
+    @XStreamOmitField
     private Attributes attributes;
     private String Id;
     private String OwnerId;
@@ -40,6 +42,10 @@ public abstract class AbstractSObjectBase extends AbstractDTOBase {
     private ZonedDateTime LastViewedDate;
     private ZonedDateTime LastReferencedDate;
 
+    public AbstractSObjectBase() {
+        attributes = new Attributes();
+    }
+
     /**
      * Utility method to clear all system {@link AbstractSObjectBase} fields.
      * <p>Useful when reusing a DTO for a new record, or for update/upsert.</p>
@@ -57,10 +63,12 @@ public abstract class AbstractSObjectBase extends AbstractDTOBase {
         LastActivityDate = null;
     }
 
+    @JsonProperty("attributes")
     public Attributes getAttributes() {
         return attributes;
     }
 
+    @JsonProperty("attributes")
     public void setAttributes(Attributes attributes) {
         this.attributes = attributes;
     }
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/Attributes.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/Attributes.java
index 7d299c0..b4f7fff 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/Attributes.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/Attributes.java
@@ -16,11 +16,19 @@
  */
 package org.apache.camel.component.salesforce.api.dto;
 
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
 public class Attributes extends AbstractDTOBase {
 
+    @XStreamAsAttribute
     private String type;
+
+    @XStreamAsAttribute
     private String url;
 
+    @XStreamAsAttribute
+    String referenceId;
+
     public String getType() {
         return type;
     }
@@ -36,4 +44,17 @@ public class Attributes extends AbstractDTOBase {
     public void setUrl(String url) {
         this.url = url;
     }
+
+    public String getReferenceId() {
+        return referenceId;
+    }
+
+    public void setReferenceId(String referenceId) {
+        this.referenceId = referenceId;
+    }
+
+    @Override
+    public String toString() {
+        return "Attribute<type: " + type + ", referenceId: " + referenceId + ">";
+    }
 }
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/SObjectDescription.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/SObjectDescription.java
index fc19c00..d8e1fde 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/SObjectDescription.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/SObjectDescription.java
@@ -94,6 +94,7 @@ public class SObjectDescription extends SObject {
         pruned.setLabelPlural(getLabelPlural());
         pruned.fields = fields;
         pruned.urls = urls;
+        pruned.setChildRelationships(childRelationships);
 
         return pruned;
     }
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/Attributes.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/Attributes.java
deleted file mode 100644
index 89a79af..0000000
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/Attributes.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.component.salesforce.api.dto.composite;
-
-import java.io.Serializable;
-import java.util.Objects;
-
-import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
-
-/**
- * Holds {@code type} and {@code referrenceId} attributes needed for the SObject tree Composite API.
- */
-final class Attributes implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    @XStreamAsAttribute
-    final String type;
-
-    @XStreamAsAttribute
-    final String referenceId;
-
-    Attributes(String referenceId, final String type) {
-        this.type = Objects.requireNonNull(type, "Type must be specified");
-        this.referenceId = Objects.requireNonNull(referenceId, "Reference ID must be specified");
-    }
-
-    public String getReferenceId() {
-        return referenceId;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    @Override
-    public String toString() {
-        return "Attribute<type: " + type + ", referenceId: " + referenceId + ">";
-    }
-}
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectNode.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectNode.java
index e8884c8..31bb809 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectNode.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectNode.java
@@ -45,7 +45,7 @@ import org.apache.camel.util.ObjectHelper;
 
 /**
  * Represents one node in the SObject tree request. SObject trees ({@link SObjectTree}) are composed from instances of
- * {@link SObjectNode}s. Each {@link SObjectNode} contains {@link Attributes}, the SObject ({@link AbstractSObjectBase})
+ * {@link SObjectNode}s. Each {@link SObjectNode} contains the SObject ({@link AbstractSObjectBase})
  * and any child records linked to it. SObjects at root level are added to {@link SObjectTree} using
  * {@link SObjectTree#addObject(AbstractSObjectBase)}, then you can add child records on the {@link SObjectNode}
  * returned by using {@link #addChild(AbstractDescribedSObjectBase)},
@@ -69,9 +69,6 @@ public final class SObjectNode implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    @JsonProperty
-    final Attributes attributes;
-
     @JsonUnwrapped
     final AbstractSObjectBase object;
 
@@ -90,8 +87,7 @@ public final class SObjectNode implements Serializable {
             final AbstractSObjectBase object) {
         this.referenceGenerator = requireNonNull(referenceGenerator, "ReferenceGenerator cannot be null");
         this.object = requireNonNull(object, "Root SObject cannot be null");
-        attributes = new Attributes(referenceGenerator.nextReferenceFor(object),
-            requireNonNull(type, "Object type cannot be null"));
+        object.getAttributes().setReferenceId(referenceGenerator.nextReferenceFor(object));
     }
 
     static String pluralOf(final AbstractDescribedSObjectBase object) {
@@ -287,13 +283,9 @@ public final class SObjectNode implements Serializable {
             .collect(Collectors.toMap(Map.Entry::getKey, e -> Collections.singletonMap("records", e.getValue())));
     }
 
-    Attributes getAttributes() {
-        return attributes;
-    }
-
     @JsonIgnore
     String getObjectType() {
-        return attributes.type;
+        return object.getAttributes().getType();
     }
 
     Stream<Class> objectTypes() {
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectNodeXStreamConverter.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectNodeXStreamConverter.java
index 4fbaf55..44faa59 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectNodeXStreamConverter.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectNodeXStreamConverter.java
@@ -37,8 +37,8 @@ public final class SObjectNodeXStreamConverter implements Converter {
     public void marshal(final Object source, final HierarchicalStreamWriter writer, final MarshallingContext context) {
         final SObjectNode node = (SObjectNode) source;
 
-        writer.addAttribute("type", node.attributes.type);
-        writer.addAttribute("referenceId", node.attributes.referenceId);
+        writer.addAttribute("type", node.object.getAttributes().getType());
+        writer.addAttribute("referenceId", node.object.getAttributes().getReferenceId());
 
         context.convertAnother(node.object);
 
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectTree.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectTree.java
index f9e4b88..fa73d86 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectTree.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectTree.java
@@ -43,6 +43,7 @@ import com.thoughtworks.xstream.annotations.XStreamOmitField;
 
 import org.apache.camel.component.salesforce.api.dto.AbstractDescribedSObjectBase;
 import org.apache.camel.component.salesforce.api.dto.AbstractSObjectBase;
+import org.apache.camel.component.salesforce.api.dto.Attributes;
 import org.apache.camel.component.salesforce.api.dto.RestError;
 import org.apache.camel.util.ObjectHelper;
 
@@ -226,7 +227,8 @@ public final class SObjectTree implements Serializable {
     }
 
     boolean setErrorFor(final SObjectNode node, final String referenceId, final List<RestError> errors) {
-        final Attributes attributes = node.getAttributes();
+        final Attributes attributes =
+                node.getObject().getAttributes();
 
         final String attributesReferenceId = attributes.getReferenceId();
 
@@ -240,7 +242,8 @@ public final class SObjectTree implements Serializable {
     }
 
     boolean setIdFor(final SObjectNode node, final String referenceId, final String id) {
-        final Attributes attributes = node.getAttributes();
+        final Attributes attributes =
+                node.getObject().getAttributes();
 
         final String attributesReferenceId = attributes.getReferenceId();
 
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RestApiIntegrationTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RestApiIntegrationTest.java
index 199a7f4..d88590d 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RestApiIntegrationTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RestApiIntegrationTest.java
@@ -22,6 +22,7 @@ import java.time.ZonedDateTime;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
+import java.util.UUID;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -41,9 +42,13 @@ import org.apache.camel.component.salesforce.api.dto.SObjectBasicInfo;
 import org.apache.camel.component.salesforce.api.dto.SObjectDescription;
 import org.apache.camel.component.salesforce.api.dto.Version;
 import org.apache.camel.component.salesforce.api.dto.Versions;
+import org.apache.camel.component.salesforce.dto.generated.Account;
+import org.apache.camel.component.salesforce.dto.generated.Contact;
 import org.apache.camel.component.salesforce.dto.generated.Document;
 import org.apache.camel.component.salesforce.dto.generated.Line_Item__c;
 import org.apache.camel.component.salesforce.dto.generated.Merchandise__c;
+import org.apache.camel.component.salesforce.dto.generated.QueryRecordsAccount;
+import org.apache.camel.component.salesforce.dto.generated.QueryRecordsContact;
 import org.apache.camel.component.salesforce.dto.generated.QueryRecordsLine_Item__c;
 import org.apache.camel.component.salesforce.dto.generated.Task;
 import org.apache.camel.support.jsse.SSLContextParameters;
@@ -66,6 +71,7 @@ import org.junit.runners.Parameterized.Parameters;
 @RunWith(Parameterized.class)
 public class RestApiIntegrationTest extends AbstractSalesforceTestBase {
 
+
     /**
      * Request DTO for Salesforce APEX REST calls. See
      * https://www.salesforce.com/us/developer/docs/apexcode/Content/apex_rest_methods.htm.
@@ -114,11 +120,13 @@ public class RestApiIntegrationTest extends AbstractSalesforceTestBase {
     @Parameter
     public String format;
 
-    private String testId;
+    private String merchandiseId;
+    private String accountId;
+    private String contactId;
 
     @After
     public void removeData() {
-        template.request("salesforce:deleteSObject?sObjectName=Merchandise__c&sObjectId=" + testId, (Processor) (e) -> {
+        template.request("salesforce:deleteSObject?sObjectName=Merchandise__c&sObjectId=" + merchandiseId, (Processor) (e) -> {
             // NOOP
         });
         template.request("direct:deleteLineItems", (Processor) (e) -> {
@@ -133,28 +141,60 @@ public class RestApiIntegrationTest extends AbstractSalesforceTestBase {
         merchandise.setPrice__c(10.0);
         merchandise.setTotal_Inventory__c(100.0);
         merchandise.setDescription__c("Test Merchandise!");
-        final CreateSObjectResult result = template().requestBody("salesforce:createSObject", merchandise,
+        final CreateSObjectResult merchandiseResult = template().requestBody("salesforce:createSObject", merchandise,
             CreateSObjectResult.class);
 
-        testId = result.getId();
+        merchandiseId = merchandiseResult.getId();
+    }
+
+    private void createAccountAndContact() {
+        final Account account = new Account();
+        account.setName("Child Test");
+        String accountExternalId = UUID.randomUUID().toString();
+        account.setExternal_Id__c(accountExternalId);
+        CreateSObjectResult accountResult = template().requestBody("direct:createSObject", account,
+                CreateSObjectResult.class);
+        accountId = accountResult.getId();
+
+        final Account accountRef = new Account();
+        accountRef.setExternal_Id__c(accountExternalId);
+        final Contact contact = new Contact();
+        contact.setAccount(accountRef);
+        contact.setLastName("RelationshipTest");
+        CreateSObjectResult contactResult = template().requestBody("direct:createSObject", contact,
+                CreateSObjectResult.class);
+        contactId = contactResult.getId();
+    }
+
+    private void deleteAccountAndContact() {
+        if (accountId != null) {
+            template.request("salesforce:deleteSObject?sObjectName=Account&sObjectId=" + accountId, (Processor) (e) -> {
+                // NOOP
+            });
+        }
+        if (contactId != null) {
+            template.request("salesforce:deleteSObject?sObjectName=Contact&sObjectId=" + contactId, (Processor) (e) -> {
+                // NOOP
+            });
+        }
     }
 
     @Test
     public void testApexCall() throws Exception {
         // request merchandise with id in URI template
-        Merchandise__c merchandise = template().requestBodyAndHeader("direct:apexCallGet", null, "id", testId,
+        Merchandise__c merchandise = template().requestBodyAndHeader("direct:apexCallGet", null, "id", merchandiseId,
             Merchandise__c.class);
         assertNotNull(merchandise);
 
         // request merchandise with id as query param
         merchandise = template().requestBodyAndHeader("direct:apexCallGetWithId", null,
-            SalesforceEndpointConfig.APEX_QUERY_PARAM_PREFIX + "id", testId, Merchandise__c.class);
+            SalesforceEndpointConfig.APEX_QUERY_PARAM_PREFIX + "id", merchandiseId, Merchandise__c.class);
         assertNotNull(merchandise);
 
         // patch merchandise
         // clear fields that won't be modified
         merchandise.clearBaseFields();
-        merchandise.setId(testId);
+        merchandise.setId(merchandiseId);
         merchandise.setPrice__c(null);
         merchandise.setTotal_Inventory__c(null);
 
@@ -191,6 +231,35 @@ public class RestApiIntegrationTest extends AbstractSalesforceTestBase {
     }
 
     @Test
+    public void testRelationshipCreateDelete() throws Exception {
+        final Account account = new Account();
+        account.setName("Account 1");
+        String accountExternalId = UUID.randomUUID().toString();
+        account.setExternal_Id__c(accountExternalId);
+        final CreateSObjectResult accountResult = template().requestBody("direct:createSObject", account,
+                CreateSObjectResult.class);
+        assertNotNull(accountResult);
+        assertTrue("Create success", accountResult.getSuccess());
+
+        final Account accountRef = new Account();
+        accountRef.setExternal_Id__c(accountExternalId);
+        final Contact contact = new Contact();
+        contact.setAccount(accountRef);
+        contact.setLastName("RelationshipTest");
+        final CreateSObjectResult contactResult = template().requestBody("direct:createSObject", contact,
+                CreateSObjectResult.class);
+        assertNotNull(accountResult);
+        assertTrue("Create success", contactResult.getSuccess());
+
+        // delete the Contact
+        template().requestBodyAndHeader("direct:deleteSObject", contactResult.getId(), "sObjectName", "Contact");
+
+        // delete the Account
+        template().requestBodyAndHeader("direct:deleteSObject", accountResult.getId(), "sObjectName", "Account");
+
+    }
+
+    @Test
     public void testCreateUpdateDeleteTasks() throws Exception {
         final Task taken = new Task();
         taken.setDescription("Task1");
@@ -240,7 +309,6 @@ public class RestApiIntegrationTest extends AbstractSalesforceTestBase {
         assertTrue(result.getSuccess());
 
         // clear read only parent type fields
-        lineItem.setInvoice_Statement__c(null);
         lineItem.setMerchandise__c(null);
         // change the units sold
         lineItem.setUnits_Sold__c(25.0);
@@ -262,7 +330,7 @@ public class RestApiIntegrationTest extends AbstractSalesforceTestBase {
 
         // set test Id for testGetSObject
         assertFalse("RecentItems is empty", objectBasicInfo.getRecentItems().isEmpty());
-        testId = objectBasicInfo.getRecentItems().get(0).getId();
+        merchandiseId = objectBasicInfo.getRecentItems().get(0).getId();
     }
 
     @Test
@@ -307,7 +375,7 @@ public class RestApiIntegrationTest extends AbstractSalesforceTestBase {
 
     @Test
     public void testGetSObject() throws Exception {
-        final Merchandise__c merchandise = template().requestBody("direct:getSObject", testId, Merchandise__c.class);
+        final Merchandise__c merchandise = template().requestBody("direct:getSObject", merchandiseId, Merchandise__c.class);
         assertNotNull(merchandise);
 
         assertNull(merchandise.getTotal_Inventory__c());
@@ -338,6 +406,37 @@ public class RestApiIntegrationTest extends AbstractSalesforceTestBase {
     }
 
     @Test
+    public void testParentRelationshipQuery() throws Exception {
+        try {
+            createAccountAndContact();
+            final QueryRecordsContact queryRecords = template().requestBody("direct:parentRelationshipQuery", null,
+                    QueryRecordsContact.class);
+            Account account = queryRecords.getRecords().get(0).getAccount();
+            assertNotNull("Account was null", account);
+        }
+        finally {
+            deleteAccountAndContact();
+        }
+    }
+
+
+    @Test
+    public void testChildRelationshipQuery() throws Exception {
+        try {
+            createAccountAndContact();
+            final QueryRecordsAccount queryRecords = template().requestBody("direct:childRelationshipQuery", null,
+                    QueryRecordsAccount.class);
+
+            assertFalse(queryRecords.getRecords().isEmpty());
+            Account account1 = queryRecords.getRecords().get(0);
+            assertFalse(account1.getContacts().getRecords().isEmpty());
+        }
+        finally {
+            deleteAccountAndContact();
+        }
+    }
+
+    @Test
     public void testQueryAll() throws Exception {
         final QueryRecordsLine_Item__c queryRecords = template().requestBody("direct:queryAll", null,
             QueryRecordsLine_Item__c.class);
@@ -413,7 +512,7 @@ public class RestApiIntegrationTest extends AbstractSalesforceTestBase {
     public void testStatus300() throws Exception {
         // get test merchandise
         // note that the header value overrides sObjectFields in endpoint
-        final Merchandise__c merchandise = template().requestBodyAndHeader("direct:getSObject", testId, "sObjectFields",
+        final Merchandise__c merchandise = template().requestBodyAndHeader("direct:getSObject", merchandiseId, "sObjectFields",
             "Name,Description__c,Price__c,Total_Inventory__c", Merchandise__c.class);
         assertNotNull(merchandise);
         assertNotNull(merchandise.getName());
@@ -453,7 +552,7 @@ public class RestApiIntegrationTest extends AbstractSalesforceTestBase {
     public void testStatus400() throws Exception {
         // get test merchandise
         // note that the header value overrides sObjectFields in endpoint
-        final Merchandise__c merchandise = template().requestBodyAndHeader("direct:getSObject", testId, "sObjectFields",
+        final Merchandise__c merchandise = template().requestBodyAndHeader("direct:getSObject", merchandiseId, "sObjectFields",
             "Description__c,Price__c", Merchandise__c.class);
         assertNotNull(merchandise);
         assertNotNull(merchandise.getPrice__c());
@@ -571,6 +670,19 @@ public class RestApiIntegrationTest extends AbstractSalesforceTestBase {
                 from("direct:query").to("salesforce:query?sObjectQuery=SELECT name from Line_Item__c&sObjectClass="
                     + QueryRecordsLine_Item__c.class.getName() + "&format=" + format);
 
+                // testParentRelationshipQuery
+                from("direct:parentRelationshipQuery")
+                    .process(exchange -> exchange.getIn()
+                        .setBody("SELECT LastName, Account.Name FROM Contact WHERE Id = '" + contactId + "'"))
+                    .to("salesforce:query?sObjectClass=" + QueryRecordsContact.class.getName() + "&format=" + format);
+
+                // testChildRelationshipQuery
+                from("direct:childRelationshipQuery")
+                    .process(exchange -> exchange.getIn()
+                    .setBody("SELECT Id, Name, (SELECT Id, LastName FROM Contacts)"
+                        + " FROM Account WHERE Id = '" + accountId + "'"))
+                    .to("salesforce:query?sObjectClass=" + QueryRecordsAccount.class.getName() + "&format=" + format);
+
                 // testQueryAll
                 from("direct:queryAll")
                     .to("salesforce:queryAll?sObjectQuery=SELECT name from Line_Item__c&sObjectClass="
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/MultiSelectPicklistJsonTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/MultiSelectPicklistJsonTest.java
index add8b2e..89655e2 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/MultiSelectPicklistJsonTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/MultiSelectPicklistJsonTest.java
@@ -28,8 +28,8 @@ import static org.junit.Assert.assertNull;
 
 public class MultiSelectPicklistJsonTest {
 
-    private static final String TEST_JSON = "{\"MspField\":\"Value1;Value2;Value3\"}";
-    private static final String TEST_NULL_JSON = "{\"MspField\":null}";
+    private static final String TEST_JSON = "{\"attributes\":{\"type\":\"MSPTest\"},\"MspField\":\"Value1;Value2;Value3\"}";
+    private static final String TEST_NULL_JSON = "{\"attributes\":{\"type\":\"MSPTest\"},\"MspField\":null}";
 
     private static ObjectMapper objectMapper = JsonUtils.createObjectMapper();
 
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectBatchTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectBatchTest.java
index 8d934f6..59626ab 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectBatchTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectBatchTest.java
@@ -78,58 +78,93 @@ public class SObjectBatchTest {
     @Test
     public void shouldSerializeToJson() throws JsonProcessingException {
         final String json = Pattern.compile("\\s+(?=([^\"]*\"[^\"]*\")*[^\"]*$)", Pattern.DOTALL)
-            .matcher("{"//
-                + "\"batchRequests\" : ["//
-                + "    {"//
-                + "        \"method\" : \"POST\","//
-                + "        \"url\" : \"v37.0/sobjects/Account/\","//
-                + "        \"richInput\" : {\"Industry\" : \"Environmental\" , \"Name\" : \"NewAccountName\"}"//
-                + "    },{"//
-                + "        \"method\" : \"DELETE\","//
-                + "        \"url\" : \"v37.0/sobjects/Account/001D000000K0fXOIAZ\""//
-                + "    },{"//
-                + "        \"method\" : \"GET\","//
-                + "        \"url\" : \"v37.0/sobjects/Account/001D000000K0fXOIAZ?fields=Name,BillingPostalCode\""//
-                + "    },{"//
-                + "        \"method\" : \"GET\","//
-                + "        \"url\" : \"v37.0/sobjects/Account/EPK/12345\""//
-                + "    },{"//
-                + "        \"method\" : \"GET\","//
-                + "        \"url\" : \"v37.0/sobjects/Account/001D000000K0fXOIAZ/CreatedBy?fields=Name\"},{"//
-                + "        \"method\" : \"GET\","//
-                + "        \"url\" : \"v37.0/limits/\""//
-                + "    },{"//
-                + "        \"method\" : \"PATCH\","//
-                + "        \"url\" : \"v37.0/sobjects/Account/001D000000K0fXOIAZ\","//
-                + "        \"richInput\" : {\"AccountNumber\" : \"AC12345\", \"Name\" : \"NewName\"}"//
-                + "    },{"//
-                + "        \"method\" : \"PATCH\","//
-                + "        \"url\" : \"v37.0/sobjects/Account/EPK/12345\","//
-                + "        \"richInput\" : {\"Name\" : \"NewName\"}"//
-                + "    },{"//
-                + "        \"method\" : \"PATCH\","//
-                + "        \"url\" : \"v37.0/sobjects/Account/EPK/12345\","//
-                + "        \"richInput\" : {\"Name\" : \"NewName\"}"//
-                + "    },{"//
-                + "        \"method\" : \"PATCH\","//
-                + "        \"url\" : \"v37.0/some/url\""//
-                + "    },{"//
-                + "        \"method\" : \"GET\","//
-                + "        \"url\" : \"v37.0/query/?q=SELECT Name FROM Account\""//
-                + "    },{"//
-                + "        \"method\" : \"GET\","//
-                + "        \"url\" : \"v37.0/queryAll/?q=SELECT Name FROM Account\""//
-                + "    },{"//
-                + "        \"method\" : \"GET\","//
-                + "        \"url\" : \"v37.0/search/?q=FIND {joe}\""//
-                + "    }]"//
-                + "}")
+            .matcher("{\n" +
+                    "  \"batchRequests\": [\n" +
+                    "    {\n" +
+                    "      \"method\": \"POST\",\n" +
+                    "      \"url\": \"v37.0/sobjects/Account/\",\n" +
+                    "      \"richInput\": {\n" +
+                    "        \"attributes\": {\n" +
+                    "          \"type\": \"Account\"\n" +
+                    "        },\n" +
+                    "        \"Industry\": \"Environmental\",\n" +
+                    "        \"Name\": \"NewAccountName\"\n" +
+                    "      }\n" +
+                    "    },\n" +
+                    "    {\n" +
+                    "      \"method\": \"DELETE\",\n" +
+                    "      \"url\": \"v37.0/sobjects/Account/001D000000K0fXOIAZ\"\n" +
+                    "    },\n" +
+                    "    {\n" +
+                    "      \"method\": \"GET\",\n" +
+                    "      \"url\": \"v37.0/sobjects/Account/001D000000K0fXOIAZ?fields=Name,BillingPostalCode\"\n" +
+                    "    },\n" +
+                    "    {\n" +
+                    "      \"method\": \"GET\",\n" +
+                    "      \"url\": \"v37.0/sobjects/Account/EPK/12345\"\n" +
+                    "    },\n" +
+                    "    {\n" +
+                    "      \"method\": \"GET\",\n" +
+                    "      \"url\": \"v37.0/sobjects/Account/001D000000K0fXOIAZ/CreatedBy?fields=Name\"\n" +
+                    "    },\n" +
+                    "    {\n" +
+                    "      \"method\": \"GET\",\n" +
+                    "      \"url\": \"v37.0/limits/\"\n" +
+                    "    },\n" +
+                    "    {\n" +
+                    "      \"method\": \"PATCH\",\n" +
+                    "      \"url\": \"v37.0/sobjects/Account/001D000000K0fXOIAZ\",\n" +
+                    "      \"richInput\": {\n" +
+                    "        \"attributes\": {\n" +
+                    "          \"type\": \"Account\"\n" +
+                    "        },\n" +
+                    "        \"AccountNumber\": \"AC12345\",\n" +
+                    "        \"Name\": \"NewName\"\n" +
+                    "      }\n" +
+                    "    },\n" +
+                    "    {\n" +
+                    "      \"method\": \"PATCH\",\n" +
+                    "      \"url\": \"v37.0/sobjects/Account/EPK/12345\",\n" +
+                    "      \"richInput\": {\n" +
+                    "        \"attributes\": {\n" +
+                    "          \"type\": \"Account\"\n" +
+                    "        },\n" +
+                    "        \"Name\": \"NewName\"\n" +
+                    "      }\n" +
+                    "    },\n" +
+                    "    {\n" +
+                    "      \"method\": \"PATCH\",\n" +
+                    "      \"url\": \"v37.0/sobjects/Account/EPK/12345\",\n" +
+                    "      \"richInput\": {\n" +
+                    "        \"attributes\": {\n" +
+                    "          \"type\": \"Account\"\n" +
+                    "        },\n" +
+                    "        \"Name\": \"NewName\"\n" +
+                    "      }\n" +
+                    "    },\n" +
+                    "    {\n" +
+                    "      \"method\": \"PATCH\",\n" +
+                    "      \"url\": \"v37.0/some/url\"\n" +
+                    "    },\n" +
+                    "    {\n" +
+                    "      \"method\": \"GET\",\n" +
+                    "      \"url\": \"v37.0/query/?q=SELECT Name FROM Account\"\n" +
+                    "    },\n" +
+                    "    {\n" +
+                    "      \"method\": \"GET\",\n" +
+                    "      \"url\": \"v37.0/queryAll/?q=SELECT Name FROM Account\"\n" +
+                    "    },\n" +
+                    "    {\n" +
+                    "      \"method\": \"GET\",\n" +
+                    "      \"url\": \"v37.0/search/?q=FIND {joe}\"\n" +
+                    "    }\n" +
+                    "  ]\n" +
+                    "}")
             .replaceAll("");
 
         final ObjectMapper mapper = JsonUtils.createObjectMapper();
 
         final String serialized = mapper.writerFor(SObjectBatch.class).writeValueAsString(batch);
-
         assertEquals("Should serialize as expected by Salesforce", json, serialized);
     }
 
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectCompositeTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectCompositeTest.java
index e9eec09..73ed981 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectCompositeTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectCompositeTest.java
@@ -40,6 +40,11 @@ public class SObjectCompositeTest {
     @JsonPropertyOrder({"account__c", "contactId__c"})
     public static class AccountContactJunction__c extends AbstractDescribedSObjectBase {
 
+        public AccountContactJunction__c() {
+            super();
+            getAttributes().setType("AccountContactJunction__c");
+        }
+
         private String account__c;
 
         private String contactId__c;
@@ -115,7 +120,6 @@ public class SObjectCompositeTest {
             .configure(SerializationFeature.INDENT_OUTPUT, true);
 
         final String serialized = mapper.writerFor(SObjectComposite.class).writeValueAsString(composite);
-
         assertThat(serialized).as("Should serialize as expected by Salesforce").isEqualTo(expectedJson);
     }
 }
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectTreeTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectTreeTest.java
index 05b2060..013ef2b 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectTreeTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectTreeTest.java
@@ -75,41 +75,54 @@ public class SObjectTreeTest extends CompositeTestBase {
         final String json = writer.writeValueAsString(tree);
 
         assertEquals("Should serialize to JSON as in Salesforce example",
-            "{\"records\":["//
-                + "{"//
-                + "\"attributes\":{\"referenceId\":\"ref1\",\"type\":\"Account\"},"//
-                + "\"Industry\":\"Banking\","//
-                + "\"Name\":\"SampleAccount\","//
-                + "\"NumberOfEmployees\":100,"//
-                + "\"Phone\":\"1234567890\","//
-                + "\"Website\":\"www.salesforce.com\","//
-                + "\"Contacts\":{"//
-                + "\"records\":["//
-                + "{"//
-                + "\"attributes\":{\"referenceId\":\"ref2\",\"type\":\"Contact\"},"//
-                + "\"Email\":\"sample@salesforce.com\","//
-                + "\"LastName\":\"Smith\","//
-                + "\"Title\":\"President\""//
-                + "},"//
-                + "{"//
-                + "\"attributes\":{\"referenceId\":\"ref3\",\"type\":\"Contact\"},"//
-                + "\"Email\":\"sample@salesforce.com\","//
-                + "\"LastName\":\"Evans\","//
-                + "\"Title\":\"Vice President\""//
-                + "}"//
-                + "]"//
-                + "}"//
-                + "},"//
-                + "{"//
-                + "\"attributes\":{\"referenceId\":\"ref4\",\"type\":\"Account\"},"//
-                + "\"Industry\":\"Banking\","//
-                + "\"Name\":\"SampleAccount2\","//
-                + "\"NumberOfEmployees\":100,"//
-                + "\"Phone\":\"1234567890\","//
-                + "\"Website\":\"www.salesforce2.com\""//
-                + "}"//
-                + "]"//
-                + "}",
+            "{" +
+                    "\"records\":[" +
+                    "{" +
+                    "\"Industry\":\"Banking\"," +
+                    "\"Name\":\"SampleAccount\"," +
+                    "\"NumberOfEmployees\":100," +
+                    "\"Phone\":\"1234567890\"," +
+                    "\"Website\":\"www.salesforce.com\"," +
+                    "\"attributes\":{" +
+                    "\"referenceId\":\"ref1\"," +
+                    "\"type\":\"Account\"" +
+                    "}," +
+                    "\"Contacts\":{" +
+                    "\"records\":[" +
+                    "{" +
+                    "\"Email\":\"sample@salesforce.com\"," +
+                    "\"LastName\":\"Smith\"," +
+                    "\"Title\":\"President\"," +
+                    "\"attributes\":{" +
+                    "\"referenceId\":\"ref2\"," +
+                    "\"type\":\"Contact\"" +
+                    "}" +
+                    "}," +
+                    "{" +
+                    "\"Email\":\"sample@salesforce.com\"," +
+                    "\"LastName\":\"Evans\"," +
+                    "\"Title\":\"Vice President\"," +
+                    "\"attributes\":{" +
+                    "\"referenceId\":\"ref3\"," +
+                    "\"type\":\"Contact\"" +
+                    "}" +
+                    "}" +
+                    "]" +
+                    "}" +
+                    "}," +
+                    "{" +
+                    "\"Industry\":\"Banking\"," +
+                    "\"Name\":\"SampleAccount2\"," +
+                    "\"NumberOfEmployees\":100," +
+                    "\"Phone\":\"1234567890\"," +
+                    "\"Website\":\"www.salesforce2.com\"," +
+                    "\"attributes\":{" +
+                    "\"referenceId\":\"ref4\"," +
+                    "\"type\":\"Account\"" +
+                    "}" +
+                    "}" +
+                    "]" +
+                    "}",
             json);
     }
 
@@ -140,13 +153,13 @@ public class SObjectTreeTest extends CompositeTestBase {
                 + "<NumberOfEmployees>100</NumberOfEmployees>"//
                 + "<Contacts>"//
                 + "<records type=\"Contact\" referenceId=\"ref2\">"//
-                + "<Email>sample@salesforce.com</Email>"//
                 + "<LastName>Smith</LastName>"//
+                + "<Email>sample@salesforce.com</Email>"//
                 + "<Title>President</Title>"//
                 + "</records>"//
                 + "<records type=\"Contact\" referenceId=\"ref3\">"//
-                + "<Email>sample@salesforce.com</Email>"//
                 + "<LastName>Evans</LastName>"//
+                + "<Email>sample@salesforce.com</Email>"//
                 + "<Title>Vice President</Title>"//
                 + "</records>"//
                 + "</Contacts>"//
@@ -203,9 +216,9 @@ public class SObjectTreeTest extends CompositeTestBase {
         final SObjectNode assetNode = new SObjectNode(tree, asset);
         contactNode.addChild("Assets", assetNode);
 
-        assertEquals("ref1", accountNode.getAttributes().getReferenceId());
-        assertEquals("ref2", contactNode.getAttributes().getReferenceId());
-        assertEquals("ref3", assetNode.getAttributes().getReferenceId());
+        assertEquals("ref1", accountNode.getObject().getAttributes().getReferenceId());
+        assertEquals("ref2", contactNode.getObject().getAttributes().getReferenceId());
+        assertEquals("ref3", assetNode.getObject().getAttributes().getReferenceId());
 
         tree.setIdFor("ref1", "id1");
         tree.setIdFor("ref3", "id3");
@@ -229,13 +242,13 @@ public class SObjectTreeTest extends CompositeTestBase {
         tree.addNode(account2);
 
         final SObjectNode simpleAccountFromTree = tree.records.get(0);
-        assertEquals("ref1", simpleAccountFromTree.getAttributes().getReferenceId());
+        assertEquals("ref1", simpleAccountFromTree.getObject().getAttributes().getReferenceId());
 
         final Iterator<SObjectNode> simpleAccountNodes = simpleAccountFromTree.getChildNodes().iterator();
-        assertEquals("ref2", simpleAccountNodes.next().getAttributes().getReferenceId());
-        assertEquals("ref3", simpleAccountNodes.next().getAttributes().getReferenceId());
+        assertEquals("ref2", simpleAccountNodes.next().getObject().getAttributes().getReferenceId());
+        assertEquals("ref3", simpleAccountNodes.next().getObject().getAttributes().getReferenceId());
 
-        assertEquals("ref4", account2.getAttributes().getReferenceId());
+        assertEquals("ref4", account2.getObject().getAttributes().getReferenceId());
     }
 
     @Test
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/utils/QueryHelperTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/utils/QueryHelperTest.java
index 41e31d7..86cd102 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/utils/QueryHelperTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/utils/QueryHelperTest.java
@@ -27,7 +27,7 @@ public class QueryHelperTest {
     @Test
     public void shouldFilterAndGatherAllFieldNames() {
         assertThat(QueryHelper.filteredFieldNamesOf(new Account(), SObjectField::isCustom))
-            .contains("CustomerPriority__c", "SLA__c", "Active__c");
+            .contains("External_Id__c", "Shipping_Location__c");
     }
 
     @Test
@@ -38,21 +38,23 @@ public class QueryHelperTest {
     @Test
     public void shouldGenerateQueryForAllFields() {
         assertThat(QueryHelper.queryToFetchAllFieldsOf(new Account())).isEqualTo(
-            "SELECT Id, IsDeleted, MasterRecordId, Name, Type, ParentId, BillingStreet, BillingCity, BillingState, "
-                + "BillingPostalCode, BillingCountry, BillingLatitude, BillingLongitude, BillingAddress, ShippingStreet, "
-                + "ShippingCity, ShippingState, ShippingPostalCode, ShippingCountry, ShippingLatitude, ShippingLongitude, "
-                + "ShippingAddress, Phone, Fax, AccountNumber, Website, PhotoUrl, Sic, Industry, AnnualRevenue, NumberOfEmployees, "
-                + "Ownership, TickerSymbol, Description, Rating, Site, OwnerId, CreatedDate, CreatedById, LastModifiedDate, "
-                + "LastModifiedById, SystemModstamp, LastActivityDate, LastViewedDate, LastReferencedDate, Jigsaw, JigsawCompanyId, "
-                + "CleanStatus, AccountSource, DunsNumber, Tradestyle, NaicsCode, NaicsDesc, YearStarted, SicDesc, DandbCompanyId, "
-                + "CustomerPriority__c, SLA__c, Active__c, NumberofLocations__c, UpsellOpportunity__c, SLASerialNumber__c, "
-                + "SLAExpirationDate__c, Shipping_Location__Latitude__s, Shipping_Location__Longitude__s, Shipping_Location__c FROM Account");
+            "SELECT Id, IsDeleted, MasterRecordId, Name, Type, ParentId, BillingStreet, BillingCity, " +
+            "BillingState, BillingPostalCode, BillingCountry, BillingLatitude, BillingLongitude, " +
+            "BillingGeocodeAccuracy, BillingAddress, ShippingStreet, ShippingCity, ShippingState, " +
+            "ShippingPostalCode, ShippingCountry, ShippingLatitude, ShippingLongitude, " +
+            "ShippingGeocodeAccuracy, ShippingAddress, Phone, Fax, AccountNumber, Website, " +
+            "PhotoUrl, Sic, Industry, AnnualRevenue, NumberOfEmployees, Ownership, TickerSymbol, " +
+            "Description, Rating, Site, OwnerId, CreatedDate, CreatedById, LastModifiedDate, " +
+            "LastModifiedById, SystemModstamp, LastActivityDate, LastViewedDate, LastReferencedDate, " +
+            "Jigsaw, JigsawCompanyId, CleanStatus, AccountSource, DunsNumber, Tradestyle, NaicsCode, " +
+            "NaicsDesc, YearStarted, SicDesc, DandbCompanyId, OperatingHoursId, Shipping_Location__Latitude__s, " +
+            "Shipping_Location__Longitude__s, Shipping_Location__c, External_Id__c FROM Account");
     }
 
     @Test
     public void shouldGenerateQueryForFilteredFields() {
+        String s = QueryHelper.queryToFetchFilteredFieldsOf(new Account(), SObjectField::isCustom);
         assertThat(QueryHelper.queryToFetchFilteredFieldsOf(new Account(), SObjectField::isCustom)).isEqualTo(
-            "SELECT CustomerPriority__c, SLA__c, Active__c, NumberofLocations__c, UpsellOpportunity__c, SLASerialNumber__c, "
-                + "SLAExpirationDate__c, Shipping_Location__Latitude__s, Shipping_Location__Longitude__s, Shipping_Location__c FROM Account");
+            "SELECT Shipping_Location__Latitude__s, Shipping_Location__Longitude__s, Shipping_Location__c, External_Id__c FROM Account");
     }
 }
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Account.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Account.java
index 4f6ce8b..433ce60 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Account.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Account.java
@@ -25,8 +25,7 @@ import com.thoughtworks.xstream.annotations.XStreamConverter;
 
 import org.apache.camel.component.salesforce.api.PicklistEnumConverter;
 import org.apache.camel.component.salesforce.api.dto.AbstractDescribedSObjectBase;
-import org.apache.camel.component.salesforce.api.dto.InfoUrls;
-import org.apache.camel.component.salesforce.api.dto.RecordTypeInfo;
+import org.apache.camel.component.salesforce.api.dto.Attributes;
 import org.apache.camel.component.salesforce.api.dto.SObjectDescription;
 import org.apache.camel.component.salesforce.api.dto.SObjectDescriptionUrls;
 import org.apache.camel.component.salesforce.api.dto.SObjectField;
@@ -38,9 +37,13 @@ import org.apache.camel.component.salesforce.api.dto.SObjectField;
 @XStreamAlias("Account")
 public class Account extends AbstractDescribedSObjectBase {
 
+    public Account() {
+        super();
+        getAttributes().setType("Account");
+    }
+
     private static final SObjectDescription DESCRIPTION = createSObjectDescription();
 
-    // MasterRecordId
     private String MasterRecordId;
 
     @JsonProperty("MasterRecordId")
@@ -53,7 +56,14 @@ public class Account extends AbstractDescribedSObjectBase {
         this.MasterRecordId = MasterRecordId;
     }
 
-    // ParentId
+    @XStreamAlias("MasterRecord")
+    private Account MasterRecord;
+
+    @JsonProperty("MasterRecord")
+    public Account getMasterRecord() {
+        return this.MasterRecord;
+    }
+
     private String ParentId;
 
     @JsonProperty("ParentId")
@@ -66,7 +76,18 @@ public class Account extends AbstractDescribedSObjectBase {
         this.ParentId = ParentId;
     }
 
-    // BillingStreet
+    @XStreamAlias("Parent")
+    private Account Parent;
+
+    @JsonProperty("Parent")
+    public Account getParent() {
+        return this.Parent;
+    }
+
+    @JsonProperty("Parent")
+    public void setParent(Account Parent) {
+        this.Parent = Parent;
+    }
     private String BillingStreet;
 
     @JsonProperty("BillingStreet")
@@ -79,7 +100,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.BillingStreet = BillingStreet;
     }
 
-    // BillingCity
     private String BillingCity;
 
     @JsonProperty("BillingCity")
@@ -92,7 +112,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.BillingCity = BillingCity;
     }
 
-    // BillingState
     private String BillingState;
 
     @JsonProperty("BillingState")
@@ -105,7 +124,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.BillingState = BillingState;
     }
 
-    // BillingPostalCode
     private String BillingPostalCode;
 
     @JsonProperty("BillingPostalCode")
@@ -118,7 +136,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.BillingPostalCode = BillingPostalCode;
     }
 
-    // BillingCountry
     private String BillingCountry;
 
     @JsonProperty("BillingCountry")
@@ -131,7 +148,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.BillingCountry = BillingCountry;
     }
 
-    // BillingLatitude
     private Double BillingLatitude;
 
     @JsonProperty("BillingLatitude")
@@ -144,7 +160,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.BillingLatitude = BillingLatitude;
     }
 
-    // BillingLongitude
     private Double BillingLongitude;
 
     @JsonProperty("BillingLongitude")
@@ -157,7 +172,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.BillingLongitude = BillingLongitude;
     }
 
-    // BillingAddress
     private org.apache.camel.component.salesforce.api.dto.Address BillingAddress;
 
     @JsonProperty("BillingAddress")
@@ -170,7 +184,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.BillingAddress = BillingAddress;
     }
 
-    // ShippingStreet
     private String ShippingStreet;
 
     @JsonProperty("ShippingStreet")
@@ -183,7 +196,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.ShippingStreet = ShippingStreet;
     }
 
-    // ShippingCity
     private String ShippingCity;
 
     @JsonProperty("ShippingCity")
@@ -196,7 +208,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.ShippingCity = ShippingCity;
     }
 
-    // ShippingState
     private String ShippingState;
 
     @JsonProperty("ShippingState")
@@ -209,7 +220,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.ShippingState = ShippingState;
     }
 
-    // ShippingPostalCode
     private String ShippingPostalCode;
 
     @JsonProperty("ShippingPostalCode")
@@ -222,7 +232,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.ShippingPostalCode = ShippingPostalCode;
     }
 
-    // ShippingCountry
     private String ShippingCountry;
 
     @JsonProperty("ShippingCountry")
@@ -235,7 +244,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.ShippingCountry = ShippingCountry;
     }
 
-    // ShippingLatitude
     private Double ShippingLatitude;
 
     @JsonProperty("ShippingLatitude")
@@ -248,7 +256,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.ShippingLatitude = ShippingLatitude;
     }
 
-    // ShippingLongitude
     private Double ShippingLongitude;
 
     @JsonProperty("ShippingLongitude")
@@ -261,7 +268,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.ShippingLongitude = ShippingLongitude;
     }
 
-    // ShippingAddress
     private org.apache.camel.component.salesforce.api.dto.Address ShippingAddress;
 
     @JsonProperty("ShippingAddress")
@@ -274,7 +280,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.ShippingAddress = ShippingAddress;
     }
 
-    // Phone
     private String Phone;
 
     @JsonProperty("Phone")
@@ -287,7 +292,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.Phone = Phone;
     }
 
-    // Fax
     private String Fax;
 
     @JsonProperty("Fax")
@@ -300,7 +304,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.Fax = Fax;
     }
 
-    // AccountNumber
     private String AccountNumber;
 
     @JsonProperty("AccountNumber")
@@ -313,7 +316,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.AccountNumber = AccountNumber;
     }
 
-    // Website
     private String Website;
 
     @JsonProperty("Website")
@@ -326,7 +328,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.Website = Website;
     }
 
-    // PhotoUrl
     private String PhotoUrl;
 
     @JsonProperty("PhotoUrl")
@@ -339,7 +340,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.PhotoUrl = PhotoUrl;
     }
 
-    // Sic
     private String Sic;
 
     @JsonProperty("Sic")
@@ -352,7 +352,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.Sic = Sic;
     }
 
-    // Industry
     @XStreamConverter(PicklistEnumConverter.class)
     private Account_IndustryEnum Industry;
 
@@ -366,7 +365,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.Industry = Industry;
     }
 
-    // AnnualRevenue
     private Double AnnualRevenue;
 
     @JsonProperty("AnnualRevenue")
@@ -379,7 +377,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.AnnualRevenue = AnnualRevenue;
     }
 
-    // NumberOfEmployees
     private Integer NumberOfEmployees;
 
     @JsonProperty("NumberOfEmployees")
@@ -392,7 +389,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.NumberOfEmployees = NumberOfEmployees;
     }
 
-    // TickerSymbol
     private String TickerSymbol;
 
     @JsonProperty("TickerSymbol")
@@ -405,7 +401,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.TickerSymbol = TickerSymbol;
     }
 
-    // Description
     private String Description;
 
     @JsonProperty("Description")
@@ -418,7 +413,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.Description = Description;
     }
 
-    // Site
     private String Site;
 
     @JsonProperty("Site")
@@ -431,7 +425,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.Site = Site;
     }
 
-    // Jigsaw
     private String Jigsaw;
 
     @JsonProperty("Jigsaw")
@@ -444,7 +437,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.Jigsaw = Jigsaw;
     }
 
-    // JigsawCompanyId
     private String JigsawCompanyId;
 
     @JsonProperty("JigsawCompanyId")
@@ -457,7 +449,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.JigsawCompanyId = JigsawCompanyId;
     }
 
-    // DunsNumber
     private String DunsNumber;
 
     @JsonProperty("DunsNumber")
@@ -470,7 +461,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.DunsNumber = DunsNumber;
     }
 
-    // Tradestyle
     private String Tradestyle;
 
     @JsonProperty("Tradestyle")
@@ -483,7 +473,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.Tradestyle = Tradestyle;
     }
 
-    // NaicsCode
     private String NaicsCode;
 
     @JsonProperty("NaicsCode")
@@ -496,7 +485,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.NaicsCode = NaicsCode;
     }
 
-    // NaicsDesc
     private String NaicsDesc;
 
     @JsonProperty("NaicsDesc")
@@ -509,7 +497,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.NaicsDesc = NaicsDesc;
     }
 
-    // YearStarted
     private String YearStarted;
 
     @JsonProperty("YearStarted")
@@ -522,7 +509,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.YearStarted = YearStarted;
     }
 
-    // SicDesc
     private String SicDesc;
 
     @JsonProperty("SicDesc")
@@ -535,7 +521,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.SicDesc = SicDesc;
     }
 
-    // DandbCompanyId
     private String DandbCompanyId;
 
     @JsonProperty("DandbCompanyId")
@@ -548,46 +533,18 @@ public class Account extends AbstractDescribedSObjectBase {
         this.DandbCompanyId = DandbCompanyId;
     }
 
-    // NumberofLocations__c
-    private Double NumberofLocations__c;
-
-    @JsonProperty("NumberofLocations__c")
-    public Double getNumberofLocations__c() {
-        return this.NumberofLocations__c;
-    }
-
-    @JsonProperty("NumberofLocations__c")
-    public void setNumberofLocations__c(Double NumberofLocations__c) {
-        this.NumberofLocations__c = NumberofLocations__c;
-    }
-
-    // SLASerialNumber__c
-    private String SLASerialNumber__c;
+    private String OperatingHoursId;
 
-    @JsonProperty("SLASerialNumber__c")
-    public String getSLASerialNumber__c() {
-        return this.SLASerialNumber__c;
+    @JsonProperty("OperatingHoursId")
+    public String getOperatingHoursId() {
+        return this.OperatingHoursId;
     }
 
-    @JsonProperty("SLASerialNumber__c")
-    public void setSLASerialNumber__c(String SLASerialNumber__c) {
-        this.SLASerialNumber__c = SLASerialNumber__c;
+    @JsonProperty("OperatingHoursId")
+    public void setOperatingHoursId(String OperatingHoursId) {
+        this.OperatingHoursId = OperatingHoursId;
     }
 
-    // SLAExpirationDate__c
-    private java.time.ZonedDateTime SLAExpirationDate__c;
-
-    @JsonProperty("SLAExpirationDate__c")
-    public java.time.ZonedDateTime getSLAExpirationDate__c() {
-        return this.SLAExpirationDate__c;
-    }
-
-    @JsonProperty("SLAExpirationDate__c")
-    public void setSLAExpirationDate__c(java.time.ZonedDateTime SLAExpirationDate__c) {
-        this.SLAExpirationDate__c = SLAExpirationDate__c;
-    }
-
-    // Shipping_Location__Latitude__s
     private Double Shipping_Location__Latitude__s;
 
     @JsonProperty("Shipping_Location__Latitude__s")
@@ -600,7 +557,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.Shipping_Location__Latitude__s = Shipping_Location__Latitude__s;
     }
 
-    // Shipping_Location__Longitude__s
     private Double Shipping_Location__Longitude__s;
 
     @JsonProperty("Shipping_Location__Longitude__s")
@@ -613,7 +569,6 @@ public class Account extends AbstractDescribedSObjectBase {
         this.Shipping_Location__Longitude__s = Shipping_Location__Longitude__s;
     }
 
-    // Shipping_Location__c
     private org.apache.camel.component.salesforce.api.dto.GeoLocation Shipping_Location__c;
 
     @JsonProperty("Shipping_Location__c")
@@ -626,2828 +581,200 @@ public class Account extends AbstractDescribedSObjectBase {
         this.Shipping_Location__c = Shipping_Location__c;
     }
 
+    private String External_Id__c;
 
-    @Override
-    public final SObjectDescription description() {
-        return DESCRIPTION;
+    @JsonProperty("External_Id__c")
+    public String getExternal_Id__c() {
+        return this.External_Id__c;
     }
 
-    private static SObjectDescription createSObjectDescription() {
-        final SObjectDescription description = new SObjectDescription();
+    @JsonProperty("External_Id__c")
+    public void setExternal_Id__c(String External_Id__c) {
+        this.External_Id__c = External_Id__c;
+    }
 
 
-        description.setMergeable(true);
-        description.setCreateable(true);
-        description.setQueryable(true);
-        description.setLabel("Account");
-        description.setReplicateable(true);
+    private QueryRecordsAccount ChildAccounts;
+
+    @JsonProperty("ChildAccounts")
+    public QueryRecordsAccount getChildAccounts() {
+        return ChildAccounts;
+    }
 
-        final List<RecordTypeInfo> recordTypeInfos1 = new ArrayList<>();
-        description.setRecordTypeInfos(recordTypeInfos1);
+    @JsonProperty("ChildAccounts")
+    public void setChildAccounts(QueryRecordsAccount ChildAccounts) {
+        this.ChildAccounts = ChildAccounts;
+    }
+    private QueryRecordsContact Contacts;
 
-        final RecordTypeInfo recordTypeInfo1 = new RecordTypeInfo();
-        recordTypeInfos1.add(recordTypeInfo1);
+    @JsonProperty("Contacts")
+    public QueryRecordsContact getContacts() {
+        return Contacts;
+    }
 
-        recordTypeInfo1.setDefaultRecordTypeMapping(true);
-        recordTypeInfo1.setRecordTypeId("012000000000000AAA");
-        recordTypeInfo1.setAvailable(true);
+    @JsonProperty("Contacts")
+    public void setContacts(QueryRecordsContact Contacts) {
+        this.Contacts = Contacts;
+    }
 
-        final InfoUrls infoUrls1 = new InfoUrls();
-        infoUrls1.setLayout("/services/data/v34.0/sobjects/Account/describe/layouts/012000000000000AAA");
-        recordTypeInfo1.setUrls(infoUrls1);
-        recordTypeInfo1.setName("Master");
+    @Override
+    public final SObjectDescription description() {
+        return DESCRIPTION;
+    }
 
+    private static SObjectDescription createSObjectDescription() {
+        final SObjectDescription description = new SObjectDescription();
 
-        description.setName("Account");
-        description.setLayoutable(true);
-        description.setDeprecatedAndHidden(false);
-        description.setSearchable(true);
-        description.setFeedEnabled(true);
-        description.setRetrieveable(true);
-        description.setCustomSetting(false);
-        description.setKeyPrefix("001");
-        description.setUndeletable(true);
-        description.setSearchLayoutable("true");
-        description.setTriggerable(true);
-        description.setCustom(false);
 
-        final SObjectDescriptionUrls sObjectDescriptionUrls1 = new SObjectDescriptionUrls();
-        sObjectDescriptionUrls1.setDescribe("/services/data/v34.0/sobjects/Account/describe");
-        sObjectDescriptionUrls1.setLayouts("/services/data/v34.0/sobjects/Account/describe/layouts");
-        sObjectDescriptionUrls1.setSobject("/services/data/v34.0/sobjects/Account");
-        sObjectDescriptionUrls1.setQuickActions("/services/data/v34.0/sobjects/Account/quickActions");
-        sObjectDescriptionUrls1.setUiEditTemplate("https://eu11.salesforce.com/{ID}/e");
-        sObjectDescriptionUrls1.setRowTemplate("/services/data/v34.0/sobjects/Account/{ID}");
-        sObjectDescriptionUrls1.setListviews("/services/data/v34.0/sobjects/Account/listviews");
-        sObjectDescriptionUrls1.setCompactLayouts("/services/data/v34.0/sobjects/Account/describe/compactLayouts");
-        sObjectDescriptionUrls1.setApprovalLayouts("/services/data/v34.0/sobjects/Account/describe/approvalLayouts");
-        sObjectDescriptionUrls1.setUiNewRecord("https://eu11.salesforce.com/001/e");
-        sObjectDescriptionUrls1.setUiDetailTemplate("https://eu11.salesforce.com/{ID}");
-        description.setUrls(sObjectDescriptionUrls1);
-        description.setCompactLayoutable(true);
 
         final List<SObjectField> fields1 = new ArrayList<>();
         description.setFields(fields1);
 
-        final SObjectField sObjectField1 = new SObjectField();
+        final SObjectField sObjectField1 = createField("Id", "Account ID", "id", "tns:ID", 18, false, false, false, false, false, false, true);
         fields1.add(sObjectField1);
-
-        sObjectField1.setWriteRequiresMasterRead(false);
-        sObjectField1.setNillable(false);
-        sObjectField1.setCreateable(false);
-        sObjectField1.setEncrypted(false);
-        sObjectField1.setDigits("0");
-        sObjectField1.setDependentPicklist(false);
-        sObjectField1.setLabel("Account ID");
-        sObjectField1.setHighScaleNumber(false);
-        sObjectField1.setDisplayLocationInDecimal(false);
-        sObjectField1.setName("Id");
-        sObjectField1.setHtmlFormatted(false);
-        sObjectField1.setDeprecatedAndHidden(false);
-        sObjectField1.setRestrictedPicklist(false);
-        sObjectField1.setNameField(false);
-        sObjectField1.setCaseSensitive(false);
-        sObjectField1.setPermissionable(false);
-        sObjectField1.setCascadeDelete(false);
-        sObjectField1.setDefaultedOnCreate(true);
-        sObjectField1.setExternalId(false);
-        sObjectField1.setSoapType("tns:ID");
-        sObjectField1.setGroupable(true);
-        sObjectField1.setCustom(false);
-        sObjectField1.setScale(0);
-        sObjectField1.setCalculated(false);
-        sObjectField1.setRestrictedDelete(false);
-        sObjectField1.setNamePointing(false);
-        sObjectField1.setIdLookup(true);
-        sObjectField1.setType("id");
-        sObjectField1.setSortable(true);
-        sObjectField1.setLength(18);
-        sObjectField1.setPrecision(0);
-        sObjectField1.setByteLength(18);
-        sObjectField1.setQueryByDistance(false);
-        sObjectField1.setFilterable(true);
-        sObjectField1.setUpdateable(false);
-        sObjectField1.setUnique(false);
-        sObjectField1.setAutoNumber(false);
-
-        final SObjectField sObjectField2 = new SObjectField();
+        final SObjectField sObjectField2 = createField("IsDeleted", "Deleted", "boolean", "xsd:boolean", 0, false, false, false, false, false, false, false);
         fields1.add(sObjectField2);
-
-        sObjectField2.setWriteRequiresMasterRead(false);
-        sObjectField2.setNillable(false);
-        sObjectField2.setCreateable(false);
-        sObjectField2.setEncrypted(false);
-        sObjectField2.setDigits("0");
-        sObjectField2.setDependentPicklist(false);
-        sObjectField2.setLabel("Deleted");
-        sObjectField2.setHighScaleNumber(false);
-        sObjectField2.setDisplayLocationInDecimal(false);
-        sObjectField2.setName("IsDeleted");
-        sObjectField2.setHtmlFormatted(false);
-        sObjectField2.setDeprecatedAndHidden(false);
-        sObjectField2.setRestrictedPicklist(false);
-        sObjectField2.setNameField(false);
-        sObjectField2.setCaseSensitive(false);
-        sObjectField2.setPermissionable(false);
-        sObjectField2.setCascadeDelete(false);
-        sObjectField2.setDefaultedOnCreate(true);
-        sObjectField2.setExternalId(false);
-        sObjectField2.setSoapType("xsd:boolean");
-        sObjectField2.setGroupable(true);
-        sObjectField2.setCustom(false);
-        sObjectField2.setScale(0);
-        sObjectField2.setCalculated(false);
-        sObjectField2.setRestrictedDelete(false);
-        sObjectField2.setNamePointing(false);
-        sObjectField2.setIdLookup(false);
-        sObjectField2.setType("boolean");
-        sObjectField2.setSortable(true);
-        sObjectField2.setLength(0);
-        sObjectField2.setPrecision(0);
-        sObjectField2.setByteLength(0);
-        sObjectField2.setQueryByDistance(false);
-        sObjectField2.setFilterable(true);
-        sObjectField2.setUpdateable(false);
-        sObjectField2.setUnique(false);
-        sObjectField2.setAutoNumber(false);
-
-        final SObjectField sObjectField3 = new SObjectField();
+        final SObjectField sObjectField3 = createField("MasterRecordId", "Master Record ID", "reference", "tns:ID", 18, false, true, false, false, false, false, false);
         fields1.add(sObjectField3);
-
-        sObjectField3.setWriteRequiresMasterRead(false);
-        sObjectField3.setNillable(true);
-        sObjectField3.setCreateable(false);
-        sObjectField3.setEncrypted(false);
-        sObjectField3.setDigits("0");
-        sObjectField3.setDependentPicklist(false);
-        sObjectField3.setLabel("Master Record ID");
-        sObjectField3.setHighScaleNumber(false);
-        sObjectField3.setDisplayLocationInDecimal(false);
-        sObjectField3.setName("MasterRecordId");
-        sObjectField3.setHtmlFormatted(false);
-        sObjectField3.setDeprecatedAndHidden(false);
-        sObjectField3.setRestrictedPicklist(false);
-        sObjectField3.setNameField(false);
-        sObjectField3.setCaseSensitive(false);
-        sObjectField3.setPermissionable(false);
-        sObjectField3.setCascadeDelete(false);
-        sObjectField3.setDefaultedOnCreate(false);
-        sObjectField3.setExternalId(false);
-        sObjectField3.setSoapType("tns:ID");
-        sObjectField3.setGroupable(true);
-        sObjectField3.setCustom(false);
-        sObjectField3.setScale(0);
-        sObjectField3.setCalculated(false);
-        sObjectField3.setRestrictedDelete(false);
-        sObjectField3.setNamePointing(false);
-        sObjectField3.setIdLookup(false);
-        sObjectField3.setType("reference");
-
-        final List<String> referenceTo1 = new ArrayList<>();
-        sObjectField3.setReferenceTo(referenceTo1);
-
-        referenceTo1.add("Account");
-
-        sObjectField3.setRelationshipName("MasterRecord");
-        sObjectField3.setSortable(true);
-        sObjectField3.setLength(18);
-        sObjectField3.setPrecision(0);
-        sObjectField3.setByteLength(18);
-        sObjectField3.setQueryByDistance(false);
-        sObjectField3.setFilterable(true);
-        sObjectField3.setUpdateable(false);
-        sObjectField3.setUnique(false);
-        sObjectField3.setAutoNumber(false);
-
-        final SObjectField sObjectField4 = new SObjectField();
+        final SObjectField sObjectField4 = createField("Name", "Account Name", "string", "xsd:string", 255, false, false, true, false, false, false, false);
         fields1.add(sObjectField4);
-
-        sObjectField4.setWriteRequiresMasterRead(false);
-        sObjectField4.setNillable(false);
-        sObjectField4.setCreateable(true);
-        sObjectField4.setEncrypted(false);
-        sObjectField4.setDigits("0");
-        sObjectField4.setExtraTypeInfo("switchablepersonname");
-        sObjectField4.setDependentPicklist(false);
-        sObjectField4.setLabel("Account Name");
-        sObjectField4.setHighScaleNumber(false);
-        sObjectField4.setDisplayLocationInDecimal(false);
-        sObjectField4.setName("Name");
-        sObjectField4.setHtmlFormatted(false);
-        sObjectField4.setDeprecatedAndHidden(false);
-        sObjectField4.setRestrictedPicklist(false);
-        sObjectField4.setNameField(true);
-        sObjectField4.setCaseSensitive(false);
-        sObjectField4.setPermissionable(false);
-        sObjectField4.setCascadeDelete(false);
-        sObjectField4.setDefaultedOnCreate(false);
-        sObjectField4.setExternalId(false);
-        sObjectField4.setSoapType("xsd:string");
-        sObjectField4.setGroupable(true);
-        sObjectField4.setCustom(false);
-        sObjectField4.setScale(0);
-        sObjectField4.setCalculated(false);
-        sObjectField4.setRestrictedDelete(false);
-        sObjectField4.setNamePointing(false);
-        sObjectField4.setIdLookup(false);
-        sObjectField4.setType("string");
-        sObjectField4.setSortable(true);
-        sObjectField4.setLength(255);
-        sObjectField4.setPrecision(0);
-        sObjectField4.setByteLength(765);
-        sObjectField4.setQueryByDistance(false);
-        sObjectField4.setFilterable(true);
-        sObjectField4.setUpdateable(true);
-        sObjectField4.setUnique(false);
-        sObjectField4.setAutoNumber(false);
-
-        final SObjectField sObjectField5 = new SObjectField();
+        final SObjectField sObjectField5 = createField("Type", "Account Type", "picklist", "xsd:string", 40, false, true, false, false, false, false, false);
         fields1.add(sObjectField5);
-
-        sObjectField5.setWriteRequiresMasterRead(false);
-        sObjectField5.setNillable(true);
-        sObjectField5.setCreateable(true);
-        sObjectField5.setEncrypted(false);
-        sObjectField5.setDigits("0");
-        sObjectField5.setDependentPicklist(false);
-        sObjectField5.setLabel("Account Type");
-        sObjectField5.setHighScaleNumber(false);
-        sObjectField5.setDisplayLocationInDecimal(false);
-        sObjectField5.setName("Type");
-        sObjectField5.setHtmlFormatted(false);
-        sObjectField5.setDeprecatedAndHidden(false);
-        sObjectField5.setRestrictedPicklist(false);
-        sObjectField5.setNameField(false);
-        sObjectField5.setCaseSensitive(false);
-        sObjectField5.setPermissionable(true);
-        sObjectField5.setCascadeDelete(false);
-        sObjectField5.setDefaultedOnCreate(false);
-        sObjectField5.setExternalId(false);
-        sObjectField5.setSoapType("xsd:string");
-        sObjectField5.setGroupable(true);
-        sObjectField5.setCustom(false);
-        sObjectField5.setScale(0);
-        sObjectField5.setCalculated(false);
-        sObjectField5.setRestrictedDelete(false);
-        sObjectField5.setNamePointing(false);
-        sObjectField5.setIdLookup(false);
-        sObjectField5.setType("picklist");
-        sObjectField5.setSortable(true);
-        sObjectField5.setLength(40);
-        sObjectField5.setPrecision(0);
-        sObjectField5.setByteLength(120);
-        sObjectField5.setQueryByDistance(false);
-        sObjectField5.setFilterable(true);
-        sObjectField5.setUpdateable(true);
-        sObjectField5.setUnique(false);
-        sObjectField5.setAutoNumber(false);
-
-        final SObjectField sObjectField6 = new SObjectField();
+        final SObjectField sObjectField6 = createField("ParentId", "Parent Account ID", "reference", "tns:ID", 18, false, true, false, false, false, false, false);
         fields1.add(sObjectField6);
-
-        sObjectField6.setWriteRequiresMasterRead(false);
-        sObjectField6.setNillable(true);
-        sObjectField6.setCreateable(true);
-        sObjectField6.setEncrypted(false);
-        sObjectField6.setDigits("0");
-        sObjectField6.setDependentPicklist(false);
-        sObjectField6.setLabel("Parent Account ID");
-        sObjectField6.setHighScaleNumber(false);
-        sObjectField6.setDisplayLocationInDecimal(false);
-        sObjectField6.setName("ParentId");
-        sObjectField6.setHtmlFormatted(false);
-        sObjectField6.setDeprecatedAndHidden(false);
-        sObjectField6.setRestrictedPicklist(false);
-        sObjectField6.setNameField(false);
-        sObjectField6.setCaseSensitive(false);
-        sObjectField6.setPermissionable(true);
-        sObjectField6.setCascadeDelete(false);
-        sObjectField6.setDefaultedOnCreate(false);
-        sObjectField6.setExternalId(false);
-        sObjectField6.setSoapType("tns:ID");
-        sObjectField6.setGroupable(true);
-        sObjectField6.setCustom(false);
-        sObjectField6.setScale(0);
-        sObjectField6.setCalculated(false);
-        sObjectField6.setRestrictedDelete(false);
-        sObjectField6.setNamePointing(false);
-        sObjectField6.setIdLookup(false);
-        sObjectField6.setType("reference");
-
-        final List<String> referenceTo2 = new ArrayList<>();
-        sObjectField6.setReferenceTo(referenceTo2);
-
-        referenceTo2.add("Account");
-
-        sObjectField6.setRelationshipName("Parent");
-        sObjectField6.setSortable(true);
-        sObjectField6.setLength(18);
-        sObjectField6.setPrecision(0);
-        sObjectField6.setByteLength(18);
-        sObjectField6.setQueryByDistance(false);
-        sObjectField6.setFilterable(true);
-        sObjectField6.setUpdateable(true);
-        sObjectField6.setUnique(false);
-        sObjectField6.setAutoNumber(false);
-
-        final SObjectField sObjectField7 = new SObjectField();
+        final SObjectField sObjectField7 = createField("BillingStreet", "Billing Street", "textarea", "xsd:string", 255, false, true, false, false, false, false, false);
         fields1.add(sObjectField7);
-
-        sObjectField7.setWriteRequiresMasterRead(false);
-        sObjectField7.setNillable(true);
-        sObjectField7.setCreateable(true);
-        sObjectField7.setEncrypted(false);
-        sObjectField7.setDigits("0");
-        sObjectField7.setExtraTypeInfo("plaintextarea");
-        sObjectField7.setDependentPicklist(false);
-        sObjectField7.setLabel("Billing Street");
-        sObjectField7.setHighScaleNumber(false);
-        sObjectField7.setDisplayLocationInDecimal(false);
-        sObjectField7.setName("BillingStreet");
-        sObjectField7.setHtmlFormatted(false);
-        sObjectField7.setDeprecatedAndHidden(false);
-        sObjectField7.setRestrictedPicklist(false);
-        sObjectField7.setNameField(false);
-        sObjectField7.setCaseSensitive(false);
-        sObjectField7.setPermissionable(true);
-        sObjectField7.setCascadeDelete(false);
-        sObjectField7.setDefaultedOnCreate(false);
-        sObjectField7.setExternalId(false);
-        sObjectField7.setSoapType("xsd:string");
-        sObjectField7.setGroupable(true);
-        sObjectField7.setCustom(false);
-        sObjectField7.setScale(0);
-        sObjectField7.setCalculated(false);
-        sObjectField7.setRestrictedDelete(false);
-        sObjectField7.setNamePointing(false);
-        sObjectField7.setIdLookup(false);
-        sObjectField7.setType("textarea");
-        sObjectField7.setSortable(true);
-        sObjectField7.setLength(255);
-        sObjectField7.setPrecision(0);
-        sObjectField7.setByteLength(765);
-        sObjectField7.setQueryByDistance(false);
-        sObjectField7.setFilterable(true);
-        sObjectField7.setUpdateable(true);
-        sObjectField7.setUnique(false);
-        sObjectField7.setAutoNumber(false);
-
-        final SObjectField sObjectField8 = new SObjectField();
+        final SObjectField sObjectField8 = createField("BillingCity", "Billing City", "string", "xsd:string", 40, false, true, false, false, false, false, false);
         fields1.add(sObjectField8);
-
-        sObjectField8.setWriteRequiresMasterRead(false);
-        sObjectField8.setNillable(true);
-        sObjectField8.setCreateable(true);
-        sObjectField8.setEncrypted(false);
-        sObjectField8.setDigits("0");
-        sObjectField8.setDependentPicklist(false);
-        sObjectField8.setLabel("Billing City");
-        sObjectField8.setHighScaleNumber(false);
-        sObjectField8.setDisplayLocationInDecimal(false);
-        sObjectField8.setName("BillingCity");
-        sObjectField8.setHtmlFormatted(false);
-        sObjectField8.setDeprecatedAndHidden(false);
-        sObjectField8.setRestrictedPicklist(false);
-        sObjectField8.setNameField(false);
-        sObjectField8.setCaseSensitive(false);
-        sObjectField8.setPermissionable(true);
-        sObjectField8.setCascadeDelete(false);
-        sObjectField8.setDefaultedOnCreate(false);
-        sObjectField8.setExternalId(false);
-        sObjectField8.setSoapType("xsd:string");
-        sObjectField8.setGroupable(true);
-        sObjectField8.setCustom(false);
-        sObjectField8.setScale(0);
-        sObjectField8.setCalculated(false);
-        sObjectField8.setRestrictedDelete(false);
-        sObjectField8.setNamePointing(false);
-        sObjectField8.setIdLookup(false);
-        sObjectField8.setType("string");
-        sObjectField8.setSortable(true);
-        sObjectField8.setLength(40);
-        sObjectField8.setPrecision(0);
-        sObjectField8.setByteLength(120);
-        sObjectField8.setQueryByDistance(false);
-        sObjectField8.setFilterable(true);
-        sObjectField8.setUpdateable(true);
-        sObjectField8.setUnique(false);
-        sObjectField8.setAutoNumber(false);
-
-        final SObjectField sObjectField9 = new SObjectField();
+        final SObjectField sObjectField9 = createField("BillingState", "Billing State/Province", "string", "xsd:string", 80, false, true, false, false, false, false, false);
         fields1.add(sObjectField9);
-
-        sObjectField9.setWriteRequiresMasterRead(false);
-        sObjectField9.setNillable(true);
-        sObjectField9.setCreateable(true);
-        sObjectField9.setEncrypted(false);
-        sObjectField9.setDigits("0");
-        sObjectField9.setDependentPicklist(false);
-        sObjectField9.setLabel("Billing State/Province");
-        sObjectField9.setHighScaleNumber(false);
-        sObjectField9.setDisplayLocationInDecimal(false);
-        sObjectField9.setName("BillingState");
-        sObjectField9.setHtmlFormatted(false);
-        sObjectField9.setDeprecatedAndHidden(false);
-        sObjectField9.setRestrictedPicklist(false);
-        sObjectField9.setNameField(false);
-        sObjectField9.setCaseSensitive(false);
-        sObjectField9.setPermissionable(true);
-        sObjectField9.setCascadeDelete(false);
-        sObjectField9.setDefaultedOnCreate(false);
-        sObjectField9.setExternalId(false);
-        sObjectField9.setSoapType("xsd:string");
-        sObjectField9.setGroupable(true);
-        sObjectField9.setCustom(false);
-        sObjectField9.setScale(0);
-        sObjectField9.setCalculated(false);
-        sObjectField9.setRestrictedDelete(false);
-        sObjectField9.setNamePointing(false);
-        sObjectField9.setIdLookup(false);
-        sObjectField9.setType("string");
-        sObjectField9.setSortable(true);
-        sObjectField9.setLength(80);
-        sObjectField9.setPrecision(0);
-        sObjectField9.setByteLength(240);
-        sObjectField9.setQueryByDistance(false);
-        sObjectField9.setFilterable(true);
-        sObjectField9.setUpdateable(true);
-        sObjectField9.setUnique(false);
-        sObjectField9.setAutoNumber(false);
-
-        final SObjectField sObjectField10 = new SObjectField();
+        final SObjectField sObjectField10 = createField("BillingPostalCode", "Billing Zip/Postal Code", "string", "xsd:string", 20, false, true, false, false, false, false, false);
         fields1.add(sObjectField10);
-
-        sObjectField10.setWriteRequiresMasterRead(false);
-        sObjectField10.setNillable(true);
-        sObjectField10.setCreateable(true);
-        sObjectField10.setEncrypted(false);
-        sObjectField10.setDigits("0");
-        sObjectField10.setDependentPicklist(false);
-        sObjectField10.setLabel("Billing Zip/Postal Code");
-        sObjectField10.setHighScaleNumber(false);
-        sObjectField10.setDisplayLocationInDecimal(false);
-        sObjectField10.setName("BillingPostalCode");
-        sObjectField10.setHtmlFormatted(false);
-        sObjectField10.setDeprecatedAndHidden(false);
-        sObjectField10.setRestrictedPicklist(false);
-        sObjectField10.setNameField(false);
-        sObjectField10.setCaseSensitive(false);
-        sObjectField10.setPermissionable(true);
-        sObjectField10.setCascadeDelete(false);
-        sObjectField10.setDefaultedOnCreate(false);
-        sObjectField10.setExternalId(false);
-        sObjectField10.setSoapType("xsd:string");
-        sObjectField10.setGroupable(true);
-        sObjectField10.setCustom(false);
-        sObjectField10.setScale(0);
-        sObjectField10.setCalculated(false);
-        sObjectField10.setRestrictedDelete(false);
-        sObjectField10.setNamePointing(false);
-        sObjectField10.setIdLookup(false);
-        sObjectField10.setType("string");
-        sObjectField10.setSortable(true);
-        sObjectField10.setLength(20);
-        sObjectField10.setPrecision(0);
-        sObjectField10.setByteLength(60);
-        sObjectField10.setQueryByDistance(false);
-        sObjectField10.setFilterable(true);
-        sObjectField10.setUpdateable(true);
-        sObjectField10.setUnique(false);
-        sObjectField10.setAutoNumber(false);
-
-        final SObjectField sObjectField11 = new SObjectField();
+        final SObjectField sObjectField11 = createField("BillingCountry", "Billing Country", "string", "xsd:string", 80, false, true, false, false, false, false, false);
         fields1.add(sObjectField11);
-
-        sObjectField11.setWriteRequiresMasterRead(false);
-        sObjectField11.setNillable(true);
-        sObjectField11.setCreateable(true);
-        sObjectField11.setEncrypted(false);
-        sObjectField11.setDigits("0");
-        sObjectField11.setDependentPicklist(false);
-        sObjectField11.setLabel("Billing Country");
-        sObjectField11.setHighScaleNumber(false);
-        sObjectField11.setDisplayLocationInDecimal(false);
-        sObjectField11.setName("BillingCountry");
-        sObjectField11.setHtmlFormatted(false);
-        sObjectField11.setDeprecatedAndHidden(false);
-        sObjectField11.setRestrictedPicklist(false);
-        sObjectField11.setNameField(false);
-        sObjectField11.setCaseSensitive(false);
-        sObjectField11.setPermissionable(true);
-        sObjectField11.setCascadeDelete(false);
-        sObjectField11.setDefaultedOnCreate(false);
-        sObjectField11.setExternalId(false);
-        sObjectField11.setSoapType("xsd:string");
-        sObjectField11.setGroupable(true);
-        sObjectField11.setCustom(false);
-        sObjectField11.setScale(0);
-        sObjectField11.setCalculated(false);
-        sObjectField11.setRestrictedDelete(false);
-        sObjectField11.setNamePointing(false);
-        sObjectField11.setIdLookup(false);
-        sObjectField11.setType("string");
-        sObjectField11.setSortable(true);
-        sObjectField11.setLength(80);
-        sObjectField11.setPrecision(0);
-        sObjectField11.setByteLength(240);
-        sObjectField11.setQueryByDistance(false);
-        sObjectField11.setFilterable(true);
-        sObjectField11.setUpdateable(true);
-        sObjectField11.setUnique(false);
-        sObjectField11.setAutoNumber(false);
-
-        final SObjectField sObjectField12 = new SObjectField();
+        final SObjectField sObjectField12 = createField("BillingLatitude", "Billing Latitude", "double", "xsd:double", 0, false, true, false, false, false, false, false);
         fields1.add(sObjectField12);
-
-        sObjectField12.setWriteRequiresMasterRead(false);
-        sObjectField12.setNillable(true);
-        sObjectField12.setCreateable(true);
-        sObjectField12.setEncrypted(false);
-        sObjectField12.setDigits("0");
-        sObjectField12.setDependentPicklist(false);
-        sObjectField12.setLabel("Billing Latitude");
-        sObjectField12.setHighScaleNumber(false);
-        sObjectField12.setDisplayLocationInDecimal(false);
-        sObjectField12.setName("BillingLatitude");
-        sObjectField12.setHtmlFormatted(false);
-        sObjectField12.setDeprecatedAndHidden(false);
-        sObjectField12.setRestrictedPicklist(false);
-        sObjectField12.setNameField(false);
-        sObjectField12.setCaseSensitive(false);
-        sObjectField12.setPermissionable(true);
-        sObjectField12.setCascadeDelete(false);
-        sObjectField12.setDefaultedOnCreate(false);
-        sObjectField12.setExternalId(false);
-        sObjectField12.setSoapType("xsd:double");
-        sObjectField12.setGroupable(false);
-        sObjectField12.setCustom(false);
-        sObjectField12.setScale(15);
-        sObjectField12.setCalculated(false);
-        sObjectField12.setRestrictedDelete(false);
-        sObjectField12.setNamePointing(false);
-        sObjectField12.setIdLookup(false);
-        sObjectField12.setType("double");
-        sObjectField12.setSortable(true);
-        sObjectField12.setLength(0);
-        sObjectField12.setPrecision(18);
-        sObjectField12.setByteLength(0);
-        sObjectField12.setQueryByDistance(false);
-        sObjectField12.setFilterable(true);
-        sObjectField12.setUpdateable(true);
-        sObjectField12.setUnique(false);
-        sObjectField12.setAutoNumber(false);
-
-        final SObjectField sObjectField13 = new SObjectField();
+        final SObjectField sObjectField13 = createField("BillingLongitude", "Billing Longitude", "double", "xsd:double", 0, false, true, false, false, false, false, false);
         fields1.add(sObjectField13);
-
-        sObjectField13.setWriteRequiresMasterRead(false);
-        sObjectField13.setNillable(true);
-        sObjectField13.setCreateable(true);
-        sObjectField13.setEncrypted(false);
-        sObjectField13.setDigits("0");
-        sObjectField13.setDependentPicklist(false);
-        sObjectField13.setLabel("Billing Longitude");
-        sObjectField13.setHighScaleNumber(false);
-        sObjectField13.setDisplayLocationInDecimal(false);
-        sObjectField13.setName("BillingLongitude");
-        sObjectField13.setHtmlFormatted(false);
-        sObjectField13.setDeprecatedAndHidden(false);
-        sObjectField13.setRestrictedPicklist(false);
-        sObjectField13.setNameField(false);
-        sObjectField13.setCaseSensitive(false);
-        sObjectField13.setPermissionable(true);
-        sObjectField13.setCascadeDelete(false);
-        sObjectField13.setDefaultedOnCreate(false);
-        sObjectField13.setExternalId(false);
-        sObjectField13.setSoapType("xsd:double");
-        sObjectField13.setGroupable(false);
-        sObjectField13.setCustom(false);
-        sObjectField13.setScale(15);
-        sObjectField13.setCalculated(false);
-        sObjectField13.setRestrictedDelete(false);
-        sObjectField13.setNamePointing(false);
-        sObjectField13.setIdLookup(false);
-        sObjectField13.setType("double");
-        sObjectField13.setSortable(true);
-        sObjectField13.setLength(0);
-        sObjectField13.setPrecision(18);
-        sObjectField13.setByteLength(0);
-        sObjectField13.setQueryByDistance(false);
-        sObjectField13.setFilterable(true);
-        sObjectField13.setUpdateable(true);
-        sObjectField13.setUnique(false);
-        sObjectField13.setAutoNumber(false);
-
-        final SObjectField sObjectField14 = new SObjectField();
+        final SObjectField sObjectField14 = createField("BillingGeocodeAccuracy", "Billing Geocode Accuracy", "picklist", "xsd:string", 40, false, true, false, false, false, false, false);
         fields1.add(sObjectField14);
-
-        sObjectField14.setWriteRequiresMasterRead(false);
-        sObjectField14.setNillable(true);
-        sObjectField14.setCreateable(false);
-        sObjectField14.setEncrypted(false);
-        sObjectField14.setDigits("0");
-        sObjectField14.setDependentPicklist(false);
-        sObjectField14.setLabel("Billing Address");
-        sObjectField14.setHighScaleNumber(false);
-        sObjectField14.setDisplayLocationInDecimal(false);
-        sObjectField14.setName("BillingAddress");
-        sObjectField14.setHtmlFormatted(false);
-        sObjectField14.setDeprecatedAndHidden(false);
-        sObjectField14.setRestrictedPicklist(false);
-        sObjectField14.setNameField(false);
-        sObjectField14.setCaseSensitive(false);
-        sObjectField14.setPermissionable(true);
-        sObjectField14.setCascadeDelete(false);
-        sObjectField14.setDefaultedOnCreate(false);
-        sObjectField14.setExternalId(false);
-        sObjectField14.setSoapType("urn:address");
-        sObjectField14.setGroupable(false);
-        sObjectField14.setCustom(false);
-        sObjectField14.setScale(0);
-        sObjectField14.setCalculated(false);
-        sObjectField14.setRestrictedDelete(false);
-        sObjectField14.setNamePointing(false);
-        sObjectField14.setIdLookup(false);
-        sObjectField14.setType("address");
-        sObjectField14.setSortable(false);
-        sObjectField14.setLength(0);
-        sObjectField14.setPrecision(0);
-        sObjectField14.setByteLength(0);
-        sObjectField14.setQueryByDistance(true);
-        sObjectField14.setFilterable(true);
-        sObjectField14.setUpdateable(false);
-        sObjectField14.setUnique(false);
-        sObjectField14.setAutoNumber(false);
-
-        final SObjectField sObjectField15 = new SObjectField();
+        final SObjectField sObjectField15 = createField("BillingAddress", "Billing Address", "address", "urn:address", 0, false, true, false, false, false, false, false);
         fields1.add(sObjectField15);
-
-        sObjectField15.setWriteRequiresMasterRead(false);
-        sObjectField15.setNillable(true);
-        sObjectField15.setCreateable(true);
-        sObjectField15.setEncrypted(false);
-        sObjectField15.setDigits("0");
-        sObjectField15.setExtraTypeInfo("plaintextarea");
-        sObjectField15.setDependentPicklist(false);
-        sObjectField15.setLabel("Shipping Street");
-        sObjectField15.setHighScaleNumber(false);
-        sObjectField15.setDisplayLocationInDecimal(false);
-        sObjectField15.setName("ShippingStreet");
-        sObjectField15.setHtmlFormatted(false);
-        sObjectField15.setDeprecatedAndHidden(false);
-        sObjectField15.setRestrictedPicklist(false);
-        sObjectField15.setNameField(false);
-        sObjectField15.setCaseSensitive(false);
-        sObjectField15.setPermissionable(true);
-        sObjectField15.setCascadeDelete(false);
-        sObjectField15.setDefaultedOnCreate(false);
-        sObjectField15.setExternalId(false);
-        sObjectField15.setSoapType("xsd:string");
-        sObjectField15.setGroupable(true);
-        sObjectField15.setCustom(false);
-        sObjectField15.setScale(0);
-        sObjectField15.setCalculated(false);
-        sObjectField15.setRestrictedDelete(false);
-        sObjectField15.setNamePointing(false);
-        sObjectField15.setIdLookup(false);
-        sObjectField15.setType("textarea");
-        sObjectField15.setSortable(true);
-        sObjectField15.setLength(255);
-        sObjectField15.setPrecision(0);
-        sObjectField15.setByteLength(765);
-        sObjectField15.setQueryByDistance(false);
-        sObjectField15.setFilterable(true);
-        sObjectField15.setUpdateable(true);
-        sObjectField15.setUnique(false);
-        sObjectField15.setAutoNumber(false);
-
-        final SObjectField sObjectField16 = new SObjectField();
+        final SObjectField sObjectField16 = createField("ShippingStreet", "Shipping Street", "textarea", "xsd:string", 255, false, true, false, false, false, false, false);
         fields1.add(sObjectField16);
-
-        sObjectField16.setWriteRequiresMasterRead(false);
-        sObjectField16.setNillable(true);
-        sObjectField16.setCreateable(true);
-        sObjectField16.setEncrypted(false);
-        sObjectField16.setDigits("0");
-        sObjectField16.setDependentPicklist(false);
-        sObjectField16.setLabel("Shipping City");
-        sObjectField16.setHighScaleNumber(false);
-        sObjectField16.setDisplayLocationInDecimal(false);
-        sObjectField16.setName("ShippingCity");
-        sObjectField16.setHtmlFormatted(false);
-        sObjectField16.setDeprecatedAndHidden(false);
-        sObjectField16.setRestrictedPicklist(false);
-        sObjectField16.setNameField(false);
-        sObjectField16.setCaseSensitive(false);
-        sObjectField16.setPermissionable(true);
-        sObjectField16.setCascadeDelete(false);
-        sObjectField16.setDefaultedOnCreate(false);
-        sObjectField16.setExternalId(false);
-        sObjectField16.setSoapType("xsd:string");
-        sObjectField16.setGroupable(true);
-        sObjectField16.setCustom(false);
-        sObjectField16.setScale(0);
-        sObjectField16.setCalculated(false);
-        sObjectField16.setRestrictedDelete(false);
-        sObjectField16.setNamePointing(false);
-        sObjectField16.setIdLookup(false);
-        sObjectField16.setType("string");
-        sObjectField16.setSortable(true);
-        sObjectField16.setLength(40);
-        sObjectField16.setPrecision(0);
-        sObjectField16.setByteLength(120);
-        sObjectField16.setQueryByDistance(false);
-        sObjectField16.setFilterable(true);
-        sObjectField16.setUpdateable(true);
-        sObjectField16.setUnique(false);
-        sObjectField16.setAutoNumber(false);
-
-        final SObjectField sObjectField17 = new SObjectField();
+        final SObjectField sObjectField17 = createField("ShippingCity", "Shipping City", "string", "xsd:string", 40, false, true, false, false, false, false, false);
         fields1.add(sObjectField17);
-
-        sObjectField17.setWriteRequiresMasterRead(false);
-        sObjectField17.setNillable(true);
-        sObjectField17.setCreateable(true);
-        sObjectField17.setEncrypted(false);
-        sObjectField17.setDigits("0");
-        sObjectField17.setDependentPicklist(false);
-        sObjectField17.setLabel("Shipping State/Province");
-        sObjectField17.setHighScaleNumber(false);
-        sObjectField17.setDisplayLocationInDecimal(false);
-        sObjectField17.setName("ShippingState");
-        sObjectField17.setHtmlFormatted(false);
-        sObjectField17.setDeprecatedAndHidden(false);
-        sObjectField17.setRestrictedPicklist(false);
-        sObjectField17.setNameField(false);
-        sObjectField17.setCaseSensitive(false);
-        sObjectField17.setPermissionable(true);
-        sObjectField17.setCascadeDelete(false);
-        sObjectField17.setDefaultedOnCreate(false);
-        sObjectField17.setExternalId(false);
-        sObjectField17.setSoapType("xsd:string");
-        sObjectField17.setGroupable(true);
-        sObjectField17.setCustom(false);
-        sObjectField17.setScale(0);
-        sObjectField17.setCalculated(false);
-        sObjectField17.setRestrictedDelete(false);
-        sObjectField17.setNamePointing(false);
-        sObjectField17.setIdLookup(false);
-        sObjectField17.setType("string");
-        sObjectField17.setSortable(true);
-        sObjectField17.setLength(80);
-        sObjectField17.setPrecision(0);
-        sObjectField17.setByteLength(240);
-        sObjectField17.setQueryByDistance(false);
-        sObjectField17.setFilterable(true);
-        sObjectField17.setUpdateable(true);
-        sObjectField17.setUnique(false);
-        sObjectField17.setAutoNumber(false);
-
-        final SObjectField sObjectField18 = new SObjectField();
+        final SObjectField sObjectField18 = createField("ShippingState", "Shipping State/Province", "string", "xsd:string", 80, false, true, false, false, false, false, false);
         fields1.add(sObjectField18);
-
-        sObjectField18.setWriteRequiresMasterRead(false);
-        sObjectField18.setNillable(true);
-        sObjectField18.setCreateable(true);
-        sObjectField18.setEncrypted(false);
-        sObjectField18.setDigits("0");
-        sObjectField18.setDependentPicklist(false);
-        sObjectField18.setLabel("Shipping Zip/Postal Code");
-        sObjectField18.setHighScaleNumber(false);
-        sObjectField18.setDisplayLocationInDecimal(false);
-        sObjectField18.setName("ShippingPostalCode");
-        sObjectField18.setHtmlFormatted(false);
-        sObjectField18.setDeprecatedAndHidden(false);
-        sObjectField18.setRestrictedPicklist(false);
-        sObjectField18.setNameField(false);
-        sObjectField18.setCaseSensitive(false);
-        sObjectField18.setPermissionable(true);
-        sObjectField18.setCascadeDelete(false);
-        sObjectField18.setDefaultedOnCreate(false);
-        sObjectField18.setExternalId(false);
-        sObjectField18.setSoapType("xsd:string");
-        sObjectField18.setGroupable(true);
-        sObjectField18.setCustom(false);
-        sObjectField18.setScale(0);
-        sObjectField18.setCalculated(false);
-        sObjectField18.setRestrictedDelete(false);
-        sObjectField18.setNamePointing(false);
-        sObjectField18.setIdLookup(false);
-        sObjectField18.setType("string");
-        sObjectField18.setSortable(true);
-        sObjectField18.setLength(20);
-        sObjectField18.setPrecision(0);
-        sObjectField18.setByteLength(60);
-        sObjectField18.setQueryByDistance(false);
-        sObjectField18.setFilterable(true);
-        sObjectField18.setUpdateable(true);
-        sObjectField18.setUnique(false);
-        sObjectField18.setAutoNumber(false);
-
-        final SObjectField sObjectField19 = new SObjectField();
+        final SObjectField sObjectField19 = createField("ShippingPostalCode", "Shipping Zip/Postal Code", "string", "xsd:string", 20, false, true, false, false, false, false, false);
         fields1.add(sObjectField19);
-
-        sObjectField19.setWriteRequiresMasterRead(false);
-        sObjectField19.setNillable(true);
-        sObjectField19.setCreateable(true);
-        sObjectField19.setEncrypted(false);
-        sObjectField19.setDigits("0");
-        sObjectField19.setDependentPicklist(false);
-        sObjectField19.setLabel("Shipping Country");
-        sObjectField19.setHighScaleNumber(false);
-        sObjectField19.setDisplayLocationInDecimal(false);
-        sObjectField19.setName("ShippingCountry");
-        sObjectField19.setHtmlFormatted(false);
-        sObjectField19.setDeprecatedAndHidden(false);
-        sObjectField19.setRestrictedPicklist(false);
-        sObjectField19.setNameField(false);
-        sObjectField19.setCaseSensitive(false);
-        sObjectField19.setPermissionable(true);
-        sObjectField19.setCascadeDelete(false);
-        sObjectField19.setDefaultedOnCreate(false);
-        sObjectField19.setExternalId(false);
-        sObjectField19.setSoapType("xsd:string");
-        sObjectField19.setGroupable(true);
-        sObjectField19.setCustom(false);
-        sObjectField19.setScale(0);
-        sObjectField19.setCalculated(false);
-        sObjectField19.setRestrictedDelete(false);
-        sObjectField19.setNamePointing(false);
-        sObjectField19.setIdLookup(false);
-        sObjectField19.setType("string");
-        sObjectField19.setSortable(true);
-        sObjectField19.setLength(80);
-        sObjectField19.setPrecision(0);
-        sObjectField19.setByteLength(240);
-        sObjectField19.setQueryByDistance(false);
-        sObjectField19.setFilterable(true);
-        sObjectField19.setUpdateable(true);
-        sObjectField19.setUnique(false);
-        sObjectField19.setAutoNumber(false);
-
-        final SObjectField sObjectField20 = new SObjectField();
+        final SObjectField sObjectField20 = createField("ShippingCountry", "Shipping Country", "string", "xsd:string", 80, false, true, false, false, false, false, false);
         fields1.add(sObjectField20);
-
-        sObjectField20.setWriteRequiresMasterRead(false);
-        sObjectField20.setNillable(true);
-        sObjectField20.setCreateable(true);
-        sObjectField20.setEncrypted(false);
-        sObjectField20.setDigits("0");
-        sObjectField20.setDependentPicklist(false);
-        sObjectField20.setLabel("Shipping Latitude");
-        sObjectField20.setHighScaleNumber(false);
-        sObjectField20.setDisplayLocationInDecimal(false);
-        sObjectField20.setName("ShippingLatitude");
-        sObjectField20.setHtmlFormatted(false);
-        sObjectField20.setDeprecatedAndHidden(false);
-        sObjectField20.setRestrictedPicklist(false);
-        sObjectField20.setNameField(false);
-        sObjectField20.setCaseSensitive(false);
-        sObjectField20.setPermissionable(true);
-        sObjectField20.setCascadeDelete(false);
-        sObjectField20.setDefaultedOnCreate(false);
-        sObjectField20.setExternalId(false);
-        sObjectField20.setSoapType("xsd:double");
-        sObjectField20.setGroupable(false);
-        sObjectField20.setCustom(false);
-        sObjectField20.setScale(15);
-        sObjectField20.setCalculated(false);
-        sObjectField20.setRestrictedDelete(false);
-        sObjectField20.setNamePointing(false);
-        sObjectField20.setIdLookup(false);
-        sObjectField20.setType("double");
-        sObjectField20.setSortable(true);
-        sObjectField20.setLength(0);
-        sObjectField20.setPrecision(18);
-        sObjectField20.setByteLength(0);
-        sObjectField20.setQueryByDistance(false);
-        sObjectField20.setFilterable(true);
-        sObjectField20.setUpdateable(true);
-        sObjectField20.setUnique(false);
-        sObjectField20.setAutoNumber(false);
-
-        final SObjectField sObjectField21 = new SObjectField();
+        final SObjectField sObjectField21 = createField("ShippingLatitude", "Shipping Latitude", "double", "xsd:double", 0, false, true, false, false, false, false, false);
         fields1.add(sObjectField21);
-
-        sObjectField21.setWriteRequiresMasterRead(false);
-        sObjectField21.setNillable(true);
-        sObjectField21.setCreateable(true);
-        sObjectField21.setEncrypted(false);
-        sObjectField21.setDigits("0");
-        sObjectField21.setDependentPicklist(false);
-        sObjectField21.setLabel("Shipping Longitude");
-        sObjectField21.setHighScaleNumber(false);
-        sObjectField21.setDisplayLocationInDecimal(false);
-        sObjectField21.setName("ShippingLongitude");
-        sObjectField21.setHtmlFormatted(false);
-        sObjectField21.setDeprecatedAndHidden(false);
-        sObjectField21.setRestrictedPicklist(false);
-        sObjectField21.setNameField(false);
-        sObjectField21.setCaseSensitive(false);
-        sObjectField21.setPermissionable(true);
-        sObjectField21.setCascadeDelete(false);
-        sObjectField21.setDefaultedOnCreate(false);
-        sObjectField21.setExternalId(false);
-        sObjectField21.setSoapType("xsd:double");
-        sObjectField21.setGroupable(false);
-        sObjectField21.setCustom(false);
-        sObjectField21.setScale(15);
-        sObjectField21.setCalculated(false);
-        sObjectField21.setRestrictedDelete(false);
-        sObjectField21.setNamePointing(false);
-        sObjectField21.setIdLookup(false);
-        sObjectField21.setType("double");
-        sObjectField21.setSortable(true);
-        sObjectField21.setLength(0);
-        sObjectField21.setPrecision(18);
-        sObjectField21.setByteLength(0);
-        sObjectField21.setQueryByDistance(false);
-        sObjectField21.setFilterable(true);
-        sObjectField21.setUpdateable(true);
-        sObjectField21.setUnique(false);
-        sObjectField21.setAutoNumber(false);
-
-        final SObjectField sObjectField22 = new SObjectField();
+        final SObjectField sObjectField22 = createField("ShippingLongitude", "Shipping Longitude", "double", "xsd:double", 0, false, true, false, false, false, false, false);
         fields1.add(sObjectField22);
-
-        sObjectField22.setWriteRequiresMasterRead(false);
-        sObjectField22.setNillable(true);
-        sObjectField22.setCreateable(false);
-        sObjectField22.setEncrypted(false);
-        sObjectField22.setDigits("0");
-        sObjectField22.setDependentPicklist(false);
-        sObjectField22.setLabel("Shipping Address");
-        sObjectField22.setHighScaleNumber(false);
-        sObjectField22.setDisplayLocationInDecimal(false);
-        sObjectField22.setName("ShippingAddress");
-        sObjectField22.setHtmlFormatted(false);
-        sObjectField22.setDeprecatedAndHidden(false);
-        sObjectField22.setRestrictedPicklist(false);
-        sObjectField22.setNameField(false);
-        sObjectField22.setCaseSensitive(false);
-        sObjectField22.setPermissionable(true);
-        sObjectField22.setCascadeDelete(false);
-        sObjectField22.setDefaultedOnCreate(false);
-        sObjectField22.setExternalId(false);
-        sObjectField22.setSoapType("urn:address");
-        sObjectField22.setGroupable(false);
-        sObjectField22.setCustom(false);
-        sObjectField22.setScale(0);
-        sObjectField22.setCalculated(false);
-        sObjectField22.setRestrictedDelete(false);
-        sObjectField22.setNamePointing(false);
-        sObjectField22.setIdLookup(false);
-        sObjectField22.setType("address");
-        sObjectField22.setSortable(false);
-        sObjectField22.setLength(0);
-        sObjectField22.setPrecision(0);
-        sObjectField22.setByteLength(0);
-        sObjectField22.setQueryByDistance(true);
-        sObjectField22.setFilterable(true);
-        sObjectField22.setUpdateable(false);
-        sObjectField22.setUnique(false);
-        sObjectField22.setAutoNumber(false);
-
-        final SObjectField sObjectField23 = new SObjectField();
+        final SObjectField sObjectField23 = createField("ShippingGeocodeAccuracy", "Shipping Geocode Accuracy", "picklist", "xsd:string", 40, false, true, false, false, false, false, false);
         fields1.add(sObjectField23);
-
-        sObjectField23.setWriteRequiresMasterRead(false);
-        sObjectField23.setNillable(true);
-        sObjectField23.setCreateable(true);
-        sObjectField23.setEncrypted(false);
-        sObjectField23.setDigits("0");
-        sObjectField23.setDependentPicklist(false);
-        sObjectField23.setLabel("Account Phone");
-        sObjectField23.setHighScaleNumber(false);
-        sObjectField23.setDisplayLocationInDecimal(false);
-        sObjectField23.setName("Phone");
-        sObjectField23.setHtmlFormatted(false);
-        sObjectField23.setDeprecatedAndHidden(false);
-        sObjectField23.setRestrictedPicklist(false);
-        sObjectField23.setNameField(false);
-        sObjectField23.setCaseSensitive(false);
-        sObjectField23.setPermissionable(true);
-        sObjectField23.setCascadeDelete(false);
-        sObjectField23.setDefaultedOnCreate(false);
-        sObjectField23.setExternalId(false);
-        sObjectField23.setSoapType("xsd:string");
-        sObjectField23.setGroupable(true);
-        sObjectField23.setCustom(false);
-        sObjectField23.setScale(0);
-        sObjectField23.setCalculated(false);
-        sObjectField23.setRestrictedDelete(false);
-        sObjectField23.setNamePointing(false);
-        sObjectField23.setIdLookup(false);
-        sObjectField23.setType("phone");
-        sObjectField23.setSortable(true);
-        sObjectField23.setLength(40);
-        sObjectField23.setPrecision(0);
-        sObjectField23.setByteLength(120);
-        sObjectField23.setQueryByDistance(false);
-        sObjectField23.setFilterable(true);
-        sObjectField23.setUpdateable(true);
-        sObjectField23.setUnique(false);
-        sObjectField23.setAutoNumber(false);
-
-        final SObjectField sObjectField24 = new SObjectField();
+        final SObjectField sObjectField24 = createField("ShippingAddress", "Shipping Address", "address", "urn:address", 0, false, true, false, false, false, false, false);
         fields1.add(sObjectField24);
-
-        sObjectField24.setWriteRequiresMasterRead(false);
-        sObjectField24.setNillable(true);
-        sObjectField24.setCreateable(true);
-        sObjectField24.setEncrypted(false);
-        sObjectField24.setDigits("0");
-        sObjectField24.setDependentPicklist(false);
-        sObjectField24.setLabel("Account Fax");
-        sObjectField24.setHighScaleNumber(false);
-        sObjectField24.setDisplayLocationInDecimal(false);
-        sObjectField24.setName("Fax");
-        sObjectField24.setHtmlFormatted(false);
-        sObjectField24.setDeprecatedAndHidden(false);
-        sObjectField24.setRestrictedPicklist(false);
-        sObjectField24.setNameField(false);
-        sObjectField24.setCaseSensitive(false);
-        sObjectField24.setPermissionable(true);
-        sObjectField24.setCascadeDelete(false);
-        sObjectField24.setDefaultedOnCreate(false);
-        sObjectField24.setExternalId(false);
-        sObjectField24.setSoapType("xsd:string");
-        sObjectField24.setGroupable(true);
-        sObjectField24.setCustom(false);
-        sObjectField24.setScale(0);
-        sObjectField24.setCalculated(false);
-        sObjectField24.setRestrictedDelete(false);
-        sObjectField24.setNamePointing(false);
-        sObjectField24.setIdLookup(false);
-        sObjectField24.setType("phone");
-        sObjectField24.setSortable(true);
-        sObjectField24.setLength(40);
-        sObjectField24.setPrecision(0);
-        sObjectField24.setByteLength(120);
-        sObjectField24.setQueryByDistance(false);
-        sObjectField24.setFilterable(true);
-        sObjectField24.setUpdateable(true);
-        sObjectField24.setUnique(false);
-        sObjectField24.setAutoNumber(false);
-
-        final SObjectField sObjectField25 = new SObjectField();
+        final SObjectField sObjectField25 = createField("Phone", "Account Phone", "phone", "xsd:string", 40, false, true, false, false, false, false, false);
         fields1.add(sObjectField25);
-
-        sObjectField25.setWriteRequiresMasterRead(false);
-        sObjectField25.setNillable(true);
-        sObjectField25.setCreateable(true);
-        sObjectField25.setEncrypted(false);
-        sObjectField25.setDigits("0");
-        sObjectField25.setDependentPicklist(false);
-        sObjectField25.setLabel("Account Number");
-        sObjectField25.setHighScaleNumber(false);
-        sObjectField25.setDisplayLocationInDecimal(false);
-        sObjectField25.setName("AccountNumber");
-        sObjectField25.setHtmlFormatted(false);
-        sObjectField25.setDeprecatedAndHidden(false);
-        sObjectField25.setRestrictedPicklist(false);
-        sObjectField25.setNameField(false);
-        sObjectField25.setCaseSensitive(false);
-        sObjectField25.setPermissionable(true);
-        sObjectField25.setCascadeDelete(false);
-        sObjectField25.setDefaultedOnCreate(false);
-        sObjectField25.setExternalId(false);
-        sObjectField25.setSoapType("xsd:string");
-        sObjectField25.setGroupable(true);
-        sObjectField25.setCustom(false);
-        sObjectField25.setScale(0);
-        sObjectField25.setCalculated(false);
-        sObjectField25.setRestrictedDelete(false);
-        sObjectField25.setNamePointing(false);
-        sObjectField25.setIdLookup(false);
-        sObjectField25.setType("string");
-        sObjectField25.setSortable(true);
-        sObjectField25.setLength(40);
-        sObjectField25.setPrecision(0);
-        sObjectField25.setByteLength(120);
-        sObjectField25.setQueryByDistance(false);
-        sObjectField25.setFilterable(true);
-        sObjectField25.setUpdateable(true);
-        sObjectField25.setUnique(false);
-        sObjectField25.setAutoNumber(false);
-
-        final SObjectField sObjectField26 = new SObjectField();
+        final SObjectField sObjectField26 = createField("Fax", "Account Fax", "phone", "xsd:string", 40, false, true, false, false, false, false, false);
         fields1.add(sObjectField26);
-
-        sObjectField26.setWriteRequiresMasterRead(false);
-        sObjectField26.setNillable(true);
-        sObjectField26.setCreateable(true);
-        sObjectField26.setEncrypted(false);
-        sObjectField26.setDigits("0");
-        sObjectField26.setDependentPicklist(false);
-        sObjectField26.setLabel("Website");
-        sObjectField26.setHighScaleNumber(false);
-        sObjectField26.setDisplayLocationInDecimal(false);
-        sObjectField26.setName("Website");
-        sObjectField26.setHtmlFormatted(false);
-        sObjectField26.setDeprecatedAndHidden(false);
-        sObjectField26.setRestrictedPicklist(false);
-        sObjectField26.setNameField(false);
-        sObjectField26.setCaseSensitive(false);
-        sObjectField26.setPermissionable(true);
-        sObjectField26.setCascadeDelete(false);
-        sObjectField26.setDefaultedOnCreate(false);
-        sObjectField26.setExternalId(false);
-        sObjectField26.setSoapType("xsd:string");
-        sObjectField26.setGroupable(true);
-        sObjectField26.setCustom(false);
-        sObjectField26.setScale(0);
-        sObjectField26.setCalculated(false);
-        sObjectField26.setRestrictedDelete(false);
-        sObjectField26.setNamePointing(false);
-        sObjectField26.setIdLookup(false);
-        sObjectField26.setType("url");
-        sObjectField26.setSortable(true);
-        sObjectField26.setLength(255);
-        sObjectField26.setPrecision(0);
-        sObjectField26.setByteLength(765);
-        sObjectField26.setQueryByDistance(false);
-        sObjectField26.setFilterable(true);
-        sObjectField26.setUpdateable(true);
-        sObjectField26.setUnique(false);
-        sObjectField26.setAutoNumber(false);
-
-        final SObjectField sObjectField27 = new SObjectField();
+        final SObjectField sObjectField27 = createField("AccountNumber", "Account Number", "string", "xsd:string", 40, false, true, false, false, false, false, false);
         fields1.add(sObjectField27);
-
-        sObjectField27.setWriteRequiresMasterRead(false);
-        sObjectField27.setNillable(true);
-        sObjectField27.setCreateable(false);
-        sObjectField27.setEncrypted(false);
-        sObjectField27.setDigits("0");
-        sObjectField27.setExtraTypeInfo("imageurl");
-        sObjectField27.setDependentPicklist(false);
-        sObjectField27.setLabel("Photo URL");
-        sObjectField27.setHighScaleNumber(false);
-        sObjectField27.setDisplayLocationInDecimal(false);
-        sObjectField27.setName("PhotoUrl");
-        sObjectField27.setHtmlFormatted(false);
-        sObjectField27.setDeprecatedAndHidden(false);
-        sObjectField27.setRestrictedPicklist(false);
-        sObjectField27.setNameField(false);
-        sObjectField27.setCaseSensitive(false);
-        sObjectField27.setPermissionable(false);
-        sObjectField27.setCascadeDelete(false);
-        sObjectField27.setDefaultedOnCreate(false);
-        sObjectField27.setExternalId(false);
-        sObjectField27.setSoapType("xsd:string");
-        sObjectField27.setGroupable(true);
-        sObjectField27.setCustom(false);
-        sObjectField27.setScale(0);
-        sObjectField27.setCalculated(false);
-        sObjectField27.setRestrictedDelete(false);
-        sObjectField27.setNamePointing(false);
-        sObjectField27.setIdLookup(false);
-        sObjectField27.setType("url");
-        sObjectField27.setSortable(true);
-        sObjectField27.setLength(255);
-        sObjectField27.setPrecision(0);
-        sObjectField27.setByteLength(765);
-        sObjectField27.setQueryByDistance(false);
-        sObjectField27.setFilterable(true);
-        sObjectField27.setUpdateable(false);
-        sObjectField27.setUnique(false);
-        sObjectField27.setAutoNumber(false);
-
-        final SObjectField sObjectField28 = new SObjectField();
+        final SObjectField sObjectField28 = createField("Website", "Website", "url", "xsd:string", 255, false, true, false, false, false, false, false);
         fields1.add(sObjectField28);
-
-        sObjectField28.setWriteRequiresMasterRead(false);
-        sObjectField28.setNillable(true);
-        sObjectField28.setCreateable(true);
-        sObjectField28.setEncrypted(false);
-        sObjectField28.setDigits("0");
-        sObjectField28.setDependentPicklist(false);
-        sObjectField28.setLabel("SIC Code");
-        sObjectField28.setHighScaleNumber(false);
-        sObjectField28.setDisplayLocationInDecimal(false);
-        sObjectField28.setName("Sic");
-        sObjectField28.setHtmlFormatted(false);
-        sObjectField28.setDeprecatedAndHidden(false);
-        sObjectField28.setRestrictedPicklist(false);
-        sObjectField28.setNameField(false);
-        sObjectField28.setCaseSensitive(false);
-        sObjectField28.setPermissionable(true);
-        sObjectField28.setCascadeDelete(false);
-        sObjectField28.setDefaultedOnCreate(false);
-        sObjectField28.setExternalId(false);
-        sObjectField28.setSoapType("xsd:string");
-        sObjectField28.setGroupable(true);
-        sObjectField28.setCustom(false);
-        sObjectField28.setScale(0);
-        sObjectField28.setCalculated(false);
-        sObjectField28.setRestrictedDelete(false);
-        sObjectField28.setNamePointing(false);
-        sObjectField28.setIdLookup(false);
-        sObjectField28.setType("string");
-        sObjectField28.setSortable(true);
-        sObjectField28.setLength(20);
-        sObjectField28.setPrecision(0);
-        sObjectField28.setByteLength(60);
-        sObjectField28.setQueryByDistance(false);
-        sObjectField28.setFilterable(true);
-        sObjectField28.setUpdateable(true);
-        sObjectField28.setUnique(false);
-        sObjectField28.setAutoNumber(false);
-
-        final SObjectField sObjectField29 = new SObjectField();
+        final SObjectField sObjectField29 = createField("PhotoUrl", "Photo URL", "url", "xsd:string", 255, false, true, false, false, false, false, false);
         fields1.add(sObjectField29);
-
-        sObjectField29.setWriteRequiresMasterRead(false);
-        sObjectField29.setNillable(true);
-        sObjectField29.setCreateable(true);
-        sObjectField29.setEncrypted(false);
-        sObjectField29.setDigits("0");
-        sObjectField29.setDependentPicklist(false);
-        sObjectField29.setLabel("Industry");
-        sObjectField29.setHighScaleNumber(false);
-        sObjectField29.setDisplayLocationInDecimal(false);
-        sObjectField29.setName("Industry");
-        sObjectField29.setHtmlFormatted(false);
-        sObjectField29.setDeprecatedAndHidden(false);
-        sObjectField29.setRestrictedPicklist(false);
-        sObjectField29.setNameField(false);
-        sObjectField29.setCaseSensitive(false);
-        sObjectField29.setPermissionable(true);
-        sObjectField29.setCascadeDelete(false);
-        sObjectField29.setDefaultedOnCreate(false);
-        sObjectField29.setExternalId(false);
-        sObjectField29.setSoapType("xsd:string");
-        sObjectField29.setGroupable(true);
-        sObjectField29.setCustom(false);
-        sObjectField29.setScale(0);
-        sObjectField29.setCalculated(false);
-        sObjectField29.setRestrictedDelete(false);
-        sObjectField29.setNamePointing(false);
-        sObjectField29.setIdLookup(false);
-        sObjectField29.setType("picklist");
-        sObjectField29.setSortable(true);
-        sObjectField29.setLength(40);
-        sObjectField29.setPrecision(0);
-        sObjectField29.setByteLength(120);
-        sObjectField29.setQueryByDistance(false);
-        sObjectField29.setFilterable(true);
-        sObjectField29.setUpdateable(true);
-        sObjectField29.setUnique(false);
-        sObjectField29.setAutoNumber(false);
-
-        final SObjectField sObjectField30 = new SObjectField();
+        final SObjectField sObjectField30 = createField("Sic", "SIC Code", "string", "xsd:string", 20, false, true, false, false, false, false, false);
         fields1.add(sObjectField30);
-
-        sObjectField30.setWriteRequiresMasterRead(false);
-        sObjectField30.setNillable(true);
-        sObjectField30.setCreateable(true);
-        sObjectField30.setEncrypted(false);
-        sObjectField30.setDigits("0");
-        sObjectField30.setDependentPicklist(false);
-        sObjectField30.setLabel("Annual Revenue");
-        sObjectField30.setHighScaleNumber(false);
-        sObjectField30.setDisplayLocationInDecimal(false);
-        sObjectField30.setName("AnnualRevenue");
-        sObjectField30.setHtmlFormatted(false);
-        sObjectField30.setDeprecatedAndHidden(false);
-        sObjectField30.setRestrictedPicklist(false);
-        sObjectField30.setNameField(false);
-        sObjectField30.setCaseSensitive(false);
-        sObjectField30.setPermissionable(true);
-        sObjectField30.setCascadeDelete(false);
-        sObjectField30.setDefaultedOnCreate(false);
-        sObjectField30.setExternalId(false);
-        sObjectField30.setSoapType("xsd:double");
-        sObjectField30.setGroupable(false);
-        sObjectField30.setCustom(false);
-        sObjectField30.setScale(0);
-        sObjectField30.setCalculated(false);
-        sObjectField30.setRestrictedDelete(false);
-        sObjectField30.setNamePointing(false);
-        sObjectField30.setIdLookup(false);
-        sObjectField30.setType("currency");
-        sObjectField30.setSortable(true);
-        sObjectField30.setLength(0);
-        sObjectField30.setPrecision(18);
-        sObjectField30.setByteLength(0);
-        sObjectField30.setQueryByDistance(false);
-        sObjectField30.setFilterable(true);
-        sObjectField30.setUpdateable(true);
-        sObjectField30.setUnique(false);
-        sObjectField30.setAutoNumber(false);
-
-        final SObjectField sObjectField31 = new SObjectField();
+        final SObjectField sObjectField31 = createField("Industry", "Industry", "picklist", "xsd:string", 40, false, true, false, false, false, false, false);
         fields1.add(sObjectField31);
-
-        sObjectField31.setWriteRequiresMasterRead(false);
-        sObjectField31.setNillable(true);
-        sObjectField31.setCreateable(true);
-        sObjectField31.setEncrypted(false);
-        sObjectField31.setDigits("8");
-        sObjectField31.setDependentPicklist(false);
-        sObjectField31.setLabel("Employees");
-        sObjectField31.setHighScaleNumber(false);
-        sObjectField31.setDisplayLocationInDecimal(false);
-        sObjectField31.setName("NumberOfEmployees");
-        sObjectField31.setHtmlFormatted(false);
-        sObjectField31.setDeprecatedAndHidden(false);
-        sObjectField31.setRestrictedPicklist(false);
-        sObjectField31.setNameField(false);
-        sObjectField31.setCaseSensitive(false);
-        sObjectField31.setPermissionable(true);
-        sObjectField31.setCascadeDelete(false);
-        sObjectField31.setDefaultedOnCreate(false);
-        sObjectField31.setExternalId(false);
-        sObjectField31.setSoapType("xsd:int");
-        sObjectField31.setGroupable(true);
-        sObjectField31.setCustom(false);
-        sObjectField31.setScale(0);
-        sObjectField31.setCalculated(false);
-        sObjectField31.setRestrictedDelete(false);
-        sObjectField31.setNamePointing(false);
-        sObjectField31.setIdLookup(false);
-        sObjectField31.setType("int");
-        sObjectField31.setSortable(true);
-        sObjectField31.setLength(0);
-        sObjectField31.setPrecision(0);
-        sObjectField31.setByteLength(0);
-        sObjectField31.setQueryByDistance(false);
-        sObjectField31.setFilterable(true);
-        sObjectField31.setUpdateable(true);
-        sObjectField31.setUnique(false);
-        sObjectField31.setAutoNumber(false);
-
-        final SObjectField sObjectField32 = new SObjectField();
+        final SObjectField sObjectField32 = createField("AnnualRevenue", "Annual Revenue", "currency", "xsd:double", 0, false, true, false, false, false, false, false);
         fields1.add(sObjectField32);
-
-        sObjectField32.setWriteRequiresMasterRead(false);
-        sObjectField32.setNillable(true);
-        sObjectField32.setCreateable(true);
-        sObjectField32.setEncrypted(false);
-        sObjectField32.setDigits("0");
-        sObjectField32.setDependentPicklist(false);
-        sObjectField32.setLabel("Ownership");
-        sObjectField32.setHighScaleNumber(false);
-        sObjectField32.setDisplayLocationInDecimal(false);
-        sObjectField32.setName("Ownership");
-        sObjectField32.setHtmlFormatted(false);
-        sObjectField32.setDeprecatedAndHidden(false);
-        sObjectField32.setRestrictedPicklist(false);
-        sObjectField32.setNameField(false);
-        sObjectField32.setCaseSensitive(false);
-        sObjectField32.setPermissionable(true);
-        sObjectField32.setCascadeDelete(false);
-        sObjectField32.setDefaultedOnCreate(false);
-        sObjectField32.setExternalId(false);
-        sObjectField32.setSoapType("xsd:string");
-        sObjectField32.setGroupable(true);
-        sObjectField32.setCustom(false);
-        sObjectField32.setScale(0);
-        sObjectField32.setCalculated(false);
-        sObjectField32.setRestrictedDelete(false);
-        sObjectField32.setNamePointing(false);
-        sObjectField32.setIdLookup(false);
-        sObjectField32.setType("picklist");
-        sObjectField32.setSortable(true);
-        sObjectField32.setLength(40);
-        sObjectField32.setPrecision(0);
-        sObjectField32.setByteLength(120);
-        sObjectField32.setQueryByDistance(false);
-        sObjectField32.setFilterable(true);
-        sObjectField32.setUpdateable(true);
-        sObjectField32.setUnique(false);
-        sObjectField32.setAutoNumber(false);
-
-        final SObjectField sObjectField33 = new SObjectField();
+        final SObjectField sObjectField33 = createField("NumberOfEmployees", "Employees", "int", "xsd:int", 0, false, true, false, false, false, false, false);
         fields1.add(sObjectField33);
-
-        sObjectField33.setWriteRequiresMasterRead(false);
-        sObjectField33.setNillable(true);
-        sObjectField33.setCreateable(true);
-        sObjectField33.setEncrypted(false);
-        sObjectField33.setDigits("0");
-        sObjectField33.setDependentPicklist(false);
-        sObjectField33.setLabel("Ticker Symbol");
-        sObjectField33.setHighScaleNumber(false);
-        sObjectField33.setDisplayLocationInDecimal(false);
-        sObjectField33.setName("TickerSymbol");
-        sObjectField33.setHtmlFormatted(false);
-        sObjectField33.setDeprecatedAndHidden(false);
-        sObjectField33.setRestrictedPicklist(false);
-        sObjectField33.setNameField(false);
-        sObjectField33.setCaseSensitive(false);
-        sObjectField33.setPermissionable(true);
-        sObjectField33.setCascadeDelete(false);
-        sObjectField33.setDefaultedOnCreate(false);
-        sObjectField33.setExternalId(false);
-        sObjectField33.setSoapType("xsd:string");
-        sObjectField33.setGroupable(true);
-        sObjectField33.setCustom(false);
-        sObjectField33.setScale(0);
-        sObjectField33.setCalculated(false);
-        sObjectField33.setRestrictedDelete(false);
-        sObjectField33.setNamePointing(false);
-        sObjectField33.setIdLookup(false);
-        sObjectField33.setType("string");
-        sObjectField33.setSortable(true);
-        sObjectField33.setLength(20);
-        sObjectField33.setPrecision(0);
-        sObjectField33.setByteLength(60);
-        sObjectField33.setQueryByDistance(false);
-        sObjectField33.setFilterable(true);
-        sObjectField33.setUpdateable(true);
-        sObjectField33.setUnique(false);
-        sObjectField33.setAutoNumber(false);
-
-        final SObjectField sObjectField34 = new SObjectField();
+        final SObjectField sObjectField34 = createField("Ownership", "Ownership", "picklist", "xsd:string", 40, false, true, false, false, false, false, false);
         fields1.add(sObjectField34);
-
-        sObjectField34.setWriteRequiresMasterRead(false);
-        sObjectField34.setNillable(true);
-        sObjectField34.setCreateable(true);
-        sObjectField34.setEncrypted(false);
-        sObjectField34.setDigits("0");
-        sObjectField34.setExtraTypeInfo("plaintextarea");
-        sObjectField34.setDependentPicklist(false);
-        sObjectField34.setLabel("Account Description");
-        sObjectField34.setHighScaleNumber(false);
-        sObjectField34.setDisplayLocationInDecimal(false);
-        sObjectField34.setName("Description");
-        sObjectField34.setHtmlFormatted(false);
-        sObjectField34.setDeprecatedAndHidden(false);
-        sObjectField34.setRestrictedPicklist(false);
-        sObjectField34.setNameField(false);
-        sObjectField34.setCaseSensitive(false);
-        sObjectField34.setPermissionable(true);
-        sObjectField34.setCascadeDelete(false);
-        sObjectField34.setDefaultedOnCreate(false);
-        sObjectField34.setExternalId(false);
-        sObjectField34.setSoapType("xsd:string");
-        sObjectField34.setGroupable(false);
-        sObjectField34.setCustom(false);
-        sObjectField34.setScale(0);
-        sObjectField34.setCalculated(false);
-        sObjectField34.setRestrictedDelete(false);
-        sObjectField34.setNamePointing(false);
-        sObjectField34.setIdLookup(false);
-        sObjectField34.setType("textarea");
-        sObjectField34.setSortable(false);
-        sObjectField34.setLength(32000);
-        sObjectField34.setPrecision(0);
-        sObjectField34.setByteLength(96000);
-        sObjectField34.setQueryByDistance(false);
-        sObjectField34.setFilterable(false);
-        sObjectField34.setUpdateable(true);
-        sObjectField34.setUnique(false);
-        sObjectField34.setAutoNumber(false);
-
-        final SObjectField sObjectField35 = new SObjectField();
+        final SObjectField sObjectField35 = createField("TickerSymbol", "Ticker Symbol", "string", "xsd:string", 20, false, true, false, false, false, false, false);
         fields1.add(sObjectField35);
-
-        sObjectField35.setWriteRequiresMasterRead(false);
-        sObjectField35.setNillable(true);
-        sObjectField35.setCreateable(true);
-        sObjectField35.setEncrypted(false);
-        sObjectField35.setDigits("0");
-        sObjectField35.setDependentPicklist(false);
-        sObjectField35.setLabel("Account Rating");
-        sObjectField35.setHighScaleNumber(false);
-        sObjectField35.setDisplayLocationInDecimal(false);
-        sObjectField35.setName("Rating");
-        sObjectField35.setHtmlFormatted(false);
-        sObjectField35.setDeprecatedAndHidden(false);
-        sObjectField35.setRestrictedPicklist(false);
-        sObjectField35.setNameField(false);
-        sObjectField35.setCaseSensitive(false);
-        sObjectField35.setPermissionable(true);
-        sObjectField35.setCascadeDelete(false);
-        sObjectField35.setDefaultedOnCreate(false);
-        sObjectField35.setExternalId(false);
-        sObjectField35.setSoapType("xsd:string");
-        sObjectField35.setGroupable(true);
-        sObjectField35.setCustom(false);
-        sObjectField35.setScale(0);
-        sObjectField35.setCalculated(false);
-        sObjectField35.setRestrictedDelete(false);
-        sObjectField35.setNamePointing(false);
-        sObjectField35.setIdLookup(false);
-        sObjectField35.setType("picklist");
-        sObjectField35.setSortable(true);
-        sObjectField35.setLength(40);
-        sObjectField35.setPrecision(0);
-        sObjectField35.setByteLength(120);
-        sObjectField35.setQueryByDistance(false);
-        sObjectField35.setFilterable(true);
-        sObjectField35.setUpdateable(true);
-        sObjectField35.setUnique(false);
-        sObjectField35.setAutoNumber(false);
-
-        final SObjectField sObjectField36 = new SObjectField();
+        final SObjectField sObjectField36 = createField("Description", "Account Description", "textarea", "xsd:string", 32000, false, true, false, false, false, false, false);
         fields1.add(sObjectField36);
-
-        sObjectField36.setWriteRequiresMasterRead(false);
-        sObjectField36.setNillable(true);
-        sObjectField36.setCreateable(true);
-        sObjectField36.setEncrypted(false);
-        sObjectField36.setDigits("0");
-        sObjectField36.setDependentPicklist(false);
-        sObjectField36.setLabel("Account Site");
-        sObjectField36.setHighScaleNumber(false);
-        sObjectField36.setDisplayLocationInDecimal(false);
-        sObjectField36.setName("Site");
-        sObjectField36.setHtmlFormatted(false);
-        sObjectField36.setDeprecatedAndHidden(false);
-        sObjectField36.setRestrictedPicklist(false);
-        sObjectField36.setNameField(false);
-        sObjectField36.setCaseSensitive(false);
-        sObjectField36.setPermissionable(true);
-        sObjectField36.setCascadeDelete(false);
-        sObjectField36.setDefaultedOnCreate(false);
-        sObjectField36.setExternalId(false);
-        sObjectField36.setSoapType("xsd:string");
-        sObjectField36.setGroupable(true);
-        sObjectField36.setCustom(false);
-        sObjectField36.setScale(0);
-        sObjectField36.setCalculated(false);
-        sObjectField36.setRestrictedDelete(false);
-        sObjectField36.setNamePointing(false);
-        sObjectField36.setIdLookup(false);
-        sObjectField36.setType("string");
-        sObjectField36.setSortable(true);
-        sObjectField36.setLength(80);
-        sObjectField36.setPrecision(0);
-        sObjectField36.setByteLength(240);
-        sObjectField36.setQueryByDistance(false);
-        sObjectField36.setFilterable(true);
-        sObjectField36.setUpdateable(true);
-        sObjectField36.setUnique(false);
-        sObjectField36.setAutoNumber(false);
-
-        final SObjectField sObjectField37 = new SObjectField();
+        final SObjectField sObjectField37 = createField("Rating", "Account Rating", "picklist", "xsd:string", 40, false, true, false, false, false, false, false);
         fields1.add(sObjectField37);
-
-        sObjectField37.setWriteRequiresMasterRead(false);
-        sObjectField37.setNillable(false);
-        sObjectField37.setCreateable(true);
-        sObjectField37.setEncrypted(false);
-        sObjectField37.setDigits("0");
-        sObjectField37.setDependentPicklist(false);
-        sObjectField37.setLabel("Owner ID");
-        sObjectField37.setHighScaleNumber(false);
-        sObjectField37.setDisplayLocationInDecimal(false);
-        sObjectField37.setName("OwnerId");
-        sObjectField37.setHtmlFormatted(false);
-        sObjectField37.setDeprecatedAndHidden(false);
-        sObjectField37.setRestrictedPicklist(false);
-        sObjectField37.setNameField(false);
-        sObjectField37.setCaseSensitive(false);
-        sObjectField37.setPermissionable(false);
-        sObjectField37.setCascadeDelete(false);
-        sObjectField37.setDefaultedOnCreate(true);
-        sObjectField37.setExternalId(false);
-        sObjectField37.setSoapType("tns:ID");
-        sObjectField37.setGroupable(true);
-        sObjectField37.setCustom(false);
-        sObjectField37.setScale(0);
-        sObjectField37.setCalculated(false);
-        sObjectField37.setRestrictedDelete(false);
-        sObjectField37.setNamePointing(false);
-        sObjectField37.setIdLookup(false);
-        sObjectField37.setType("reference");
-
-        final List<String> referenceTo3 = new ArrayList<>();
-        sObjectField37.setReferenceTo(referenceTo3);
-
-        referenceTo3.add("User");
-
-        sObjectField37.setRelationshipName("Owner");
-        sObjectField37.setSortable(true);
-        sObjectField37.setLength(18);
-        sObjectField37.setPrecision(0);
-        sObjectField37.setByteLength(18);
-        sObjectField37.setQueryByDistance(false);
-        sObjectField37.setFilterable(true);
-        sObjectField37.setUpdateable(true);
-        sObjectField37.setUnique(false);
-        sObjectField37.setAutoNumber(false);
-
-        final SObjectField sObjectField38 = new SObjectField();
+        final SObjectField sObjectField38 = createField("Site", "Account Site", "string", "xsd:string", 80, false, true, false, false, false, false, false);
         fields1.add(sObjectField38);
-
-        sObjectField38.setWriteRequiresMasterRead(false);
-        sObjectField38.setNillable(false);
-        sObjectField38.setCreateable(false);
-        sObjectField38.setEncrypted(false);
-        sObjectField38.setDigits("0");
-        sObjectField38.setDependentPicklist(false);
-        sObjectField38.setLabel("Created Date");
-        sObjectField38.setHighScaleNumber(false);
-        sObjectField38.setDisplayLocationInDecimal(false);
-        sObjectField38.setName("CreatedDate");
-        sObjectField38.setHtmlFormatted(false);
-        sObjectField38.setDeprecatedAndHidden(false);
-        sObjectField38.setRestrictedPicklist(false);
-        sObjectField38.setNameField(false);
-        sObjectField38.setCaseSensitive(false);
-        sObjectField38.setPermissionable(false);
-        sObjectField38.setCascadeDelete(false);
-        sObjectField38.setDefaultedOnCreate(true);
-        sObjectField38.setExternalId(false);
-        sObjectField38.setSoapType("xsd:dateTime");
-        sObjectField38.setGroupable(false);
-        sObjectField38.setCustom(false);
-        sObjectField38.setScale(0);
-        sObjectField38.setCalculated(false);
-        sObjectField38.setRestrictedDelete(false);
-        sObjectField38.setNamePointing(false);
-        sObjectField38.setIdLookup(false);
-        sObjectField38.setType("datetime");
-        sObjectField38.setSortable(true);
-        sObjectField38.setLength(0);
-        sObjectField38.setPrecision(0);
-        sObjectField38.setByteLength(0);
-        sObjectField38.setQueryByDistance(false);
-        sObjectField38.setFilterable(true);
-        sObjectField38.setUpdateable(false);
-        sObjectField38.setUnique(false);
-        sObjectField38.setAutoNumber(false);
-
-        final SObjectField sObjectField39 = new SObjectField();
+        final SObjectField sObjectField39 = createField("OwnerId", "Owner ID", "reference", "tns:ID", 18, false, false, false, false, false, false, false);
         fields1.add(sObjectField39);
-
-        sObjectField39.setWriteRequiresMasterRead(false);
-        sObjectField39.setNillable(false);
-        sObjectField39.setCreateable(false);
-        sObjectField39.setEncrypted(false);
-        sObjectField39.setDigits("0");
-        sObjectField39.setDependentPicklist(false);
-        sObjectField39.setLabel("Created By ID");
-        sObjectField39.setHighScaleNumber(false);
-        sObjectField39.setDisplayLocationInDecimal(false);
-        sObjectField39.setName("CreatedById");
-        sObjectField39.setHtmlFormatted(false);
-        sObjectField39.setDeprecatedAndHidden(false);
-        sObjectField39.setRestrictedPicklist(false);
-        sObjectField39.setNameField(false);
-        sObjectField39.setCaseSensitive(false);
-        sObjectField39.setPermissionable(false);
-        sObjectField39.setCascadeDelete(false);
-        sObjectField39.setDefaultedOnCreate(true);
-        sObjectField39.setExternalId(false);
-        sObjectField39.setSoapType("tns:ID");
-        sObjectField39.setGroupable(true);
-        sObjectField39.setCustom(false);
-        sObjectField39.setScale(0);
-        sObjectField39.setCalculated(false);
-        sObjectField39.setRestrictedDelete(false);
-        sObjectField39.setNamePointing(false);
-        sObjectField39.setIdLookup(false);
-        sObjectField39.setType("reference");
-
-        final List<String> referenceTo4 = new ArrayList<>();
-        sObjectField39.setReferenceTo(referenceTo4);
-
-        referenceTo4.add("User");
-
-        sObjectField39.setRelationshipName("CreatedBy");
-        sObjectField39.setSortable(true);
-        sObjectField39.setLength(18);
-        sObjectField39.setPrecision(0);
-        sObjectField39.setByteLength(18);
-        sObjectField39.setQueryByDistance(false);
-        sObjectField39.setFilterable(true);
-        sObjectField39.setUpdateable(false);
-        sObjectField39.setUnique(false);
-        sObjectField39.setAutoNumber(false);
-
-        final SObjectField sObjectField40 = new SObjectField();
+        final SObjectField sObjectField40 = createField("CreatedDate", "Created Date", "datetime", "xsd:dateTime", 0, false, false, false, false, false, false, false);
         fields1.add(sObjectField40);
-
-        sObjectField40.setWriteRequiresMasterRead(false);
-        sObjectField40.setNillable(false);
-        sObjectField40.setCreateable(false);
-        sObjectField40.setEncrypted(false);
-        sObjectField40.setDigits("0");
-        sObjectField40.setDependentPicklist(false);
-        sObjectField40.setLabel("Last Modified Date");
-        sObjectField40.setHighScaleNumber(false);
-        sObjectField40.setDisplayLocationInDecimal(false);
-        sObjectField40.setName("LastModifiedDate");
-        sObjectField40.setHtmlFormatted(false);
-        sObjectField40.setDeprecatedAndHidden(false);
-        sObjectField40.setRestrictedPicklist(false);
-        sObjectField40.setNameField(false);
-        sObjectField40.setCaseSensitive(false);
-        sObjectField40.setPermissionable(false);
-        sObjectField40.setCascadeDelete(false);
-        sObjectField40.setDefaultedOnCreate(true);
-        sObjectField40.setExternalId(false);
-        sObjectField40.setSoapType("xsd:dateTime");
-        sObjectField40.setGroupable(false);
-        sObjectField40.setCustom(false);
-        sObjectField40.setScale(0);
-        sObjectField40.setCalculated(false);
-        sObjectField40.setRestrictedDelete(false);
-        sObjectField40.setNamePointing(false);
-        sObjectField40.setIdLookup(false);
-        sObjectField40.setType("datetime");
-        sObjectField40.setSortable(true);
-        sObjectField40.setLength(0);
-        sObjectField40.setPrecision(0);
-        sObjectField40.setByteLength(0);
-        sObjectField40.setQueryByDistance(false);
-        sObjectField40.setFilterable(true);
-        sObjectField40.setUpdateable(false);
-        sObjectField40.setUnique(false);
-        sObjectField40.setAutoNumber(false);
-
-        final SObjectField sObjectField41 = new SObjectField();
+        final SObjectField sObjectField41 = createField("CreatedById", "Created By ID", "reference", "tns:ID", 18, false, false, false, false, false, false, false);
         fields1.add(sObjectField41);
-
-        sObjectField41.setWriteRequiresMasterRead(false);
-        sObjectField41.setNillable(false);
-        sObjectField41.setCreateable(false);
-        sObjectField41.setEncrypted(false);
-        sObjectField41.setDigits("0");
-        sObjectField41.setDependentPicklist(false);
-        sObjectField41.setLabel("Last Modified By ID");
-        sObjectField41.setHighScaleNumber(false);
-        sObjectField41.setDisplayLocationInDecimal(false);
-        sObjectField41.setName("LastModifiedById");
-        sObjectField41.setHtmlFormatted(false);
-        sObjectField41.setDeprecatedAndHidden(false);
-        sObjectField41.setRestrictedPicklist(false);
-        sObjectField41.setNameField(false);
-        sObjectField41.setCaseSensitive(false);
-        sObjectField41.setPermissionable(false);
-        sObjectField41.setCascadeDelete(false);
-        sObjectField41.setDefaultedOnCreate(true);
-        sObjectField41.setExternalId(false);
-        sObjectField41.setSoapType("tns:ID");
-        sObjectField41.setGroupable(true);
-        sObjectField41.setCustom(false);
-        sObjectField41.setScale(0);
-        sObjectField41.setCalculated(false);
-        sObjectField41.setRestrictedDelete(false);
-        sObjectField41.setNamePointing(false);
-        sObjectField41.setIdLookup(false);
-        sObjectField41.setType("reference");
-
-        final List<String> referenceTo5 = new ArrayList<>();
-        sObjectField41.setReferenceTo(referenceTo5);
-
-        referenceTo5.add("User");
-
-        sObjectField41.setRelationshipName("LastModifiedBy");
-        sObjectField41.setSortable(true);
-        sObjectField41.setLength(18);
-        sObjectField41.setPrecision(0);
-        sObjectField41.setByteLength(18);
-        sObjectField41.setQueryByDistance(false);
-        sObjectField41.setFilterable(true);
-        sObjectField41.setUpdateable(false);
-        sObjectField41.setUnique(false);
-        sObjectField41.setAutoNumber(false);
-
-        final SObjectField sObjectField42 = new SObjectField();
+        final SObjectField sObjectField42 = createField("LastModifiedDate", "Last Modified Date", "datetime", "xsd:dateTime", 0, false, false, false, false, false, false, false);
         fields1.add(sObjectField42);
-
-        sObjectField42.setWriteRequiresMasterRead(false);
-        sObjectField42.setNillable(false);
-        sObjectField42.setCreateable(false);
-        sObjectField42.setEncrypted(false);
-        sObjectField42.setDigits("0");
-        sObjectField42.setDependentPicklist(false);
-        sObjectField42.setLabel("System Modstamp");
-        sObjectField42.setHighScaleNumber(false);
-        sObjectField42.setDisplayLocationInDecimal(false);
-        sObjectField42.setName("SystemModstamp");
-        sObjectField42.setHtmlFormatted(false);
-        sObjectField42.setDeprecatedAndHidden(false);
-        sObjectField42.setRestrictedPicklist(false);
-        sObjectField42.setNameField(false);
-        sObjectField42.setCaseSensitive(false);
-        sObjectField42.setPermissionable(false);
-        sObjectField42.setCascadeDelete(false);
-        sObjectField42.setDefaultedOnCreate(true);
-        sObjectField42.setExternalId(false);
-        sObjectField42.setSoapType("xsd:dateTime");
-        sObjectField42.setGroupable(false);
-        sObjectField42.setCustom(false);
-        sObjectField42.setScale(0);
-        sObjectField42.setCalculated(false);
-        sObjectField42.setRestrictedDelete(false);
-        sObjectField42.setNamePointing(false);
-        sObjectField42.setIdLookup(false);
-        sObjectField42.setType("datetime");
-        sObjectField42.setSortable(true);
-        sObjectField42.setLength(0);
-        sObjectField42.setPrecision(0);
-        sObjectField42.setByteLength(0);
-        sObjectField42.setQueryByDistance(false);
-        sObjectField42.setFilterable(true);
-        sObjectField42.setUpdateable(false);
-        sObjectField42.setUnique(false);
-        sObjectField42.setAutoNumber(false);
-
-        final SObjectField sObjectField43 = new SObjectField();
+        final SObjectField sObjectField43 = createField("LastModifiedById", "Last Modified By ID", "reference", "tns:ID", 18, false, false, false, false, false, false, false);
         fields1.add(sObjectField43);
-
-        sObjectField43.setWriteRequiresMasterRead(false);
-        sObjectField43.setNillable(true);
-        sObjectField43.setCreateable(false);
-        sObjectField43.setEncrypted(false);
-        sObjectField43.setDigits("0");
-        sObjectField43.setDependentPicklist(false);
-        sObjectField43.setLabel("Last Activity");
-        sObjectField43.setHighScaleNumber(false);
-        sObjectField43.setDisplayLocationInDecimal(false);
-        sObjectField43.setName("LastActivityDate");
-        sObjectField43.setHtmlFormatted(false);
-        sObjectField43.setDeprecatedAndHidden(false);
-        sObjectField43.setRestrictedPicklist(false);
-        sObjectField43.setNameField(false);
-        sObjectField43.setCaseSensitive(false);
-        sObjectField43.setPermissionable(false);
-        sObjectField43.setCascadeDelete(false);
-        sObjectField43.setDefaultedOnCreate(false);
-        sObjectField43.setExternalId(false);
-        sObjectField43.setSoapType("xsd:date");
-        sObjectField43.setGroupable(true);
-        sObjectField43.setCustom(false);
-        sObjectField43.setScale(0);
-        sObjectField43.setCalculated(false);
-        sObjectField43.setRestrictedDelete(false);
-        sObjectField43.setNamePointing(false);
-        sObjectField43.setIdLookup(false);
-        sObjectField43.setType("date");
-        sObjectField43.setSortable(true);
-        sObjectField43.setLength(0);
-        sObjectField43.setPrecision(0);
-        sObjectField43.setByteLength(0);
-        sObjectField43.setQueryByDistance(false);
-        sObjectField43.setFilterable(true);
-        sObjectField43.setUpdateable(false);
-        sObjectField43.setUnique(false);
-        sObjectField43.setAutoNumber(false);
-
-        final SObjectField sObjectField44 = new SObjectField();
+        final SObjectField sObjectField44 = createField("SystemModstamp", "System Modstamp", "datetime", "xsd:dateTime", 0, false, false, false, false, false, false, false);
         fields1.add(sObjectField44);
-
-        sObjectField44.setWriteRequiresMasterRead(false);
-        sObjectField44.setNillable(true);
-        sObjectField44.setCreateable(false);
-        sObjectField44.setEncrypted(false);
-        sObjectField44.setDigits("0");
-        sObjectField44.setDependentPicklist(false);
-        sObjectField44.setLabel("Last Viewed Date");
-        sObjectField44.setHighScaleNumber(false);
-        sObjectField44.setDisplayLocationInDecimal(false);
-        sObjectField44.setName("LastViewedDate");
-        sObjectField44.setHtmlFormatted(false);
-        sObjectField44.setDeprecatedAndHidden(false);
-        sObjectField44.setRestrictedPicklist(false);
-        sObjectField44.setNameField(false);
-        sObjectField44.setCaseSensitive(false);
-        sObjectField44.setPermissionable(false);
-        sObjectField44.setCascadeDelete(false);
-        sObjectField44.setDefaultedOnCreate(false);
-        sObjectField44.setExternalId(false);
-        sObjectField44.setSoapType("xsd:dateTime");
-        sObjectField44.setGroupable(false);
-        sObjectField44.setCustom(false);
-        sObjectField44.setScale(0);
-        sObjectField44.setCalculated(false);
-        sObjectField44.setRestrictedDelete(false);
-        sObjectField44.setNamePointing(false);
-        sObjectField44.setIdLookup(false);
-        sObjectField44.setType("datetime");
-        sObjectField44.setSortable(true);
-        sObjectField44.setLength(0);
-        sObjectField44.setPrecision(0);
-        sObjectField44.setByteLength(0);
-        sObjectField44.setQueryByDistance(false);
-        sObjectField44.setFilterable(true);
-        sObjectField44.setUpdateable(false);
-        sObjectField44.setUnique(false);
-        sObjectField44.setAutoNumber(false);
-
-        final SObjectField sObjectField45 = new SObjectField();
+        final SObjectField sObjectField45 = createField("LastActivityDate", "Last Activity", "date", "xsd:date", 0, false, true, false, false, false, false, false);
         fields1.add(sObjectField45);
-
-        sObjectField45.setWriteRequiresMasterRead(false);
-        sObjectField45.setNillable(true);
-        sObjectField45.setCreateable(false);
-        sObjectField45.setEncrypted(false);
-        sObjectField45.setDigits("0");
-        sObjectField45.setDependentPicklist(false);
-        sObjectField45.setLabel("Last Referenced Date");
-        sObjectField45.setHighScaleNumber(false);
-        sObjectField45.setDisplayLocationInDecimal(false);
-        sObjectField45.setName("LastReferencedDate");
-        sObjectField45.setHtmlFormatted(false);
-        sObjectField45.setDeprecatedAndHidden(false);
-        sObjectField45.setRestrictedPicklist(false);
-        sObjectField45.setNameField(false);
-        sObjectField45.setCaseSensitive(false);
-        sObjectField45.setPermissionable(false);
-        sObjectField45.setCascadeDelete(false);
-        sObjectField45.setDefaultedOnCreate(false);
-        sObjectField45.setExternalId(false);
-        sObjectField45.setSoapType("xsd:dateTime");
-        sObjectField45.setGroupable(false);
-        sObjectField45.setCustom(false);
-        sObjectField45.setScale(0);
-        sObjectField45.setCalculated(false);
-        sObjectField45.setRestrictedDelete(false);
-        sObjectField45.setNamePointing(false);
-        sObjectField45.setIdLookup(false);
-        sObjectField45.setType("datetime");
-        sObjectField45.setSortable(true);
-        sObjectField45.setLength(0);
-        sObjectField45.setPrecision(0);
-        sObjectField45.setByteLength(0);
-        sObjectField45.setQueryByDistance(false);
-        sObjectField45.setFilterable(true);
-        sObjectField45.setUpdateable(false);
-        sObjectField45.setUnique(false);
-        sObjectField45.setAutoNumber(false);
-
-        final SObjectField sObjectField46 = new SObjectField();
+        final SObjectField sObjectField46 = createField("LastViewedDate", "Last Viewed Date", "datetime", "xsd:dateTime", 0, false, true, false, false, false, false, false);
         fields1.add(sObjectField46);
-
-        sObjectField46.setWriteRequiresMasterRead(false);
-        sObjectField46.setNillable(true);
-        sObjectField46.setCreateable(true);
-        sObjectField46.setEncrypted(false);
-        sObjectField46.setDigits("0");
-        sObjectField46.setDependentPicklist(false);
-        sObjectField46.setLabel("Data.com Key");
-        sObjectField46.setHighScaleNumber(false);
-        sObjectField46.setDisplayLocationInDecimal(false);
-        sObjectField46.setName("Jigsaw");
-        sObjectField46.setHtmlFormatted(false);
-        sObjectField46.setDeprecatedAndHidden(false);
-        sObjectField46.setRestrictedPicklist(false);
-        sObjectField46.setNameField(false);
-        sObjectField46.setCaseSensitive(false);
-        sObjectField46.setPermissionable(true);
-        sObjectField46.setCascadeDelete(false);
-        sObjectField46.setDefaultedOnCreate(false);
-        sObjectField46.setExternalId(false);
-        sObjectField46.setSoapType("xsd:string");
-        sObjectField46.setGroupable(true);
-        sObjectField46.setCustom(false);
-        sObjectField46.setScale(0);
-        sObjectField46.setCalculated(false);
-        sObjectField46.setRestrictedDelete(false);
-        sObjectField46.setNamePointing(false);
-        sObjectField46.setIdLookup(false);
-        sObjectField46.setType("string");
-        sObjectField46.setSortable(true);
-        sObjectField46.setLength(20);
-        sObjectField46.setPrecision(0);
-        sObjectField46.setByteLength(60);
-        sObjectField46.setQueryByDistance(false);
-        sObjectField46.setFilterable(true);
-        sObjectField46.setUpdateable(true);
-        sObjectField46.setUnique(false);
-        sObjectField46.setAutoNumber(false);
-
-        final SObjectField sObjectField47 = new SObjectField();
+        final SObjectField sObjectField47 = createField("LastReferencedDate", "Last Referenced Date", "datetime", "xsd:dateTime", 0, false, true, false, false, false, false, false);
         fields1.add(sObjectField47);
-
-        sObjectField47.setWriteRequiresMasterRead(false);
-        sObjectField47.setNillable(true);
-        sObjectField47.setCreateable(false);
-        sObjectField47.setEncrypted(false);
-        sObjectField47.setDigits("0");
-        sObjectField47.setDependentPicklist(false);
-        sObjectField47.setLabel("Jigsaw Company ID");
-        sObjectField47.setHighScaleNumber(false);
-        sObjectField47.setDisplayLocationInDecimal(false);
-        sObjectField47.setName("JigsawCompanyId");
-        sObjectField47.setHtmlFormatted(false);
-        sObjectField47.setDeprecatedAndHidden(false);
-        sObjectField47.setRestrictedPicklist(false);
-        sObjectField47.setNameField(false);
-        sObjectField47.setCaseSensitive(false);
-        sObjectField47.setPermissionable(false);
-        sObjectField47.setCascadeDelete(false);
-        sObjectField47.setDefaultedOnCreate(false);
-        sObjectField47.setExternalId(false);
-        sObjectField47.setSoapType("xsd:string");
-        sObjectField47.setGroupable(true);
-        sObjectField47.setCustom(false);
-        sObjectField47.setScale(0);
-        sObjectField47.setCalculated(false);
-        sObjectField47.setRestrictedDelete(false);
-        sObjectField47.setNamePointing(false);
-        sObjectField47.setIdLookup(false);
-        sObjectField47.setType("string");
-        sObjectField47.setRelationshipName("JigsawCompany");
-        sObjectField47.setSortable(true);
-        sObjectField47.setLength(20);
-        sObjectField47.setPrecision(0);
-        sObjectField47.setByteLength(60);
-        sObjectField47.setQueryByDistance(false);
-        sObjectField47.setFilterable(true);
-        sObjectField47.setUpdateable(false);
-        sObjectField47.setUnique(false);
-        sObjectField47.setAutoNumber(false);
-
-        final SObjectField sObjectField48 = new SObjectField();
+        final SObjectField sObjectField48 = createField("Jigsaw", "Data.com Key", "string", "xsd:string", 20, false, true, false, false, false, false, false);
         fields1.add(sObjectField48);
-
-        sObjectField48.setWriteRequiresMasterRead(false);
-        sObjectField48.setNillable(true);
-        sObjectField48.setCreateable(true);
-        sObjectField48.setEncrypted(false);
-        sObjectField48.setDigits("0");
-        sObjectField48.setDependentPicklist(false);
-        sObjectField48.setLabel("Clean Status");
-        sObjectField48.setHighScaleNumber(false);
-        sObjectField48.setDisplayLocationInDecimal(false);
-        sObjectField48.setName("CleanStatus");
-        sObjectField48.setHtmlFormatted(false);
-        sObjectField48.setDeprecatedAndHidden(false);
-        sObjectField48.setRestrictedPicklist(true);
-        sObjectField48.setNameField(false);
-        sObjectField48.setCaseSensitive(false);
-        sObjectField48.setPermissionable(true);
-        sObjectField48.setCascadeDelete(false);
-        sObjectField48.setDefaultedOnCreate(false);
-        sObjectField48.setExternalId(false);
-        sObjectField48.setSoapType("xsd:string");
-        sObjectField48.setGroupable(true);
-        sObjectField48.setCustom(false);
-        sObjectField48.setScale(0);
-        sObjectField48.setCalculated(false);
-        sObjectField48.setRestrictedDelete(false);
-        sObjectField48.setNamePointing(false);
-        sObjectField48.setIdLookup(false);
-        sObjectField48.setType("picklist");
-        sObjectField48.setSortable(true);
-        sObjectField48.setLength(40);
-        sObjectField48.setPrecision(0);
-        sObjectField48.setByteLength(120);
-        sObjectField48.setQueryByDistance(false);
-        sObjectField48.setFilterable(true);
-        sObjectField48.setUpdateable(true);
-        sObjectField48.setUnique(false);
-        sObjectField48.setAutoNumber(false);
-
-        final SObjectField sObjectField49 = new SObjectField();
+        final SObjectField sObjectField49 = createField("JigsawCompanyId", "Jigsaw Company ID", "string", "xsd:string", 20, false, true, false, false, false, false, false);
         fields1.add(sObjectField49);
-
-        sObjectField49.setWriteRequiresMasterRead(false);
-        sObjectField49.setNillable(true);
-        sObjectField49.setCreateable(true);
-        sObjectField49.setEncrypted(false);
-        sObjectField49.setDigits("0");
-        sObjectField49.setDependentPicklist(false);
-        sObjectField49.setLabel("Account Source");
-        sObjectField49.setHighScaleNumber(false);
-        sObjectField49.setDisplayLocationInDecimal(false);
-        sObjectField49.setName("AccountSource");
-        sObjectField49.setHtmlFormatted(false);
-        sObjectField49.setDeprecatedAndHidden(false);
-        sObjectField49.setRestrictedPicklist(false);
-        sObjectField49.setNameField(false);
-        sObjectField49.setCaseSensitive(false);
-        sObjectField49.setPermissionable(true);
-        sObjectField49.setCascadeDelete(false);
-        sObjectField49.setDefaultedOnCreate(false);
-        sObjectField49.setExternalId(false);
-        sObjectField49.setSoapType("xsd:string");
-        sObjectField49.setGroupable(true);
-        sObjectField49.setCustom(false);
-        sObjectField49.setScale(0);
-        sObjectField49.setCalculated(false);
-        sObjectField49.setRestrictedDelete(false);
-        sObjectField49.setNamePointing(false);
-        sObjectField49.setIdLookup(false);
-        sObjectField49.setType("picklist");
-        sObjectField49.setSortable(true);
-        sObjectField49.setLength(40);
-        sObjectField49.setPrecision(0);
-        sObjectField49.setByteLength(120);
-        sObjectField49.setQueryByDistance(false);
-        sObjectField49.setFilterable(true);
-        sObjectField49.setUpdateable(true);
-        sObjectField49.setUnique(false);
-        sObjectField49.setAutoNumber(false);
-
-        final SObjectField sObjectField50 = new SObjectField();
+        final SObjectField sObjectField50 = createField("CleanStatus", "Clean Status", "picklist", "xsd:string", 40, false, true, false, false, false, false, false);
         fields1.add(sObjectField50);
-
-        sObjectField50.setWriteRequiresMasterRead(false);
-        sObjectField50.setNillable(true);
-        sObjectField50.setCreateable(true);
-        sObjectField50.setEncrypted(false);
-        sObjectField50.setDigits("0");
-        sObjectField50.setDependentPicklist(false);
-        sObjectField50.setLabel("D-U-N-S Number");
-        sObjectField50.setHighScaleNumber(false);
-        sObjectField50.setDisplayLocationInDecimal(false);
-        sObjectField50.setName("DunsNumber");
-        sObjectField50.setHtmlFormatted(false);
-        sObjectField50.setDeprecatedAndHidden(false);
-        sObjectField50.setRestrictedPicklist(false);
-        sObjectField50.setNameField(false);
-        sObjectField50.setCaseSensitive(false);
-        sObjectField50.setPermissionable(true);
-        sObjectField50.setCascadeDelete(false);
-        sObjectField50.setDefaultedOnCreate(false);
-        sObjectField50.setExternalId(false);
-        sObjectField50.setSoapType("xsd:string");
-        sObjectField50.setGroupable(true);
-        sObjectField50.setCustom(false);
-        sObjectField50.setScale(0);
-        sObjectField50.setCalculated(false);
-        sObjectField50.setRestrictedDelete(false);
-        sObjectField50.setNamePointing(false);
-        sObjectField50.setIdLookup(false);
-        sObjectField50.setType("string");
-        sObjectField50.setSortable(true);
-        sObjectField50.setLength(9);
-        sObjectField50.setPrecision(0);
-        sObjectField50.setByteLength(27);
-        sObjectField50.setQueryByDistance(false);
-        sObjectField50.setFilterable(true);
-        sObjectField50.setUpdateable(true);
-        sObjectField50.setUnique(false);
-        sObjectField50.setAutoNumber(false);
-
-        final SObjectField sObjectField51 = new SObjectField();
+        final SObjectField sObjectField51 = createField("AccountSource", "Account Source", "picklist", "xsd:string", 40, false, true, false, false, false, false, false);
         fields1.add(sObjectField51);
-
-        sObjectField51.setWriteRequiresMasterRead(false);
-        sObjectField51.setNillable(true);
-        sObjectField51.setCreateable(true);
-        sObjectField51.setEncrypted(false);
-        sObjectField51.setDigits("0");
-        sObjectField51.setDependentPicklist(false);
-        sObjectField51.setLabel("Tradestyle");
-        sObjectField51.setHighScaleNumber(false);
-        sObjectField51.setDisplayLocationInDecimal(false);
-        sObjectField51.setName("Tradestyle");
-        sObjectField51.setHtmlFormatted(false);
-        sObjectField51.setDeprecatedAndHidden(false);
-        sObjectField51.setRestrictedPicklist(false);
-        sObjectField51.setNameField(false);
-        sObjectField51.setCaseSensitive(false);
-        sObjectField51.setPermissionable(true);
-        sObjectField51.setCascadeDelete(false);
-        sObjectField51.setDefaultedOnCreate(false);
-        sObjectField51.setExternalId(false);
-        sObjectField51.setSoapType("xsd:string");
-        sObjectField51.setGroupable(true);
-        sObjectField51.setCustom(false);
-        sObjectField51.setScale(0);
-        sObjectField51.setCalculated(false);
-        sObjectField51.setRestrictedDelete(false);
-        sObjectField51.setNamePointing(false);
-        sObjectField51.setIdLookup(false);
-        sObjectField51.setType("string");
-        sObjectField51.setSortable(true);
-        sObjectField51.setLength(255);
-        sObjectField51.setPrecision(0);
-        sObjectField51.setByteLength(765);
-        sObjectField51.setQueryByDistance(false);
-        sObjectField51.setFilterable(true);
-        sObjectField51.setUpdateable(true);
-        sObjectField51.setUnique(false);
-        sObjectField51.setAutoNumber(false);
-
-        final SObjectField sObjectField52 = new SObjectField();
+        final SObjectField sObjectField52 = createField("DunsNumber", "D-U-N-S Number", "string", "xsd:string", 9, false, true, false, false, false, false, false);
         fields1.add(sObjectField52);
-
-        sObjectField52.setWriteRequiresMasterRead(false);
-        sObjectField52.setNillable(true);
-        sObjectField52.setCreateable(true);
-        sObjectField52.setEncrypted(false);
-        sObjectField52.setDigits("0");
-        sObjectField52.setDependentPicklist(false);
-        sObjectField52.setLabel("NAICS Code");
-        sObjectField52.setHighScaleNumber(false);
-        sObjectField52.setDisplayLocationInDecimal(false);
-        sObjectField52.setName("NaicsCode");
-        sObjectField52.setHtmlFormatted(false);
-        sObjectField52.setDeprecatedAndHidden(false);
-        sObjectField52.setRestrictedPicklist(false);
-        sObjectField52.setNameField(false);
-        sObjectField52.setCaseSensitive(false);
-        sObjectField52.setPermissionable(true);
-        sObjectField52.setCascadeDelete(false);
-        sObjectField52.setDefaultedOnCreate(false);
-        sObjectField52.setExternalId(false);
-        sObjectField52.setSoapType("xsd:string");
-        sObjectField52.setGroupable(true);
-        sObjectField52.setCustom(false);
-        sObjectField52.setScale(0);
-        sObjectField52.setCalculated(false);
-        sObjectField52.setRestrictedDelete(false);
-        sObjectField52.setNamePointing(false);
-        sObjectField52.setIdLookup(false);
-        sObjectField52.setType("string");
-        sObjectField52.setSortable(true);
-        sObjectField52.setLength(8);
-        sObjectField52.setPrecision(0);
-        sObjectField52.setByteLength(24);
-        sObjectField52.setQueryByDistance(false);
-        sObjectField52.setFilterable(true);
-        sObjectField52.setUpdateable(true);
-        sObjectField52.setUnique(false);
-        sObjectField52.setAutoNumber(false);
-
-        final SObjectField sObjectField53 = new SObjectField();
+        final SObjectField sObjectField53 = createField("Tradestyle", "Tradestyle", "string", "xsd:string", 255, false, true, false, false, false, false, false);
         fields1.add(sObjectField53);
-
-        sObjectField53.setWriteRequiresMasterRead(false);
-        sObjectField53.setNillable(true);
-        sObjectField53.setCreateable(true);
-        sObjectField53.setEncrypted(false);
-        sObjectField53.setDigits("0");
-        sObjectField53.setDependentPicklist(false);
-        sObjectField53.setLabel("NAICS Description");
-        sObjectField53.setHighScaleNumber(false);
-        sObjectField53.setDisplayLocationInDecimal(false);
-        sObjectField53.setName("NaicsDesc");
-        sObjectField53.setHtmlFormatted(false);
-        sObjectField53.setDeprecatedAndHidden(false);
-        sObjectField53.setRestrictedPicklist(false);
-        sObjectField53.setNameField(false);
-        sObjectField53.setCaseSensitive(false);
-        sObjectField53.setPermissionable(true);
-        sObjectField53.setCascadeDelete(false);
-        sObjectField53.setDefaultedOnCreate(false);
-        sObjectField53.setExternalId(false);
-        sObjectField53.setSoapType("xsd:string");
-        sObjectField53.setGroupable(true);
-        sObjectField53.setCustom(false);
-        sObjectField53.setScale(0);
-        sObjectField53.setCalculated(false);
-        sObjectField53.setRestrictedDelete(false);
-        sObjectField53.setNamePointing(false);
-        sObjectField53.setIdLookup(false);
-        sObjectField53.setType("string");
-        sObjectField53.setSortable(true);
-        sObjectField53.setLength(120);
-        sObjectField53.setPrecision(0);
-        sObjectField53.setByteLength(360);
-        sObjectField53.setQueryByDistance(false);
-        sObjectField53.setFilterable(true);
-        sObjectField53.setUpdateable(true);
-        sObjectField53.setUnique(false);
-        sObjectField53.setAutoNumber(false);
-
-        final SObjectField sObjectField54 = new SObjectField();
+        final SObjectField sObjectField54 = createField("NaicsCode", "NAICS Code", "string", "xsd:string", 8, false, true, false, false, false, false, false);
         fields1.add(sObjectField54);
-
-        sObjectField54.setWriteRequiresMasterRead(false);
-        sObjectField54.setNillable(true);
-        sObjectField54.setCreateable(true);
-        sObjectField54.setEncrypted(false);
-        sObjectField54.setDigits("0");
-        sObjectField54.setDependentPicklist(false);
-        sObjectField54.setLabel("Year Started");
-        sObjectField54.setHighScaleNumber(false);
-        sObjectField54.setDisplayLocationInDecimal(false);
-        sObjectField54.setName("YearStarted");
-        sObjectField54.setHtmlFormatted(false);
-        sObjectField54.setDeprecatedAndHidden(false);
-        sObjectField54.setRestrictedPicklist(false);
-        sObjectField54.setNameField(false);
-        sObjectField54.setCaseSensitive(false);
-        sObjectField54.setPermissionable(true);
-        sObjectField54.setCascadeDelete(false);
-        sObjectField54.setDefaultedOnCreate(false);
-        sObjectField54.setExternalId(false);
-        sObjectField54.setSoapType("xsd:string");
-        sObjectField54.setGroupable(true);
-        sObjectField54.setCustom(false);
-        sObjectField54.setScale(0);
-        sObjectField54.setCalculated(false);
-        sObjectField54.setRestrictedDelete(false);
-        sObjectField54.setNamePointing(false);
-        sObjectField54.setIdLookup(false);
-        sObjectField54.setType("string");
-        sObjectField54.setSortable(true);
-        sObjectField54.setLength(4);
-        sObjectField54.setPrecision(0);
-        sObjectField54.setByteLength(12);
-        sObjectField54.setQueryByDistance(false);
-        sObjectField54.setFilterable(true);
-        sObjectField54.setUpdateable(true);
-        sObjectField54.setUnique(false);
-        sObjectField54.setAutoNumber(false);
-
-        final SObjectField sObjectField55 = new SObjectField();
+        final SObjectField sObjectField55 = createField("NaicsDesc", "NAICS Description", "string", "xsd:string", 120, false, true, false, false, false, false, false);
         fields1.add(sObjectField55);
-
-        sObjectField55.setWriteRequiresMasterRead(false);
-        sObjectField55.setNillable(true);
-        sObjectField55.setCreateable(true);
-        sObjectField55.setEncrypted(false);
-        sObjectField55.setDigits("0");
-        sObjectField55.setDependentPicklist(false);
-        sObjectField55.setLabel("SIC Description");
-        sObjectField55.setHighScaleNumber(false);
-        sObjectField55.setDisplayLocationInDecimal(false);
-        sObjectField55.setName("SicDesc");
-        sObjectField55.setHtmlFormatted(false);
-        sObjectField55.setDeprecatedAndHidden(false);
-        sObjectField55.setRestrictedPicklist(false);
-        sObjectField55.setNameField(false);
-        sObjectField55.setCaseSensitive(false);
-        sObjectField55.setPermissionable(true);
-        sObjectField55.setCascadeDelete(false);
-        sObjectField55.setDefaultedOnCreate(false);
-        sObjectField55.setExternalId(false);
-        sObjectField55.setSoapType("xsd:string");
-        sObjectField55.setGroupable(true);
-        sObjectField55.setCustom(false);
-        sObjectField55.setScale(0);
-        sObjectField55.setCalculated(false);
-        sObjectField55.setRestrictedDelete(false);
-        sObjectField55.setNamePointing(false);
-        sObjectField55.setIdLookup(false);
-        sObjectField55.setType("string");
-        sObjectField55.setSortable(true);
-        sObjectField55.setLength(80);
-        sObjectField55.setPrecision(0);
-        sObjectField55.setByteLength(240);
-        sObjectField55.setQueryByDistance(false);
-        sObjectField55.setFilterable(true);
-        sObjectField55.setUpdateable(true);
-        sObjectField55.setUnique(false);
-        sObjectField55.setAutoNumber(false);
-
-        final SObjectField sObjectField56 = new SObjectField();
+        final SObjectField sObjectField56 = createField("YearStarted", "Year Started", "string", "xsd:string", 4, false, true, false, false, false, false, false);
         fields1.add(sObjectField56);
-
-        sObjectField56.setWriteRequiresMasterRead(false);
-        sObjectField56.setNillable(true);
-        sObjectField56.setCreateable(true);
-        sObjectField56.setEncrypted(false);
-        sObjectField56.setDigits("0");
-        sObjectField56.setDependentPicklist(false);
-        sObjectField56.setLabel("D&B Company ID");
-        sObjectField56.setHighScaleNumber(false);
-        sObjectField56.setDisplayLocationInDecimal(false);
-        sObjectField56.setName("DandbCompanyId");
-        sObjectField56.setHtmlFormatted(false);
-        sObjectField56.setDeprecatedAndHidden(false);
-        sObjectField56.setRestrictedPicklist(false);
-        sObjectField56.setNameField(false);
-        sObjectField56.setCaseSensitive(false);
-        sObjectField56.setPermissionable(true);
-        sObjectField56.setCascadeDelete(false);
-        sObjectField56.setDefaultedOnCreate(false);
-        sObjectField56.setExternalId(false);
-        sObjectField56.setSoapType("tns:ID");
-        sObjectField56.setGroupable(true);
-        sObjectField56.setCustom(false);
-        sObjectField56.setScale(0);
-        sObjectField56.setCalculated(false);
-        sObjectField56.setRestrictedDelete(false);
-        sObjectField56.setNamePointing(false);
-        sObjectField56.setIdLookup(false);
-        sObjectField56.setType("reference");
-
-        final List<String> referenceTo6 = new ArrayList<>();
-        sObjectField56.setReferenceTo(referenceTo6);
-
-        referenceTo6.add("DandBCompany");
-
-        sObjectField56.setRelationshipName("DandbCompany");
-        sObjectField56.setSortable(true);
-        sObjectField56.setLength(18);
-        sObjectField56.setPrecision(0);
-        sObjectField56.setByteLength(18);
-        sObjectField56.setQueryByDistance(false);
-        sObjectField56.setFilterable(true);
-        sObjectField56.setUpdateable(true);
-        sObjectField56.setUnique(false);
-        sObjectField56.setAutoNumber(false);
-
-        final SObjectField sObjectField57 = new SObjectField();
+        final SObjectField sObjectField57 = createField("SicDesc", "SIC Description", "string", "xsd:string", 80, false, true, false, false, false, false, false);
         fields1.add(sObjectField57);
-
-        sObjectField57.setWriteRequiresMasterRead(false);
-        sObjectField57.setNillable(true);
-        sObjectField57.setCreateable(true);
-        sObjectField57.setEncrypted(false);
-        sObjectField57.setDigits("0");
-        sObjectField57.setDependentPicklist(false);
-        sObjectField57.setLabel("Customer Priority");
-        sObjectField57.setHighScaleNumber(false);
-        sObjectField57.setDisplayLocationInDecimal(false);
-        sObjectField57.setName("CustomerPriority__c");
-        sObjectField57.setHtmlFormatted(false);
-        sObjectField57.setDeprecatedAndHidden(false);
-        sObjectField57.setRestrictedPicklist(false);
-        sObjectField57.setNameField(false);
-        sObjectField57.setCaseSensitive(false);
-        sObjectField57.setPermissionable(true);
-        sObjectField57.setCascadeDelete(false);
-        sObjectField57.setDefaultedOnCreate(false);
-        sObjectField57.setExternalId(false);
-        sObjectField57.setSoapType("xsd:string");
-        sObjectField57.setGroupable(true);
-        sObjectField57.setCustom(true);
-        sObjectField57.setScale(0);
-        sObjectField57.setCalculated(false);
-        sObjectField57.setRestrictedDelete(false);
-        sObjectField57.setNamePointing(false);
-        sObjectField57.setIdLookup(false);
-        sObjectField57.setType("picklist");
-        sObjectField57.setSortable(true);
-        sObjectField57.setLength(255);
-        sObjectField57.setPrecision(0);
-        sObjectField57.setByteLength(765);
-        sObjectField57.setQueryByDistance(false);
-        sObjectField57.setFilterable(true);
-        sObjectField57.setUpdateable(true);
-        sObjectField57.setUnique(false);
-        sObjectField57.setAutoNumber(false);
-
-        final SObjectField sObjectField58 = new SObjectField();
+        final SObjectField sObjectField58 = createField("DandbCompanyId", "D&B Company ID", "reference", "tns:ID", 18, false, true, false, false, false, false, false);
         fields1.add(sObjectField58);
-
-        sObjectField58.setWriteRequiresMasterRead(false);
-        sObjectField58.setNillable(true);
-        sObjectField58.setCreateable(true);
-        sObjectField58.setEncrypted(false);
-        sObjectField58.setDigits("0");
-        sObjectField58.setDependentPicklist(false);
-        sObjectField58.setLabel("SLA");
-        sObjectField58.setHighScaleNumber(false);
-        sObjectField58.setDisplayLocationInDecimal(false);
-        sObjectField58.setName("SLA__c");
-        sObjectField58.setHtmlFormatted(false);
-        sObjectField58.setDeprecatedAndHidden(false);
-        sObjectField58.setRestrictedPicklist(false);
-        sObjectField58.setNameField(false);
-        sObjectField58.setCaseSensitive(false);
-        sObjectField58.setPermissionable(true);
-        sObjectField58.setCascadeDelete(false);
-        sObjectField58.setDefaultedOnCreate(false);
-        sObjectField58.setExternalId(false);
-        sObjectField58.setSoapType("xsd:string");
-        sObjectField58.setGroupable(true);
-        sObjectField58.setCustom(true);
-        sObjectField58.setScale(0);
-        sObjectField58.setCalculated(false);
-        sObjectField58.setRestrictedDelete(false);
-        sObjectField58.setNamePointing(false);
-        sObjectField58.setIdLookup(false);
-        sObjectField58.setType("picklist");
-        sObjectField58.setSortable(true);
-        sObjectField58.setLength(255);
-        sObjectField58.setPrecision(0);
-        sObjectField58.setByteLength(765);
-        sObjectField58.setQueryByDistance(false);
-        sObjectField58.setFilterable(true);
-        sObjectField58.setUpdateable(true);
-        sObjectField58.setUnique(false);
-        sObjectField58.setAutoNumber(false);
-
-        final SObjectField sObjectField59 = new SObjectField();
+        final SObjectField sObjectField59 = createField("OperatingHoursId", "Operating Hour ID", "reference", "tns:ID", 18, false, true, false, false, false, false, false);
         fields1.add(sObjectField59);
-
-        sObjectField59.setWriteRequiresMasterRead(false);
-        sObjectField59.setNillable(true);
-        sObjectField59.setCreateable(true);
-        sObjectField59.setEncrypted(false);
-        sObjectField59.setDigits("0");
-        sObjectField59.setDependentPicklist(false);
-        sObjectField59.setLabel("Active");
-        sObjectField59.setHighScaleNumber(false);
-        sObjectField59.setDisplayLocationInDecimal(false);
-        sObjectField59.setName("Active__c");
-        sObjectField59.setHtmlFormatted(false);
-        sObjectField59.setDeprecatedAndHidden(false);
-        sObjectField59.setRestrictedPicklist(false);
-        sObjectField59.setNameField(false);
-        sObjectField59.setCaseSensitive(false);
-        sObjectField59.setPermissionable(true);
-        sObjectField59.setCascadeDelete(false);
-        sObjectField59.setDefaultedOnCreate(false);
-        sObjectField59.setExternalId(false);
-        sObjectField59.setSoapType("xsd:string");
-        sObjectField59.setGroupable(true);
-        sObjectField59.setCustom(true);
-        sObjectField59.setScale(0);
-        sObjectField59.setCalculated(false);
-        sObjectField59.setRestrictedDelete(false);
-        sObjectField59.setNamePointing(false);
-        sObjectField59.setIdLookup(false);
-        sObjectField59.setType("picklist");
-        sObjectField59.setSortable(true);
-        sObjectField59.setLength(255);
-        sObjectField59.setPrecision(0);
-        sObjectField59.setByteLength(765);
-        sObjectField59.setQueryByDistance(false);
-        sObjectField59.setFilterable(true);
-        sObjectField59.setUpdateable(true);
-        sObjectField59.setUnique(false);
-        sObjectField59.setAutoNumber(false);
-
-        final SObjectField sObjectField60 = new SObjectField();
+        final SObjectField sObjectField60 = createField("Shipping_Location__Latitude__s", "Shipping_Location (Latitude)", "double", "xsd:double", 0, false, true, false, false, true, false, false);
         fields1.add(sObjectField60);
-
-        sObjectField60.setWriteRequiresMasterRead(false);
-        sObjectField60.setNillable(true);
-        sObjectField60.setCreateable(true);
-        sObjectField60.setEncrypted(false);
-        sObjectField60.setDigits("0");
-        sObjectField60.setDependentPicklist(false);
-        sObjectField60.setLabel("Number of Locations");
-        sObjectField60.setHighScaleNumber(false);
-        sObjectField60.setDisplayLocationInDecimal(false);
-        sObjectField60.setName("NumberofLocations__c");
-        sObjectField60.setHtmlFormatted(false);
-        sObjectField60.setDeprecatedAndHidden(false);
-        sObjectField60.setRestrictedPicklist(false);
-        sObjectField60.setNameField(false);
-        sObjectField60.setCaseSensitive(false);
-        sObjectField60.setPermissionable(true);
-        sObjectField60.setCascadeDelete(false);
-        sObjectField60.setDefaultedOnCreate(false);
-        sObjectField60.setExternalId(false);
-        sObjectField60.setSoapType("xsd:double");
-        sObjectField60.setGroupable(false);
-        sObjectField60.setCustom(true);
-        sObjectField60.setScale(0);
-        sObjectField60.setCalculated(false);
-        sObjectField60.setRestrictedDelete(false);
-        sObjectField60.setNamePointing(false);
-        sObjectField60.setIdLookup(false);
-        sObjectField60.setType("double");
-        sObjectField60.setSortable(true);
-        sObjectField60.setLength(0);
-        sObjectField60.setPrecision(3);
-        sObjectField60.setByteLength(0);
-        sObjectField60.setQueryByDistance(false);
-        sObjectField60.setFilterable(true);
-        sObjectField60.setUpdateable(true);
-        sObjectField60.setUnique(false);
-        sObjectField60.setAutoNumber(false);
-
-        final SObjectField sObjectField61 = new SObjectField();
+        final SObjectField sObjectField61 = createField("Shipping_Location__Longitude__s", "Shipping_Location (Longitude)", "double", "xsd:double", 0, false, true, false, false, true, false, false);
         fields1.add(sObjectField61);
-
-        sObjectField61.setWriteRequiresMasterRead(false);
-        sObjectField61.setNillable(true);
-        sObjectField61.setCreateable(true);
-        sObjectField61.setEncrypted(false);
-        sObjectField61.setDigits("0");
-        sObjectField61.setDependentPicklist(false);
-        sObjectField61.setLabel("Upsell Opportunity");
-        sObjectField61.setHighScaleNumber(false);
-        sObjectField61.setDisplayLocationInDecimal(false);
-        sObjectField61.setName("UpsellOpportunity__c");
-        sObjectField61.setHtmlFormatted(false);
-        sObjectField61.setDeprecatedAndHidden(false);
-        sObjectField61.setRestrictedPicklist(false);
-        sObjectField61.setNameField(false);
-        sObjectField61.setCaseSensitive(false);
-        sObjectField61.setPermissionable(true);
-        sObjectField61.setCascadeDelete(false);
-        sObjectField61.setDefaultedOnCreate(false);
-        sObjectField61.setExternalId(false);
-        sObjectField61.setSoapType("xsd:string");
-        sObjectField61.setGroupable(true);
-        sObjectField61.setCustom(true);
-        sObjectField61.setScale(0);
-        sObjectField61.setCalculated(false);
-        sObjectField61.setRestrictedDelete(false);
-        sObjectField61.setNamePointing(false);
-        sObjectField61.setIdLookup(false);
-        sObjectField61.setType("picklist");
-        sObjectField61.setSortable(true);
-        sObjectField61.setLength(255);
-        sObjectField61.setPrecision(0);
-        sObjectField61.setByteLength(765);
-        sObjectField61.setQueryByDistance(false);
-        sObjectField61.setFilterable(true);
-        sObjectField61.setUpdateable(true);
-        sObjectField61.setUnique(false);
-        sObjectField61.setAutoNumber(false);
-
-        final SObjectField sObjectField62 = new SObjectField();
+        final SObjectField sObjectField62 = createField("Shipping_Location__c", "Shipping_Location", "location", "urn:location", 0, false, true, false, false, true, false, false);
         fields1.add(sObjectField62);
-
-        sObjectField62.setWriteRequiresMasterRead(false);
-        sObjectField62.setNillable(true);
-        sObjectField62.setCreateable(true);
-        sObjectField62.setEncrypted(false);
-        sObjectField62.setDigits("0");
-        sObjectField62.setDependentPicklist(false);
-        sObjectField62.setLabel("SLA Serial Number");
-        sObjectField62.setHighScaleNumber(false);
-        sObjectField62.setDisplayLocationInDecimal(false);
-        sObjectField62.setName("SLASerialNumber__c");
-        sObjectField62.setHtmlFormatted(false);
-        sObjectField62.setDeprecatedAndHidden(false);
-        sObjectField62.setRestrictedPicklist(false);
-        sObjectField62.setNameField(false);
-        sObjectField62.setCaseSensitive(false);
-        sObjectField62.setPermissionable(true);
-        sObjectField62.setCascadeDelete(false);
-        sObjectField62.setDefaultedOnCreate(false);
-        sObjectField62.setExternalId(false);
-        sObjectField62.setSoapType("xsd:string");
-        sObjectField62.setGroupable(true);
-        sObjectField62.setCustom(true);
-        sObjectField62.setScale(0);
-        sObjectField62.setCalculated(false);
-        sObjectField62.setRestrictedDelete(false);
-        sObjectField62.setNamePointing(false);
-        sObjectField62.setIdLookup(false);
-        sObjectField62.setType("string");
-        sObjectField62.setSortable(true);
-        sObjectField62.setLength(10);
-        sObjectField62.setPrecision(0);
-        sObjectField62.setByteLength(30);
-        sObjectField62.setQueryByDistance(false);
-        sObjectField62.setFilterable(true);
-        sObjectField62.setUpdateable(true);
-        sObjectField62.setUnique(false);
-        sObjectField62.setAutoNumber(false);
-
-        final SObjectField sObjectField63 = new SObjectField();
+        final SObjectField sObjectField63 = createField("External_Id__c", "External Id", "string", "xsd:string", 255, true, true, false, true, true, false, true);
         fields1.add(sObjectField63);
 
-        sObjectField63.setWriteRequiresMasterRead(false);
-        sObjectField63.setNillable(true);
-        sObjectField63.setCreateable(true);
-        sObjectField63.setEncrypted(false);
-        sObjectField63.setDigits("0");
-        sObjectField63.setDependentPicklist(false);
-        sObjectField63.setLabel("SLA Expiration Date");
-        sObjectField63.setHighScaleNumber(false);
-        sObjectField63.setDisplayLocationInDecimal(false);
-        sObjectField63.setName("SLAExpirationDate__c");
-        sObjectField63.setHtmlFormatted(false);
-        sObjectField63.setDeprecatedAndHidden(false);
-        sObjectField63.setRestrictedPicklist(false);
-        sObjectField63.setNameField(false);
-        sObjectField63.setCaseSensitive(false);
-        sObjectField63.setPermissionable(true);
-        sObjectField63.setCascadeDelete(false);
-        sObjectField63.setDefaultedOnCreate(false);
-        sObjectField63.setExternalId(false);
-        sObjectField63.setSoapType("xsd:date");
-        sObjectField63.setGroupable(true);
-        sObjectField63.setCustom(true);
-        sObjectField63.setScale(0);
-        sObjectField63.setCalculated(false);
-        sObjectField63.setRestrictedDelete(false);
-        sObjectField63.setNamePointing(false);
-        sObjectField63.setIdLookup(false);
-        sObjectField63.setType("date");
-        sObjectField63.setSortable(true);
-        sObjectField63.setLength(0);
-        sObjectField63.setPrecision(0);
-        sObjectField63.setByteLength(0);
-        sObjectField63.setQueryByDistance(false);
-        sObjectField63.setFilterable(true);
-        sObjectField63.setUpdateable(true);
-        sObjectField63.setUnique(false);
-        sObjectField63.setAutoNumber(false);
-
-        final SObjectField sObjectField64 = new SObjectField();
-        fields1.add(sObjectField64);
-
-        sObjectField64.setWriteRequiresMasterRead(false);
-        sObjectField64.setNillable(true);
-        sObjectField64.setCreateable(true);
-        sObjectField64.setEncrypted(false);
-        sObjectField64.setDigits("0");
-        sObjectField64.setDependentPicklist(false);
-        sObjectField64.setLabel("Shipping_Location (Latitude)");
-        sObjectField64.setHighScaleNumber(false);
-        sObjectField64.setDisplayLocationInDecimal(false);
-        sObjectField64.setName("Shipping_Location__Latitude__s");
-        sObjectField64.setHtmlFormatted(false);
-        sObjectField64.setDeprecatedAndHidden(false);
-        sObjectField64.setRestrictedPicklist(false);
-        sObjectField64.setNameField(false);
-        sObjectField64.setCaseSensitive(false);
-        sObjectField64.setPermissionable(true);
-        sObjectField64.setCascadeDelete(false);
-        sObjectField64.setDefaultedOnCreate(false);
-        sObjectField64.setExternalId(false);
-        sObjectField64.setSoapType("xsd:double");
-        sObjectField64.setGroupable(false);
-        sObjectField64.setCustom(true);
-        sObjectField64.setScale(3);
-        sObjectField64.setCalculated(false);
-        sObjectField64.setRestrictedDelete(false);
-        sObjectField64.setNamePointing(false);
-        sObjectField64.setIdLookup(false);
-        sObjectField64.setType("double");
-        sObjectField64.setSortable(true);
-        sObjectField64.setLength(0);
-        sObjectField64.setPrecision(6);
-        sObjectField64.setByteLength(0);
-        sObjectField64.setQueryByDistance(false);
-        sObjectField64.setFilterable(true);
-        sObjectField64.setUpdateable(true);
-        sObjectField64.setUnique(false);
-        sObjectField64.setAutoNumber(false);
-
-        final SObjectField sObjectField65 = new SObjectField();
-        fields1.add(sObjectField65);
-
-        sObjectField65.setWriteRequiresMasterRead(false);
-        sObjectField65.setNillable(true);
-        sObjectField65.setCreateable(true);
-        sObjectField65.setEncrypted(false);
-        sObjectField65.setDigits("0");
-        sObjectField65.setDependentPicklist(false);
-        sObjectField65.setLabel("Shipping_Location (Longitude)");
-        sObjectField65.setHighScaleNumber(false);
-        sObjectField65.setDisplayLocationInDecimal(false);
-        sObjectField65.setName("Shipping_Location__Longitude__s");
-        sObjectField65.setHtmlFormatted(false);
-        sObjectField65.setDeprecatedAndHidden(false);
-        sObjectField65.setRestrictedPicklist(false);
-        sObjectField65.setNameField(false);
-        sObjectField65.setCaseSensitive(false);
-        sObjectField65.setPermissionable(true);
-        sObjectField65.setCascadeDelete(false);
-        sObjectField65.setDefaultedOnCreate(false);
-        sObjectField65.setExternalId(false);
-        sObjectField65.setSoapType("xsd:double");
-        sObjectField65.setGroupable(false);
-        sObjectField65.setCustom(true);
-        sObjectField65.setScale(3);
-        sObjectField65.setCalculated(false);
-        sObjectField65.setRestrictedDelete(false);
-        sObjectField65.setNamePointing(false);
-        sObjectField65.setIdLookup(false);
-        sObjectField65.setType("double");
-        sObjectField65.setSortable(true);
-        sObjectField65.setLength(0);
-        sObjectField65.setPrecision(6);
-        sObjectField65.setByteLength(0);
-        sObjectField65.setQueryByDistance(false);
-        sObjectField65.setFilterable(true);
-        sObjectField65.setUpdateable(true);
-        sObjectField65.setUnique(false);
-        sObjectField65.setAutoNumber(false);
-
-        final SObjectField sObjectField66 = new SObjectField();
-        fields1.add(sObjectField66);
-
-        sObjectField66.setWriteRequiresMasterRead(false);
-        sObjectField66.setNillable(true);
-        sObjectField66.setCreateable(false);
-        sObjectField66.setEncrypted(false);
-        sObjectField66.setDigits("0");
-        sObjectField66.setDependentPicklist(false);
-        sObjectField66.setLabel("Shipping_Location");
-        sObjectField66.setHighScaleNumber(false);
-        sObjectField66.setDisplayLocationInDecimal(false);
-        sObjectField66.setName("Shipping_Location__c");
-        sObjectField66.setHtmlFormatted(false);
-        sObjectField66.setDeprecatedAndHidden(false);
-        sObjectField66.setRestrictedPicklist(false);
-        sObjectField66.setNameField(false);
-        sObjectField66.setCaseSensitive(false);
-        sObjectField66.setPermissionable(true);
-        sObjectField66.setCascadeDelete(false);
-        sObjectField66.setDefaultedOnCreate(false);
-        sObjectField66.setExternalId(false);
-        sObjectField66.setSoapType("urn:location");
-        sObjectField66.setGroupable(false);
-        sObjectField66.setCustom(true);
-        sObjectField66.setScale(0);
-        sObjectField66.setCalculated(false);
-        sObjectField66.setRestrictedDelete(false);
-        sObjectField66.setNamePointing(false);
-        sObjectField66.setIdLookup(false);
-        sObjectField66.setType("location");
-        sObjectField66.setSortable(false);
-        sObjectField66.setLength(0);
-        sObjectField66.setPrecision(0);
-        sObjectField66.setByteLength(0);
-        sObjectField66.setQueryByDistance(false);
-        sObjectField66.setFilterable(false);
-        sObjectField66.setUpdateable(false);
-        sObjectField66.setUnique(false);
-        sObjectField66.setAutoNumber(false);
-
-
-        description.setActivateable(false);
+        description.setLabel("Account");
         description.setLabelPlural("Accounts");
-        description.setUpdateable(true);
-        description.setDeletable(true);
+        description.setName("Account");
+
+        final SObjectDescriptionUrls sObjectDescriptionUrls1 = new SObjectDescriptionUrls();
+        sObjectDescriptionUrls1.setApprovalLayouts("/services/data/v45.0/sobjects/Account/describe/approvalLayouts");
+        sObjectDescriptionUrls1.setCompactLayouts("/services/data/v45.0/sobjects/Account/describe/compactLayouts");
+        sObjectDescriptionUrls1.setDefaultValues("/services/data/v45.0/sobjects/Account/defaultValues?recordTypeId&fields");
+        sObjectDescriptionUrls1.setDescribe("/services/data/v45.0/sobjects/Account/describe");
+        sObjectDescriptionUrls1.setLayouts("/services/data/v45.0/sobjects/Account/describe/layouts");
+        sObjectDescriptionUrls1.setListviews("/services/data/v45.0/sobjects/Account/listviews");
+        sObjectDescriptionUrls1.setQuickActions("/services/data/v45.0/sobjects/Account/quickActions");
+        sObjectDescriptionUrls1.setRowTemplate("/services/data/v45.0/sobjects/Account/{ID}");
+        sObjectDescriptionUrls1.setSobject("/services/data/v45.0/sobjects/Account");
+        sObjectDescriptionUrls1.setUiDetailTemplate("https://customer-flow-8168-dev-ed.cs42.my.salesforce.com/{ID}");
+        sObjectDescriptionUrls1.setUiEditTemplate("https://customer-flow-8168-dev-ed.cs42.my.salesforce.com/{ID}/e");
+        sObjectDescriptionUrls1.setUiNewRecord("https://customer-flow-8168-dev-ed.cs42.my.salesforce.com/001/e");
+        description.setUrls(sObjectDescriptionUrls1);
 
         return description;
     }
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Asset.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Asset.java
index 644a4a3..301b96f 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Asset.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Asset.java
@@ -27,6 +27,10 @@ import org.apache.camel.component.salesforce.api.dto.AbstractSObjectBase;
 @XStreamAlias("Asset")
 public class Asset extends AbstractSObjectBase {
 
+    public Asset() {
+        getAttributes().setType("Asset");
+    }
+
     // ContactId
     private String ContactId;
 
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Contact.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Contact.java
index de43e58..64dada0 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Contact.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Contact.java
@@ -19,7 +19,13 @@ package org.apache.camel.component.salesforce.dto.generated;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 import org.apache.camel.component.salesforce.api.dto.AbstractDescribedSObjectBase;
+import org.apache.camel.component.salesforce.api.dto.Attributes;
 import org.apache.camel.component.salesforce.api.dto.SObjectDescription;
+import org.apache.camel.component.salesforce.api.dto.SObjectDescriptionUrls;
+import org.apache.camel.component.salesforce.api.dto.SObjectField;
+
+import java.util.ArrayList;
+import java.util.List;
 
 // CHECKSTYLE:OFF
 /**
@@ -28,566 +34,706 @@ import org.apache.camel.component.salesforce.api.dto.SObjectDescription;
 @XStreamAlias("Contact")
 public class Contact extends AbstractDescribedSObjectBase {
 
-    private static final SObjectDescription DESCRIPTION = createDescription();
-    // AccountId
-    private String AccountId;
-
-    // AssistantName
-    private String AssistantName;
-
-    // AssistantPhone
-    private String AssistantPhone;
-
-    // Birthdate
-    private java.time.ZonedDateTime Birthdate;
-
-    // Department
-    private String Department;
-
-    // Description
-    private String Description;
+    public Contact() {
+        super();
+        getAttributes().setType("Contact");
+    }
 
-    // Email
-    private String Email;
+    private static final SObjectDescription DESCRIPTION = createSObjectDescription();
 
-    // EmailBouncedDate
-    private java.time.ZonedDateTime EmailBouncedDate;
-
-    // EmailBouncedReason
-    private String EmailBouncedReason;
+    private String MasterRecordId;
 
-    // Fax
-    private String Fax;
+    @JsonProperty("MasterRecordId")
+    public String getMasterRecordId() {
+        return this.MasterRecordId;
+    }
 
-    // FirstName
-    private String FirstName;
+    @JsonProperty("MasterRecordId")
+    public void setMasterRecordId(String MasterRecordId) {
+        this.MasterRecordId = MasterRecordId;
+    }
 
-    // HomePhone
-    private String HomePhone;
+    @XStreamAlias("MasterRecord")
+    private Contact MasterRecord;
 
-    // IsEmailBounced
-    private Boolean IsEmailBounced;
+    @JsonProperty("MasterRecord")
+    public Contact getMasterRecord() {
+        return this.MasterRecord;
+    }
 
-    // Jigsaw
-    private String Jigsaw;
+    @JsonProperty("MasterRecord")
+    public void setMasterRecord(Contact MasterRecord) {
+        this.MasterRecord = MasterRecord;
+    }
+    private String AccountId;
 
-    // JigsawContactId
-    private String JigsawContactId;
+    @JsonProperty("AccountId")
+    public String getAccountId() {
+        return this.AccountId;
+    }
 
-    // Languages__c
-    private String Languages__c;
+    @JsonProperty("AccountId")
+    public void setAccountId(String AccountId) {
+        this.AccountId = AccountId;
+    }
 
-    // LastCURequestDate
-    private java.time.ZonedDateTime LastCURequestDate;
+    @XStreamAlias("Account")
+    private Account Account;
 
-    // LastCUUpdateDate
-    private java.time.ZonedDateTime LastCUUpdateDate;
+    @JsonProperty("Account")
+    public Account getAccount() {
+        return this.Account;
+    }
 
-    // LastName
+    @JsonProperty("Account")
+    public void setAccount(Account Account) {
+        this.Account = Account;
+    }
     private String LastName;
 
-    // MailingAddress
-    private org.apache.camel.component.salesforce.api.dto.Address MailingAddress;
-
-    // MailingCity
-    private String MailingCity;
-
-    // MailingCountry
-    private String MailingCountry;
-
-    // MailingLatitude
-    private Double MailingLatitude;
+    @JsonProperty("LastName")
+    public String getLastName() {
+        return this.LastName;
+    }
 
-    // MailingLongitude
-    private Double MailingLongitude;
+    @JsonProperty("LastName")
+    public void setLastName(String LastName) {
+        this.LastName = LastName;
+    }
 
-    // MailingPostalCode
-    private String MailingPostalCode;
+    private String FirstName;
 
-    // MailingState
-    private String MailingState;
+    @JsonProperty("FirstName")
+    public String getFirstName() {
+        return this.FirstName;
+    }
 
-    // MailingStreet
-    private String MailingStreet;
+    @JsonProperty("FirstName")
+    public void setFirstName(String FirstName) {
+        this.FirstName = FirstName;
+    }
 
-    // MasterRecordId
-    private String MasterRecordId;
+    private String OtherStreet;
 
-    // MobilePhone
-    private String MobilePhone;
+    @JsonProperty("OtherStreet")
+    public String getOtherStreet() {
+        return this.OtherStreet;
+    }
 
-    // OtherAddress
-    private org.apache.camel.component.salesforce.api.dto.Address OtherAddress;
+    @JsonProperty("OtherStreet")
+    public void setOtherStreet(String OtherStreet) {
+        this.OtherStreet = OtherStreet;
+    }
 
-    // OtherCity
     private String OtherCity;
 
-    // OtherCountry
-    private String OtherCountry;
-
-    // OtherLatitude
-    private Double OtherLatitude;
-
-    // OtherLongitude
-    private Double OtherLongitude;
-
-    // OtherPhone
-    private String OtherPhone;
+    @JsonProperty("OtherCity")
+    public String getOtherCity() {
+        return this.OtherCity;
+    }
 
-    // OtherPostalCode
-    private String OtherPostalCode;
+    @JsonProperty("OtherCity")
+    public void setOtherCity(String OtherCity) {
+        this.OtherCity = OtherCity;
+    }
 
-    // OtherState
     private String OtherState;
 
-    // OtherStreet
-    private String OtherStreet;
-
-    // Phone
-    private String Phone;
+    @JsonProperty("OtherState")
+    public String getOtherState() {
+        return this.OtherState;
+    }
 
-    // PhotoUrl
-    private String PhotoUrl;
+    @JsonProperty("OtherState")
+    public void setOtherState(String OtherState) {
+        this.OtherState = OtherState;
+    }
 
-    // ReportsToId
-    private String ReportsToId;
+    private String OtherPostalCode;
 
-    // Title
-    private String Title;
+    @JsonProperty("OtherPostalCode")
+    public String getOtherPostalCode() {
+        return this.OtherPostalCode;
+    }
 
-    private static SObjectDescription createDescription() {
-        final SObjectDescription description = new SObjectDescription();
+    @JsonProperty("OtherPostalCode")
+    public void setOtherPostalCode(String OtherPostalCode) {
+        this.OtherPostalCode = OtherPostalCode;
+    }
 
-        description.setName("Contact");
-        description.setLabelPlural("Contacts");
+    private String OtherCountry;
 
-        return description;
+    @JsonProperty("OtherCountry")
+    public String getOtherCountry() {
+        return this.OtherCountry;
     }
 
-    @Override
-    public SObjectDescription description() {
-        return DESCRIPTION;
+    @JsonProperty("OtherCountry")
+    public void setOtherCountry(String OtherCountry) {
+        this.OtherCountry = OtherCountry;
     }
 
-    @JsonProperty("AccountId")
-    public String getAccountId() {
-        return this.AccountId;
-    }
+    private Double OtherLatitude;
 
-    @JsonProperty("AssistantName")
-    public String getAssistantName() {
-        return this.AssistantName;
+    @JsonProperty("OtherLatitude")
+    public Double getOtherLatitude() {
+        return this.OtherLatitude;
     }
 
-    @JsonProperty("AssistantPhone")
-    public String getAssistantPhone() {
-        return this.AssistantPhone;
+    @JsonProperty("OtherLatitude")
+    public void setOtherLatitude(Double OtherLatitude) {
+        this.OtherLatitude = OtherLatitude;
     }
 
-    @JsonProperty("Birthdate")
-    public java.time.ZonedDateTime getBirthdate() {
-        return this.Birthdate;
-    }
+    private Double OtherLongitude;
 
-    @JsonProperty("Department")
-    public String getDepartment() {
-        return this.Department;
+    @JsonProperty("OtherLongitude")
+    public Double getOtherLongitude() {
+        return this.OtherLongitude;
     }
 
-    @JsonProperty("Description")
-    public String getDescription() {
-        return this.Description;
+    @JsonProperty("OtherLongitude")
+    public void setOtherLongitude(Double OtherLongitude) {
+        this.OtherLongitude = OtherLongitude;
     }
 
-    @JsonProperty("Email")
-    public String getEmail() {
-        return this.Email;
-    }
+    private org.apache.camel.component.salesforce.api.dto.Address OtherAddress;
 
-    @JsonProperty("EmailBouncedDate")
-    public java.time.ZonedDateTime getEmailBouncedDate() {
-        return this.EmailBouncedDate;
+    @JsonProperty("OtherAddress")
+    public org.apache.camel.component.salesforce.api.dto.Address getOtherAddress() {
+        return this.OtherAddress;
     }
 
-    @JsonProperty("EmailBouncedReason")
-    public String getEmailBouncedReason() {
-        return this.EmailBouncedReason;
+    @JsonProperty("OtherAddress")
+    public void setOtherAddress(org.apache.camel.component.salesforce.api.dto.Address OtherAddress) {
+        this.OtherAddress = OtherAddress;
     }
 
-    @JsonProperty("Fax")
-    public String getFax() {
-        return this.Fax;
-    }
+    private String MailingStreet;
 
-    @JsonProperty("FirstName")
-    public String getFirstName() {
-        return this.FirstName;
+    @JsonProperty("MailingStreet")
+    public String getMailingStreet() {
+        return this.MailingStreet;
     }
 
-    @JsonProperty("HomePhone")
-    public String getHomePhone() {
-        return this.HomePhone;
+    @JsonProperty("MailingStreet")
+    public void setMailingStreet(String MailingStreet) {
+        this.MailingStreet = MailingStreet;
     }
 
-    @JsonProperty("IsEmailBounced")
-    public Boolean getIsEmailBounced() {
-        return this.IsEmailBounced;
-    }
+    private String MailingCity;
 
-    @JsonProperty("Jigsaw")
-    public String getJigsaw() {
-        return this.Jigsaw;
+    @JsonProperty("MailingCity")
+    public String getMailingCity() {
+        return this.MailingCity;
     }
 
-    @JsonProperty("JigsawContactId")
-    public String getJigsawContactId() {
-        return this.JigsawContactId;
+    @JsonProperty("MailingCity")
+    public void setMailingCity(String MailingCity) {
+        this.MailingCity = MailingCity;
     }
 
-    @JsonProperty("Languages__c")
-    public String getLanguages__c() {
-        return this.Languages__c;
-    }
+    private String MailingState;
 
-    @JsonProperty("LastCURequestDate")
-    public java.time.ZonedDateTime getLastCURequestDate() {
-        return this.LastCURequestDate;
+    @JsonProperty("MailingState")
+    public String getMailingState() {
+        return this.MailingState;
     }
 
-    @JsonProperty("LastCUUpdateDate")
-    public java.time.ZonedDateTime getLastCUUpdateDate() {
-        return this.LastCUUpdateDate;
+    @JsonProperty("MailingState")
+    public void setMailingState(String MailingState) {
+        this.MailingState = MailingState;
     }
 
-    @JsonProperty("LastName")
-    public String getLastName() {
-        return this.LastName;
-    }
+    private String MailingPostalCode;
 
-    @JsonProperty("MailingAddress")
-    public org.apache.camel.component.salesforce.api.dto.Address getMailingAddress() {
-        return this.MailingAddress;
+    @JsonProperty("MailingPostalCode")
+    public String getMailingPostalCode() {
+        return this.MailingPostalCode;
     }
 
-    @JsonProperty("MailingCity")
-    public String getMailingCity() {
-        return this.MailingCity;
+    @JsonProperty("MailingPostalCode")
+    public void setMailingPostalCode(String MailingPostalCode) {
+        this.MailingPostalCode = MailingPostalCode;
     }
 
+    private String MailingCountry;
+
     @JsonProperty("MailingCountry")
     public String getMailingCountry() {
         return this.MailingCountry;
     }
 
+    @JsonProperty("MailingCountry")
+    public void setMailingCountry(String MailingCountry) {
+        this.MailingCountry = MailingCountry;
+    }
+
+    private Double MailingLatitude;
+
     @JsonProperty("MailingLatitude")
     public Double getMailingLatitude() {
         return this.MailingLatitude;
     }
 
+    @JsonProperty("MailingLatitude")
+    public void setMailingLatitude(Double MailingLatitude) {
+        this.MailingLatitude = MailingLatitude;
+    }
+
+    private Double MailingLongitude;
+
     @JsonProperty("MailingLongitude")
     public Double getMailingLongitude() {
         return this.MailingLongitude;
     }
 
-    @JsonProperty("MailingPostalCode")
-    public String getMailingPostalCode() {
-        return this.MailingPostalCode;
+    @JsonProperty("MailingLongitude")
+    public void setMailingLongitude(Double MailingLongitude) {
+        this.MailingLongitude = MailingLongitude;
     }
 
-    @JsonProperty("MailingState")
-    public String getMailingState() {
-        return this.MailingState;
+    private org.apache.camel.component.salesforce.api.dto.Address MailingAddress;
+
+    @JsonProperty("MailingAddress")
+    public org.apache.camel.component.salesforce.api.dto.Address getMailingAddress() {
+        return this.MailingAddress;
     }
 
-    @JsonProperty("MailingStreet")
-    public String getMailingStreet() {
-        return this.MailingStreet;
+    @JsonProperty("MailingAddress")
+    public void setMailingAddress(org.apache.camel.component.salesforce.api.dto.Address MailingAddress) {
+        this.MailingAddress = MailingAddress;
+    }
+
+    private String Phone;
+
+    @JsonProperty("Phone")
+    public String getPhone() {
+        return this.Phone;
+    }
+
+    @JsonProperty("Phone")
+    public void setPhone(String Phone) {
+        this.Phone = Phone;
+    }
+
+    private String Fax;
+
+    @JsonProperty("Fax")
+    public String getFax() {
+        return this.Fax;
     }
 
-    @JsonProperty("MasterRecordId")
-    public String getMasterRecordId() {
-        return this.MasterRecordId;
+    @JsonProperty("Fax")
+    public void setFax(String Fax) {
+        this.Fax = Fax;
     }
 
+    private String MobilePhone;
+
     @JsonProperty("MobilePhone")
     public String getMobilePhone() {
         return this.MobilePhone;
     }
 
-    @JsonProperty("OtherAddress")
-    public org.apache.camel.component.salesforce.api.dto.Address getOtherAddress() {
-        return this.OtherAddress;
+    @JsonProperty("MobilePhone")
+    public void setMobilePhone(String MobilePhone) {
+        this.MobilePhone = MobilePhone;
     }
 
-    @JsonProperty("OtherCity")
-    public String getOtherCity() {
-        return this.OtherCity;
-    }
+    private String HomePhone;
 
-    @JsonProperty("OtherCountry")
-    public String getOtherCountry() {
-        return this.OtherCountry;
+    @JsonProperty("HomePhone")
+    public String getHomePhone() {
+        return this.HomePhone;
     }
 
-    @JsonProperty("OtherLatitude")
-    public Double getOtherLatitude() {
-        return this.OtherLatitude;
+    @JsonProperty("HomePhone")
+    public void setHomePhone(String HomePhone) {
+        this.HomePhone = HomePhone;
     }
 
-    @JsonProperty("OtherLongitude")
-    public Double getOtherLongitude() {
-        return this.OtherLongitude;
-    }
+    private String OtherPhone;
 
     @JsonProperty("OtherPhone")
     public String getOtherPhone() {
         return this.OtherPhone;
     }
 
-    @JsonProperty("OtherPostalCode")
-    public String getOtherPostalCode() {
-        return this.OtherPostalCode;
+    @JsonProperty("OtherPhone")
+    public void setOtherPhone(String OtherPhone) {
+        this.OtherPhone = OtherPhone;
     }
 
-    @JsonProperty("OtherState")
-    public String getOtherState() {
-        return this.OtherState;
-    }
+    private String AssistantPhone;
 
-    @JsonProperty("OtherStreet")
-    public String getOtherStreet() {
-        return this.OtherStreet;
+    @JsonProperty("AssistantPhone")
+    public String getAssistantPhone() {
+        return this.AssistantPhone;
     }
 
-    @JsonProperty("Phone")
-    public String getPhone() {
-        return this.Phone;
+    @JsonProperty("AssistantPhone")
+    public void setAssistantPhone(String AssistantPhone) {
+        this.AssistantPhone = AssistantPhone;
     }
 
-    @JsonProperty("PhotoUrl")
-    public String getPhotoUrl() {
-        return this.PhotoUrl;
-    }
+    private String ReportsToId;
 
     @JsonProperty("ReportsToId")
     public String getReportsToId() {
         return this.ReportsToId;
     }
 
-    @JsonProperty("Title")
-    public String getTitle() {
-        return this.Title;
+    @JsonProperty("ReportsToId")
+    public void setReportsToId(String ReportsToId) {
+        this.ReportsToId = ReportsToId;
     }
 
-    @JsonProperty("AccountId")
-    public void setAccountId(final String AccountId) {
-        this.AccountId = AccountId;
-    }
+    @XStreamAlias("ReportsTo")
+    private Contact ReportsTo;
 
-    @JsonProperty("AssistantName")
-    public void setAssistantName(final String AssistantName) {
-        this.AssistantName = AssistantName;
+    @JsonProperty("ReportsTo")
+    public Contact getReportsTo() {
+        return this.ReportsTo;
     }
 
-    @JsonProperty("AssistantPhone")
-    public void setAssistantPhone(final String AssistantPhone) {
-        this.AssistantPhone = AssistantPhone;
+    @JsonProperty("ReportsTo")
+    public void setReportsTo(Contact ReportsTo) {
+        this.ReportsTo = ReportsTo;
     }
+    private String Email;
 
-    @JsonProperty("Birthdate")
-    public void setBirthdate(final java.time.ZonedDateTime Birthdate) {
-        this.Birthdate = Birthdate;
+    @JsonProperty("Email")
+    public String getEmail() {
+        return this.Email;
     }
 
-    @JsonProperty("Department")
-    public void setDepartment(final String Department) {
-        this.Department = Department;
+    @JsonProperty("Email")
+    public void setEmail(String Email) {
+        this.Email = Email;
     }
 
-    @JsonProperty("Description")
-    public void setDescription(final String Description) {
-        this.Description = Description;
+    private String Title;
+
+    @JsonProperty("Title")
+    public String getTitle() {
+        return this.Title;
     }
 
-    @JsonProperty("Email")
-    public void setEmail(final String Email) {
-        this.Email = Email;
+    @JsonProperty("Title")
+    public void setTitle(String Title) {
+        this.Title = Title;
     }
 
-    @JsonProperty("EmailBouncedDate")
-    public void setEmailBouncedDate(final java.time.ZonedDateTime EmailBouncedDate) {
-        this.EmailBouncedDate = EmailBouncedDate;
+    private String Department;
+
+    @JsonProperty("Department")
+    public String getDepartment() {
+        return this.Department;
     }
 
-    @JsonProperty("EmailBouncedReason")
-    public void setEmailBouncedReason(final String EmailBouncedReason) {
-        this.EmailBouncedReason = EmailBouncedReason;
+    @JsonProperty("Department")
+    public void setDepartment(String Department) {
+        this.Department = Department;
     }
 
-    @JsonProperty("Fax")
-    public void setFax(final String Fax) {
-        this.Fax = Fax;
+    private String AssistantName;
+
+    @JsonProperty("AssistantName")
+    public String getAssistantName() {
+        return this.AssistantName;
     }
 
-    @JsonProperty("FirstName")
-    public void setFirstName(final String FirstName) {
-        this.FirstName = FirstName;
+    @JsonProperty("AssistantName")
+    public void setAssistantName(String AssistantName) {
+        this.AssistantName = AssistantName;
     }
 
-    @JsonProperty("HomePhone")
-    public void setHomePhone(final String HomePhone) {
-        this.HomePhone = HomePhone;
+    private java.time.LocalDate Birthdate;
+
+    @JsonProperty("Birthdate")
+    public java.time.LocalDate getBirthdate() {
+        return this.Birthdate;
     }
 
-    @JsonProperty("IsEmailBounced")
-    public void setIsEmailBounced(final Boolean IsEmailBounced) {
-        this.IsEmailBounced = IsEmailBounced;
+    @JsonProperty("Birthdate")
+    public void setBirthdate(java.time.LocalDate Birthdate) {
+        this.Birthdate = Birthdate;
     }
 
-    @JsonProperty("Jigsaw")
-    public void setJigsaw(final String Jigsaw) {
-        this.Jigsaw = Jigsaw;
+    private String Description;
+
+    @JsonProperty("Description")
+    public String getDescription() {
+        return this.Description;
     }
 
-    @JsonProperty("JigsawContactId")
-    public void setJigsawContactId(final String JigsawContactId) {
-        this.JigsawContactId = JigsawContactId;
+    @JsonProperty("Description")
+    public void setDescription(String Description) {
+        this.Description = Description;
     }
 
-    @JsonProperty("Languages__c")
-    public void setLanguages__c(final String Languages__c) {
-        this.Languages__c = Languages__c;
+    private java.time.ZonedDateTime LastCURequestDate;
+
+    @JsonProperty("LastCURequestDate")
+    public java.time.ZonedDateTime getLastCURequestDate() {
+        return this.LastCURequestDate;
     }
 
     @JsonProperty("LastCURequestDate")
-    public void setLastCURequestDate(final java.time.ZonedDateTime LastCURequestDate) {
+    public void setLastCURequestDate(java.time.ZonedDateTime LastCURequestDate) {
         this.LastCURequestDate = LastCURequestDate;
     }
 
+    private java.time.ZonedDateTime LastCUUpdateDate;
+
     @JsonProperty("LastCUUpdateDate")
-    public void setLastCUUpdateDate(final java.time.ZonedDateTime LastCUUpdateDate) {
-        this.LastCUUpdateDate = LastCUUpdateDate;
+    public java.time.ZonedDateTime getLastCUUpdateDate() {
+        return this.LastCUUpdateDate;
     }
 
-    @JsonProperty("LastName")
-    public void setLastName(final String LastName) {
-        this.LastName = LastName;
+    @JsonProperty("LastCUUpdateDate")
+    public void setLastCUUpdateDate(java.time.ZonedDateTime LastCUUpdateDate) {
+        this.LastCUUpdateDate = LastCUUpdateDate;
     }
 
-    @JsonProperty("MailingAddress")
-    public void setMailingAddress(final org.apache.camel.component.salesforce.api.dto.Address MailingAddress) {
-        this.MailingAddress = MailingAddress;
-    }
+    private String EmailBouncedReason;
 
-    @JsonProperty("MailingCity")
-    public void setMailingCity(final String MailingCity) {
-        this.MailingCity = MailingCity;
+    @JsonProperty("EmailBouncedReason")
+    public String getEmailBouncedReason() {
+        return this.EmailBouncedReason;
     }
 
-    @JsonProperty("MailingCountry")
-    public void setMailingCountry(final String MailingCountry) {
-        this.MailingCountry = MailingCountry;
+    @JsonProperty("EmailBouncedReason")
+    public void setEmailBouncedReason(String EmailBouncedReason) {
+        this.EmailBouncedReason = EmailBouncedReason;
     }
 
-    @JsonProperty("MailingLatitude")
-    public void setMailingLatitude(final Double MailingLatitude) {
-        this.MailingLatitude = MailingLatitude;
-    }
+    private java.time.ZonedDateTime EmailBouncedDate;
 
-    @JsonProperty("MailingLongitude")
-    public void setMailingLongitude(final Double MailingLongitude) {
-        this.MailingLongitude = MailingLongitude;
+    @JsonProperty("EmailBouncedDate")
+    public java.time.ZonedDateTime getEmailBouncedDate() {
+        return this.EmailBouncedDate;
     }
 
-    @JsonProperty("MailingPostalCode")
-    public void setMailingPostalCode(final String MailingPostalCode) {
-        this.MailingPostalCode = MailingPostalCode;
+    @JsonProperty("EmailBouncedDate")
+    public void setEmailBouncedDate(java.time.ZonedDateTime EmailBouncedDate) {
+        this.EmailBouncedDate = EmailBouncedDate;
     }
 
-    @JsonProperty("MailingState")
-    public void setMailingState(final String MailingState) {
-        this.MailingState = MailingState;
-    }
+    private Boolean IsEmailBounced;
 
-    @JsonProperty("MailingStreet")
-    public void setMailingStreet(final String MailingStreet) {
-        this.MailingStreet = MailingStreet;
+    @JsonProperty("IsEmailBounced")
+    public Boolean getIsEmailBounced() {
+        return this.IsEmailBounced;
     }
 
-    @JsonProperty("MasterRecordId")
-    public void setMasterRecordId(final String MasterRecordId) {
-        this.MasterRecordId = MasterRecordId;
+    @JsonProperty("IsEmailBounced")
+    public void setIsEmailBounced(Boolean IsEmailBounced) {
+        this.IsEmailBounced = IsEmailBounced;
     }
 
-    @JsonProperty("MobilePhone")
-    public void setMobilePhone(final String MobilePhone) {
-        this.MobilePhone = MobilePhone;
-    }
+    private String PhotoUrl;
 
-    @JsonProperty("OtherAddress")
-    public void setOtherAddress(final org.apache.camel.component.salesforce.api.dto.Address OtherAddress) {
-        this.OtherAddress = OtherAddress;
+    @JsonProperty("PhotoUrl")
+    public String getPhotoUrl() {
+        return this.PhotoUrl;
     }
 
-    @JsonProperty("OtherCity")
-    public void setOtherCity(final String OtherCity) {
-        this.OtherCity = OtherCity;
+    @JsonProperty("PhotoUrl")
+    public void setPhotoUrl(String PhotoUrl) {
+        this.PhotoUrl = PhotoUrl;
     }
 
-    @JsonProperty("OtherCountry")
-    public void setOtherCountry(final String OtherCountry) {
-        this.OtherCountry = OtherCountry;
-    }
+    private String Jigsaw;
 
-    @JsonProperty("OtherLatitude")
-    public void setOtherLatitude(final Double OtherLatitude) {
-        this.OtherLatitude = OtherLatitude;
+    @JsonProperty("Jigsaw")
+    public String getJigsaw() {
+        return this.Jigsaw;
     }
 
-    @JsonProperty("OtherLongitude")
-    public void setOtherLongitude(final Double OtherLongitude) {
-        this.OtherLongitude = OtherLongitude;
+    @JsonProperty("Jigsaw")
+    public void setJigsaw(String Jigsaw) {
+        this.Jigsaw = Jigsaw;
     }
 
-    @JsonProperty("OtherPhone")
-    public void setOtherPhone(final String OtherPhone) {
-        this.OtherPhone = OtherPhone;
-    }
+    private String JigsawContactId;
 
-    @JsonProperty("OtherPostalCode")
-    public void setOtherPostalCode(final String OtherPostalCode) {
-        this.OtherPostalCode = OtherPostalCode;
+    @JsonProperty("JigsawContactId")
+    public String getJigsawContactId() {
+        return this.JigsawContactId;
     }
 
-    @JsonProperty("OtherState")
-    public void setOtherState(final String OtherState) {
-        this.OtherState = OtherState;
+    @JsonProperty("JigsawContactId")
+    public void setJigsawContactId(String JigsawContactId) {
+        this.JigsawContactId = JigsawContactId;
     }
 
-    @JsonProperty("OtherStreet")
-    public void setOtherStreet(final String OtherStreet) {
-        this.OtherStreet = OtherStreet;
-    }
+    private String External_Id__c;
 
-    @JsonProperty("Phone")
-    public void setPhone(final String Phone) {
-        this.Phone = Phone;
+    @JsonProperty("External_Id__c")
+    public String getExternal_Id__c() {
+        return this.External_Id__c;
     }
 
-    @JsonProperty("PhotoUrl")
-    public void setPhotoUrl(final String PhotoUrl) {
-        this.PhotoUrl = PhotoUrl;
+    @JsonProperty("External_Id__c")
+    public void setExternal_Id__c(String External_Id__c) {
+        this.External_Id__c = External_Id__c;
     }
 
-    @JsonProperty("ReportsToId")
-    public void setReportsToId(final String ReportsToId) {
-        this.ReportsToId = ReportsToId;
+    @Override
+    public final SObjectDescription description() {
+        return DESCRIPTION;
     }
 
-    @JsonProperty("Title")
-    public void setTitle(final String Title) {
-        this.Title = Title;
-    }
+    private static SObjectDescription createSObjectDescription() {
+        final SObjectDescription description = new SObjectDescription();
+
 
+
+        final List<SObjectField> fields1 = new ArrayList<>();
+        description.setFields(fields1);
+
+        final SObjectField sObjectField1 = createField("Id", "Contact ID", "id", "tns:ID", 18, false, false, false, false, false, false, true);
+        fields1.add(sObjectField1);
+        final SObjectField sObjectField2 = createField("IsDeleted", "Deleted", "boolean", "xsd:boolean", 0, false, false, false, false, false, false, false);
+        fields1.add(sObjectField2);
+        final SObjectField sObjectField3 = createField("MasterRecordId", "Master Record ID", "reference", "tns:ID", 18, false, true, false, false, false, false, false);
+        fields1.add(sObjectField3);
+        final SObjectField sObjectField4 = createField("AccountId", "Account ID", "reference", "tns:ID", 18, false, true, false, false, false, false, false);
+        fields1.add(sObjectField4);
+        final SObjectField sObjectField5 = createField("LastName", "Last Name", "string", "xsd:string", 80, false, false, false, false, false, false, false);
+        fields1.add(sObjectField5);
+        final SObjectField sObjectField6 = createField("FirstName", "First Name", "string", "xsd:string", 40, false, true, false, false, false, false, false);
+        fields1.add(sObjectField6);
+        final SObjectField sObjectField7 = createField("Salutation", "Salutation", "picklist", "xsd:string", 40, false, true, false, false, false, false, false);
+        fields1.add(sObjectField7);
+        final SObjectField sObjectField8 = createField("Name", "Full Name", "string", "xsd:string", 121, false, false, true, false, false, false, false);
+        fields1.add(sObjectField8);
+        final SObjectField sObjectField9 = createField("OtherStreet", "Other Street", "textarea", "xsd:string", 255, false, true, false, false, false, false, false);
+        fields1.add(sObjectField9);
+        final SObjectField sObjectField10 = createField("OtherCity", "Other City", "string", "xsd:string", 40, false, true, false, false, false, false, false);
+        fields1.add(sObjectField10);
+        final SObjectField sObjectField11 = createField("OtherState", "Other State/Province", "string", "xsd:string", 80, false, true, false, false, false, false, false);
+        fields1.add(sObjectField11);
+        final SObjectField sObjectField12 = createField("OtherPostalCode", "Other Zip/Postal Code", "string", "xsd:string", 20, false, true, false, false, false, false, false);
+        fields1.add(sObjectField12);
+        final SObjectField sObjectField13 = createField("OtherCountry", "Other Country", "string", "xsd:string", 80, false, true, false, false, false, false, false);
+        fields1.add(sObjectField13);
+        final SObjectField sObjectField14 = createField("OtherLatitude", "Other Latitude", "double", "xsd:double", 0, false, true, false, false, false, false, false);
+        fields1.add(sObjectField14);
+        final SObjectField sObjectField15 = createField("OtherLongitude", "Other Longitude", "double", "xsd:double", 0, false, true, false, false, false, false, false);
+        fields1.add(sObjectField15);
+        final SObjectField sObjectField16 = createField("OtherGeocodeAccuracy", "Other Geocode Accuracy", "picklist", "xsd:string", 40, false, true, false, false, false, false, false);
+        fields1.add(sObjectField16);
+        final SObjectField sObjectField17 = createField("OtherAddress", "Other Address", "address", "urn:address", 0, false, true, false, false, false, false, false);
+        fields1.add(sObjectField17);
+        final SObjectField sObjectField18 = createField("MailingStreet", "Mailing Street", "textarea", "xsd:string", 255, false, true, false, false, false, false, false);
+        fields1.add(sObjectField18);
+        final SObjectField sObjectField19 = createField("MailingCity", "Mailing City", "string", "xsd:string", 40, false, true, false, false, false, false, false);
+        fields1.add(sObjectField19);
+        final SObjectField sObjectField20 = createField("MailingState", "Mailing State/Province", "string", "xsd:string", 80, false, true, false, false, false, false, false);
+        fields1.add(sObjectField20);
+        final SObjectField sObjectField21 = createField("MailingPostalCode", "Mailing Zip/Postal Code", "string", "xsd:string", 20, false, true, false, false, false, false, false);
+        fields1.add(sObjectField21);
+        final SObjectField sObjectField22 = createField("MailingCountry", "Mailing Country", "string", "xsd:string", 80, false, true, false, false, false, false, false);
+        fields1.add(sObjectField22);
+        final SObjectField sObjectField23 = createField("MailingLatitude", "Mailing Latitude", "double", "xsd:double", 0, false, true, false, false, false, false, false);
+        fields1.add(sObjectField23);
+        final SObjectField sObjectField24 = createField("MailingLongitude", "Mailing Longitude", "double", "xsd:double", 0, false, true, false, false, false, false, false);
+        fields1.add(sObjectField24);
+        final SObjectField sObjectField25 = createField("MailingGeocodeAccuracy", "Mailing Geocode Accuracy", "picklist", "xsd:string", 40, false, true, false, false, false, false, false);
+        fields1.add(sObjectField25);
+        final SObjectField sObjectField26 = createField("MailingAddress", "Mailing Address", "address", "urn:address", 0, false, true, false, false, false, false, false);
+        fields1.add(sObjectField26);
+        final SObjectField sObjectField27 = createField("Phone", "Business Phone", "phone", "xsd:string", 40, false, true, false, false, false, false, false);
+        fields1.add(sObjectField27);
+        final SObjectField sObjectField28 = createField("Fax", "Business Fax", "phone", "xsd:string", 40, false, true, false, false, false, false, false);
+        fields1.add(sObjectField28);
+        final SObjectField sObjectField29 = createField("MobilePhone", "Mobile Phone", "phone", "xsd:string", 40, false, true, false, false, false, false, false);
+        fields1.add(sObjectField29);
+        final SObjectField sObjectField30 = createField("HomePhone", "Home Phone", "phone", "xsd:string", 40, false, true, false, false, false, false, false);
+        fields1.add(sObjectField30);
+        final SObjectField sObjectField31 = createField("OtherPhone", "Other Phone", "phone", "xsd:string", 40, false, true, false, false, false, false, false);
+        fields1.add(sObjectField31);
+        final SObjectField sObjectField32 = createField("AssistantPhone", "Asst. Phone", "phone", "xsd:string", 40, false, true, false, false, false, false, false);
+        fields1.add(sObjectField32);
+        final SObjectField sObjectField33 = createField("ReportsToId", "Reports To ID", "reference", "tns:ID", 18, false, true, false, false, false, false, false);
+        fields1.add(sObjectField33);
+        final SObjectField sObjectField34 = createField("Email", "Email", "email", "xsd:string", 80, false, true, false, false, false, false, true);
+        fields1.add(sObjectField34);
+        final SObjectField sObjectField35 = createField("Title", "Title", "string", "xsd:string", 128, false, true, false, false, false, false, false);
+        fields1.add(sObjectField35);
+        final SObjectField sObjectField36 = createField("Department", "Department", "string", "xsd:string", 80, false, true, false, false, false, false, false);
+        fields1.add(sObjectField36);
+        final SObjectField sObjectField37 = createField("AssistantName", "Assistant's Name", "string", "xsd:string", 40, false, true, false, false, false, false, false);
+        fields1.add(sObjectField37);
+        final SObjectField sObjectField38 = createField("LeadSource", "Lead Source", "picklist", "xsd:string", 40, false, true, false, false, false, false, false);
+        fields1.add(sObjectField38);
+        final SObjectField sObjectField39 = createField("Birthdate", "Birthdate", "date", "xsd:date", 0, false, true, false, false, false, false, false);
+        fields1.add(sObjectField39);
+        final SObjectField sObjectField40 = createField("Description", "Contact Description", "textarea", "xsd:string", 32000, false, true, false, false, false, false, false);
+        fields1.add(sObjectField40);
+        final SObjectField sObjectField41 = createField("OwnerId", "Owner ID", "reference", "tns:ID", 18, false, false, false, false, false, false, false);
+        fields1.add(sObjectField41);
+        final SObjectField sObjectField42 = createField("CreatedDate", "Created Date", "datetime", "xsd:dateTime", 0, false, false, false, false, false, false, false);
+        fields1.add(sObjectField42);
+        final SObjectField sObjectField43 = createField("CreatedById", "Created By ID", "reference", "tns:ID", 18, false, false, false, false, false, false, false);
+        fields1.add(sObjectField43);
+        final SObjectField sObjectField44 = createField("LastModifiedDate", "Last Modified Date", "datetime", "xsd:dateTime", 0, false, false, false, false, false, false, false);
+        fields1.add(sObjectField44);
+        final SObjectField sObjectField45 = createField("LastModifiedById", "Last Modified By ID", "reference", "tns:ID", 18, false, false, false, false, false, false, false);
+        fields1.add(sObjectField45);
+        final SObjectField sObjectField46 = createField("SystemModstamp", "System Modstamp", "datetime", "xsd:dateTime", 0, false, false, false, false, false, false, false);
+        fields1.add(sObjectField46);
+        final SObjectField sObjectField47 = createField("LastActivityDate", "Last Activity", "date", "xsd:date", 0, false, true, false, false, false, false, false);
+        fields1.add(sObjectField47);
+        final SObjectField sObjectField48 = createField("LastCURequestDate", "Last Stay-in-Touch Request Date", "datetime", "xsd:dateTime", 0, false, true, false, false, false, false, false);
+        fields1.add(sObjectField48);
+        final SObjectField sObjectField49 = createField("LastCUUpdateDate", "Last Stay-in-Touch Save Date", "datetime", "xsd:dateTime", 0, false, true, false, false, false, false, false);
+        fields1.add(sObjectField49);
+        final SObjectField sObjectField50 = createField("LastViewedDate", "Last Viewed Date", "datetime", "xsd:dateTime", 0, false, true, false, false, false, false, false);
+        fields1.add(sObjectField50);
+        final SObjectField sObjectField51 = createField("LastReferencedDate", "Last Referenced Date", "datetime", "xsd:dateTime", 0, false, true, false, false, false, false, false);
+        fields1.add(sObjectField51);
+        final SObjectField sObjectField52 = createField("EmailBouncedReason", "Email Bounced Reason", "string", "xsd:string", 255, false, true, false, false, false, false, false);
+        fields1.add(sObjectField52);
+        final SObjectField sObjectField53 = createField("EmailBouncedDate", "Email Bounced Date", "datetime", "xsd:dateTime", 0, false, true, false, false, false, false, false);
+        fields1.add(sObjectField53);
+        final SObjectField sObjectField54 = createField("IsEmailBounced", "Is Email Bounced", "boolean", "xsd:boolean", 0, false, false, false, false, false, false, false);
+        fields1.add(sObjectField54);
+        final SObjectField sObjectField55 = createField("PhotoUrl", "Photo URL", "url", "xsd:string", 255, false, true, false, false, false, false, false);
+        fields1.add(sObjectField55);
+        final SObjectField sObjectField56 = createField("Jigsaw", "Data.com Key", "string", "xsd:string", 20, false, true, false, false, false, false, false);
+        fields1.add(sObjectField56);
+        final SObjectField sObjectField57 = createField("JigsawContactId", "Jigsaw Contact ID", "string", "xsd:string", 20, false, true, false, false, false, false, false);
+        fields1.add(sObjectField57);
+        final SObjectField sObjectField58 = createField("CleanStatus", "Clean Status", "picklist", "xsd:string", 40, false, true, false, false, false, false, false);
+        fields1.add(sObjectField58);
+        final SObjectField sObjectField59 = createField("External_Id__c", "External Id", "string", "xsd:string", 255, true, true, false, true, true, false, true);
+        fields1.add(sObjectField59);
+
+        description.setLabel("Contact");
+        description.setLabelPlural("Contacts");
+        description.setName("Contact");
+
+        final SObjectDescriptionUrls sObjectDescriptionUrls1 = new SObjectDescriptionUrls();
+        sObjectDescriptionUrls1.setApprovalLayouts("/services/data/v45.0/sobjects/Contact/describe/approvalLayouts");
+        sObjectDescriptionUrls1.setCompactLayouts("/services/data/v45.0/sobjects/Contact/describe/compactLayouts");
+        sObjectDescriptionUrls1.setDefaultValues("/services/data/v45.0/sobjects/Contact/defaultValues?recordTypeId&fields");
+        sObjectDescriptionUrls1.setDescribe("/services/data/v45.0/sobjects/Contact/describe");
+        sObjectDescriptionUrls1.setLayouts("/services/data/v45.0/sobjects/Contact/describe/layouts");
+        sObjectDescriptionUrls1.setListviews("/services/data/v45.0/sobjects/Contact/listviews");
+        sObjectDescriptionUrls1.setQuickActions("/services/data/v45.0/sobjects/Contact/quickActions");
+        sObjectDescriptionUrls1.setRowTemplate("/services/data/v45.0/sobjects/Contact/{ID}");
+        sObjectDescriptionUrls1.setSobject("/services/data/v45.0/sobjects/Contact");
+        sObjectDescriptionUrls1.setUiDetailTemplate("https://customer-flow-8168-dev-ed.cs42.my.salesforce.com/{ID}");
+        sObjectDescriptionUrls1.setUiEditTemplate("https://customer-flow-8168-dev-ed.cs42.my.salesforce.com/{ID}/e");
+        sObjectDescriptionUrls1.setUiNewRecord("https://customer-flow-8168-dev-ed.cs42.my.salesforce.com/003/e");
+        description.setUrls(sObjectDescriptionUrls1);
+
+        return description;
+    }
 }
+
 // CHECKSTYLE:ON
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Document.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Document.java
index 4b32b45..43a4744 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Document.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Document.java
@@ -19,16 +19,31 @@ package org.apache.camel.component.salesforce.dto.generated;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 
+import org.apache.camel.component.salesforce.api.dto.AbstractDescribedSObjectBase;
 import org.apache.camel.component.salesforce.api.dto.AbstractSObjectBase;
+import org.apache.camel.component.salesforce.api.dto.Attributes;
+import org.apache.camel.component.salesforce.api.dto.SObjectDescription;
+import org.apache.camel.component.salesforce.api.dto.SObjectDescriptionUrls;
+import org.apache.camel.component.salesforce.api.dto.SObjectField;
+
+import java.util.ArrayList;
+import java.util.List;
 
 //CHECKSTYLE:OFF
 /**
  * Salesforce DTO for SObject Document
  */
 @XStreamAlias("Document")
-public class Document extends AbstractSObjectBase {
+public class Document extends AbstractDescribedSObjectBase {
+
+    public Document() {
+        Attributes attributes = new Attributes();
+        attributes.setType("Document");
+        setAttributes(attributes);
+    }
+
+    private static final SObjectDescription DESCRIPTION = createSObjectDescription();
 
-    // FolderId
     private String FolderId;
 
     @JsonProperty("FolderId")
@@ -41,7 +56,6 @@ public class Document extends AbstractSObjectBase {
         this.FolderId = FolderId;
     }
 
-    // DeveloperName
     private String DeveloperName;
 
     @JsonProperty("DeveloperName")
@@ -54,7 +68,6 @@ public class Document extends AbstractSObjectBase {
         this.DeveloperName = DeveloperName;
     }
 
-    // NamespacePrefix
     private String NamespacePrefix;
 
     @JsonProperty("NamespacePrefix")
@@ -67,7 +80,6 @@ public class Document extends AbstractSObjectBase {
         this.NamespacePrefix = NamespacePrefix;
     }
 
-    // ContentType
     private String ContentType;
 
     @JsonProperty("ContentType")
@@ -80,7 +92,6 @@ public class Document extends AbstractSObjectBase {
         this.ContentType = ContentType;
     }
 
-    // Type
     private String Type;
 
     @JsonProperty("Type")
@@ -93,7 +104,6 @@ public class Document extends AbstractSObjectBase {
         this.Type = Type;
     }
 
-    // IsPublic
     private Boolean IsPublic;
 
     @JsonProperty("IsPublic")
@@ -106,7 +116,6 @@ public class Document extends AbstractSObjectBase {
         this.IsPublic = IsPublic;
     }
 
-    // BodyLength
     private Integer BodyLength;
 
     @JsonProperty("BodyLength")
@@ -119,7 +128,6 @@ public class Document extends AbstractSObjectBase {
         this.BodyLength = BodyLength;
     }
 
-    // Body
     // blob field url, use getBlobField to get the content
     @XStreamAlias("Body")
     private String BodyUrl;
@@ -134,7 +142,6 @@ public class Document extends AbstractSObjectBase {
         this.BodyUrl = BodyUrl;
     }
 
-    // Url
     private String Url;
 
     @JsonProperty("Url")
@@ -147,7 +154,6 @@ public class Document extends AbstractSObjectBase {
         this.Url = Url;
     }
 
-    // Description
     private String Description;
 
     @JsonProperty("Description")
@@ -160,7 +166,6 @@ public class Document extends AbstractSObjectBase {
         this.Description = Description;
     }
 
-    // Keywords
     private String Keywords;
 
     @JsonProperty("Keywords")
@@ -173,7 +178,6 @@ public class Document extends AbstractSObjectBase {
         this.Keywords = Keywords;
     }
 
-    // IsInternalUseOnly
     private Boolean IsInternalUseOnly;
 
     @JsonProperty("IsInternalUseOnly")
@@ -186,7 +190,6 @@ public class Document extends AbstractSObjectBase {
         this.IsInternalUseOnly = IsInternalUseOnly;
     }
 
-    // AuthorId
     private String AuthorId;
 
     @JsonProperty("AuthorId")
@@ -199,7 +202,6 @@ public class Document extends AbstractSObjectBase {
         this.AuthorId = AuthorId;
     }
 
-    // IsBodySearchable
     private Boolean IsBodySearchable;
 
     @JsonProperty("IsBodySearchable")
@@ -212,5 +214,83 @@ public class Document extends AbstractSObjectBase {
         this.IsBodySearchable = IsBodySearchable;
     }
 
+
+
+    @Override
+    public final SObjectDescription description() {
+        return DESCRIPTION;
+    }
+
+    private static SObjectDescription createSObjectDescription() {
+        final SObjectDescription description = new SObjectDescription();
+
+
+
+        final List<SObjectField> fields1 = new ArrayList<>();
+        description.setFields(fields1);
+
+        final SObjectField sObjectField1 = createField("Id", "Document ID", "id", "tns:ID", 18, false, false, false, false, false, false, true);
+        fields1.add(sObjectField1);
+        final SObjectField sObjectField2 = createField("FolderId", "Folder ID", "reference", "tns:ID", 18, false, false, false, false, false, false, false);
+        fields1.add(sObjectField2);
+        final SObjectField sObjectField3 = createField("IsDeleted", "Deleted", "boolean", "xsd:boolean", 0, false, false, false, false, false, false, false);
+        fields1.add(sObjectField3);
+        final SObjectField sObjectField4 = createField("Name", "Document Name", "string", "xsd:string", 255, false, false, true, false, false, false, true);
+        fields1.add(sObjectField4);
+        final SObjectField sObjectField5 = createField("DeveloperName", "Document Unique Name", "string", "xsd:string", 80, false, false, false, false, false, false, false);
+        fields1.add(sObjectField5);
+        final SObjectField sObjectField6 = createField("NamespacePrefix", "Namespace Prefix", "string", "xsd:string", 15, false, true, false, false, false, false, false);
+        fields1.add(sObjectField6);
+        final SObjectField sObjectField7 = createField("ContentType", "MIME Type", "string", "xsd:string", 120, false, true, false, false, false, false, false);
+        fields1.add(sObjectField7);
+        final SObjectField sObjectField8 = createField("Type", "File Extension", "string", "xsd:string", 40, false, true, false, false, false, false, false);
+        fields1.add(sObjectField8);
+        final SObjectField sObjectField9 = createField("IsPublic", "Externally Available", "boolean", "xsd:boolean", 0, false, false, false, false, false, false, false);
+        fields1.add(sObjectField9);
+        final SObjectField sObjectField10 = createField("BodyLength", "Body Length", "int", "xsd:int", 0, false, false, false, false, false, false, false);
+        fields1.add(sObjectField10);
+        final SObjectField sObjectField11 = createField("Body", "Body", "base64", "xsd:base64Binary", 0, false, true, false, false, false, false, false);
+        fields1.add(sObjectField11);
+        final SObjectField sObjectField12 = createField("Url", "Url", "string", "xsd:string", 255, false, true, false, false, false, false, false);
+        fields1.add(sObjectField12);
+        final SObjectField sObjectField13 = createField("Description", "Description", "textarea", "xsd:string", 255, false, true, false, false, false, false, false);
+        fields1.add(sObjectField13);
+        final SObjectField sObjectField14 = createField("Keywords", "Keywords", "string", "xsd:string", 255, false, true, false, false, false, false, false);
+        fields1.add(sObjectField14);
+        final SObjectField sObjectField15 = createField("IsInternalUseOnly", "Internal Use Only", "boolean", "xsd:boolean", 0, false, false, false, false, false, false, false);
+        fields1.add(sObjectField15);
+        final SObjectField sObjectField16 = createField("AuthorId", "Author ID", "reference", "tns:ID", 18, false, false, false, false, false, false, false);
+        fields1.add(sObjectField16);
+        final SObjectField sObjectField17 = createField("CreatedDate", "Created Date", "datetime", "xsd:dateTime", 0, false, false, false, false, false, false, false);
+        fields1.add(sObjectField17);
+        final SObjectField sObjectField18 = createField("CreatedById", "Created By ID", "reference", "tns:ID", 18, false, false, false, false, false, false, false);
+        fields1.add(sObjectField18);
+        final SObjectField sObjectField19 = createField("LastModifiedDate", "Last Modified Date", "datetime", "xsd:dateTime", 0, false, false, false, false, false, false, false);
+        fields1.add(sObjectField19);
+        final SObjectField sObjectField20 = createField("LastModifiedById", "Last Modified By ID", "reference", "tns:ID", 18, false, false, false, false, false, false, false);
+        fields1.add(sObjectField20);
+        final SObjectField sObjectField21 = createField("SystemModstamp", "System Modstamp", "datetime", "xsd:dateTime", 0, false, false, false, false, false, false, false);
+        fields1.add(sObjectField21);
+        final SObjectField sObjectField22 = createField("IsBodySearchable", "Document Content Searchable", "boolean", "xsd:boolean", 0, false, false, false, false, false, false, false);
+        fields1.add(sObjectField22);
+        final SObjectField sObjectField23 = createField("LastViewedDate", "Last Viewed Date", "datetime", "xsd:dateTime", 0, false, true, false, false, false, false, false);
+        fields1.add(sObjectField23);
+        final SObjectField sObjectField24 = createField("LastReferencedDate", "Last Referenced Date", "datetime", "xsd:dateTime", 0, false, true, false, false, false, false, false);
+        fields1.add(sObjectField24);
+
+        description.setLabel("Document");
+        description.setLabelPlural("Documents");
+        description.setName("Document");
+
+        final SObjectDescriptionUrls sObjectDescriptionUrls1 = new SObjectDescriptionUrls();
+        sObjectDescriptionUrls1.setDefaultValues("/services/data/v45.0/sobjects/Document/defaultValues?recordTypeId&fields");
+        sObjectDescriptionUrls1.setDescribe("/services/data/v45.0/sobjects/Document/describe");
+        sObjectDescriptionUrls1.setRowTemplate("/services/data/v45.0/sobjects/Document/{ID}");
+        sObjectDescriptionUrls1.setSobject("/services/data/v45.0/sobjects/Document");
+        description.setUrls(sObjectDescriptionUrls1);
+
+        return description;
+    }
 }
+
 //CHECKSTYLE:ON
\ No newline at end of file
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Line_Item__c.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Line_Item__c.java
index ef3151d..decfd18 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Line_Item__c.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Line_Item__c.java
@@ -19,58 +19,122 @@ package org.apache.camel.component.salesforce.dto.generated;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 
+import org.apache.camel.component.salesforce.api.dto.AbstractDescribedSObjectBase;
 import org.apache.camel.component.salesforce.api.dto.AbstractSObjectBase;
+import org.apache.camel.component.salesforce.api.dto.Attributes;
+import org.apache.camel.component.salesforce.api.dto.SObjectDescription;
+import org.apache.camel.component.salesforce.api.dto.SObjectDescriptionUrls;
+import org.apache.camel.component.salesforce.api.dto.SObjectField;
+
+import java.util.ArrayList;
+import java.util.List;
+
 //CHECKSTYLE:OFF
 @XStreamAlias("Line_Item__c")
-public class Line_Item__c extends AbstractSObjectBase {
+public class Line_Item__c extends AbstractDescribedSObjectBase {
 
-    private Double Unit_Price__c;
+    public Line_Item__c() {
+        super();
+        getAttributes().setType("Line_Item__c");
+    }
 
-    private Double Units_Sold__c;
+    private static final SObjectDescription DESCRIPTION = createSObjectDescription();
 
     private String Merchandise__c;
 
-    private String Invoice_Statement__c;
+    @JsonProperty("Merchandise__c")
+    public String getMerchandise__c() {
+        return this.Merchandise__c;
+    }
+
+    @JsonProperty("Merchandise__c")
+    public void setMerchandise__c(String Merchandise__c) {
+        this.Merchandise__c = Merchandise__c;
+    }
+
+    private Double Unit_Price__c;
 
     @JsonProperty("Unit_Price__c")
     public Double getUnit_Price__c() {
-        return Unit_Price__c;
+        return this.Unit_Price__c;
     }
 
     @JsonProperty("Unit_Price__c")
-    public void setUnit_Price__c(Double unit_Price__c) {
-        Unit_Price__c = unit_Price__c;
+    public void setUnit_Price__c(Double Unit_Price__c) {
+        this.Unit_Price__c = Unit_Price__c;
     }
 
+    private Double Units_Sold__c;
+
     @JsonProperty("Units_Sold__c")
     public Double getUnits_Sold__c() {
-        return Units_Sold__c;
+        return this.Units_Sold__c;
     }
 
     @JsonProperty("Units_Sold__c")
-    public void setUnits_Sold__c(Double units_Sold__c) {
-        Units_Sold__c = units_Sold__c;
+    public void setUnits_Sold__c(Double Units_Sold__c) {
+        this.Units_Sold__c = Units_Sold__c;
     }
 
-    @JsonProperty("Merchandise__c")
-    public String getMerchandise__c() {
-        return Merchandise__c;
-    }
 
-    @JsonProperty("Merchandise__c")
-    public void setMerchandise__c(String merchandise__c) {
-        Merchandise__c = merchandise__c;
-    }
 
-    @JsonProperty("Invoice_Statement__c")
-    public String getInvoice_Statement__c() {
-        return Invoice_Statement__c;
+    @Override
+    public final SObjectDescription description() {
+        return DESCRIPTION;
     }
 
-    @JsonProperty("Invoice_Statement__c")
-    public void setInvoice_Statement__c(String invoice_Statement__c) {
-        Invoice_Statement__c = invoice_Statement__c;
-    }
+    private static SObjectDescription createSObjectDescription() {
+        final SObjectDescription description = new SObjectDescription();
 
+
+
+        final List<SObjectField> fields1 = new ArrayList<>();
+        description.setFields(fields1);
+
+        final SObjectField sObjectField1 = createField("Id", "Record ID", "id", "tns:ID", 18, false, false, false, false, false, false, true);
+        fields1.add(sObjectField1);
+        final SObjectField sObjectField2 = createField("OwnerId", "Owner ID", "reference", "tns:ID", 18, false, false, false, false, false, false, false);
+        fields1.add(sObjectField2);
+        final SObjectField sObjectField3 = createField("IsDeleted", "Deleted", "boolean", "xsd:boolean", 0, false, false, false, false, false, false, false);
+        fields1.add(sObjectField3);
+        final SObjectField sObjectField4 = createField("Name", "Line Item Number", "string", "xsd:string", 80, false, true, true, false, false, false, true);
+        fields1.add(sObjectField4);
+        final SObjectField sObjectField5 = createField("CreatedDate", "Created Date", "datetime", "xsd:dateTime", 0, false, false, false, false, false, false, false);
+        fields1.add(sObjectField5);
+        final SObjectField sObjectField6 = createField("CreatedById", "Created By ID", "reference", "tns:ID", 18, false, false, false, false, false, false, false);
+        fields1.add(sObjectField6);
+        final SObjectField sObjectField7 = createField("LastModifiedDate", "Last Modified Date", "datetime", "xsd:dateTime", 0, false, false, false, false, false, false, false);
+        fields1.add(sObjectField7);
+        final SObjectField sObjectField8 = createField("LastModifiedById", "Last Modified By ID", "reference", "tns:ID", 18, false, false, false, false, false, false, false);
+        fields1.add(sObjectField8);
+        final SObjectField sObjectField9 = createField("SystemModstamp", "System Modstamp", "datetime", "xsd:dateTime", 0, false, false, false, false, false, false, false);
+        fields1.add(sObjectField9);
+        final SObjectField sObjectField10 = createField("Merchandise__c", "Merchandise", "reference", "tns:ID", 18, false, true, false, false, true, false, false);
+        fields1.add(sObjectField10);
+        final SObjectField sObjectField11 = createField("Unit_Price__c", "Unit Price", "currency", "xsd:double", 0, false, true, false, false, true, false, false);
+        fields1.add(sObjectField11);
+        final SObjectField sObjectField12 = createField("Units_Sold__c", "Units Sold", "double", "xsd:double", 0, false, true, false, false, true, false, false);
+        fields1.add(sObjectField12);
+
+        description.setLabel("Line Item");
+        description.setLabelPlural("Line Items");
+        description.setName("Line_Item__c");
+
+        final SObjectDescriptionUrls sObjectDescriptionUrls1 = new SObjectDescriptionUrls();
+        sObjectDescriptionUrls1.setApprovalLayouts("/services/data/v45.0/sobjects/Line_Item__c/describe/approvalLayouts");
+        sObjectDescriptionUrls1.setCompactLayouts("/services/data/v45.0/sobjects/Line_Item__c/describe/compactLayouts");
+        sObjectDescriptionUrls1.setDefaultValues("/services/data/v45.0/sobjects/Line_Item__c/defaultValues?recordTypeId&fields");
+        sObjectDescriptionUrls1.setDescribe("/services/data/v45.0/sobjects/Line_Item__c/describe");
+        sObjectDescriptionUrls1.setLayouts("/services/data/v45.0/sobjects/Line_Item__c/describe/layouts");
+        sObjectDescriptionUrls1.setQuickActions("/services/data/v45.0/sobjects/Line_Item__c/quickActions");
+        sObjectDescriptionUrls1.setRowTemplate("/services/data/v45.0/sobjects/Line_Item__c/{ID}");
+        sObjectDescriptionUrls1.setSobject("/services/data/v45.0/sobjects/Line_Item__c");
+        sObjectDescriptionUrls1.setUiDetailTemplate("https://customer-flow-8168-dev-ed.cs42.my.salesforce.com/{ID}");
+        sObjectDescriptionUrls1.setUiEditTemplate("https://customer-flow-8168-dev-ed.cs42.my.salesforce.com/{ID}/e");
+        sObjectDescriptionUrls1.setUiNewRecord("https://customer-flow-8168-dev-ed.cs42.my.salesforce.com/a01/e");
+        description.setUrls(sObjectDescriptionUrls1);
+
+        return description;
+    }
 }
 //CHECKSTYLE:ON
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/MSPTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/MSPTest.java
index 0effc44..491df9a 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/MSPTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/MSPTest.java
@@ -38,6 +38,10 @@ import org.apache.camel.component.salesforce.api.dto.AbstractSObjectBase;
 @XStreamAlias("MSPTest")
 public class MSPTest extends AbstractSObjectBase {
 
+    public MSPTest() {
+        getAttributes().setType("MSPTest");
+    }
+
     @XStreamConverter(MultiSelectPicklistConverter.class)
     private MSPEnum[] MspField;
 
@@ -84,7 +88,6 @@ public class MSPTest extends AbstractSObjectBase {
             }
             throw new IllegalArgumentException(value);
         }
-
     }
 }
 //CHECKSTYLE:ON
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Merchandise__c.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Merchandise__c.java
index e80917b..bf910d2 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Merchandise__c.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Merchandise__c.java
@@ -19,45 +19,138 @@ package org.apache.camel.component.salesforce.dto.generated;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 
+import org.apache.camel.component.salesforce.api.dto.AbstractDescribedSObjectBase;
 import org.apache.camel.component.salesforce.api.dto.AbstractSObjectBase;
+import org.apache.camel.component.salesforce.api.dto.Attributes;
+import org.apache.camel.component.salesforce.api.dto.SObjectDescription;
+import org.apache.camel.component.salesforce.api.dto.SObjectDescriptionUrls;
+import org.apache.camel.component.salesforce.api.dto.SObjectField;
+
+import java.util.ArrayList;
+import java.util.List;
+
 //CHECKSTYLE:OFF
 @XStreamAlias("Merchandise__c")
-public class Merchandise__c extends AbstractSObjectBase {
+public class Merchandise__c extends AbstractDescribedSObjectBase {
 
-    private String Description__c;
+    public Merchandise__c() {
+        getAttributes().setType("Merchandise__c");
+    }
 
-    private Double Price__c;
+    private static final SObjectDescription DESCRIPTION = createSObjectDescription();
 
-    private Double Total_Inventory__c;
+    private String Description__c;
 
     @JsonProperty("Description__c")
     public String getDescription__c() {
-        return Description__c;
+        return this.Description__c;
     }
 
     @JsonProperty("Description__c")
-    public void setDescription__c(String description__c) {
-        Description__c = description__c;
+    public void setDescription__c(String Description__c) {
+        this.Description__c = Description__c;
     }
 
+    private Double Price__c;
+
     @JsonProperty("Price__c")
     public Double getPrice__c() {
-        return Price__c;
+        return this.Price__c;
     }
 
     @JsonProperty("Price__c")
-    public void setPrice__c(Double price__c) {
-        Price__c = price__c;
+    public void setPrice__c(Double Price__c) {
+        this.Price__c = Price__c;
     }
 
+    private Double Total_Inventory__c;
+
     @JsonProperty("Total_Inventory__c")
     public Double getTotal_Inventory__c() {
-        return Total_Inventory__c;
+        return this.Total_Inventory__c;
     }
 
     @JsonProperty("Total_Inventory__c")
-    public void setTotal_Inventory__c(Double total_Inventory__c) {
-        Total_Inventory__c = total_Inventory__c;
+    public void setTotal_Inventory__c(Double Total_Inventory__c) {
+        this.Total_Inventory__c = Total_Inventory__c;
+    }
+
+
+    private QueryRecordsLine_Item__c Line_Items__r;
+
+    @JsonProperty("Line_Items__r")
+    public QueryRecordsLine_Item__c getLine_Items__r() {
+        return Line_Items__r;
+    }
+
+    @JsonProperty("Line_Items__r")
+    public void setLine_Items__r(QueryRecordsLine_Item__c Line_Items__r) {
+        this.Line_Items__r = Line_Items__r;
+    }
+    @Override
+    public final SObjectDescription description() {
+        return DESCRIPTION;
+    }
+
+    private static SObjectDescription createSObjectDescription() {
+        final SObjectDescription description = new SObjectDescription();
+
+
+
+        final List<SObjectField> fields1 = new ArrayList<>();
+        description.setFields(fields1);
+
+        final SObjectField sObjectField1 = createField("Id", "Record ID", "id", "tns:ID", 18, false, false, false, false, false, false, true);
+        fields1.add(sObjectField1);
+        final SObjectField sObjectField2 = createField("OwnerId", "Owner ID", "reference", "tns:ID", 18, false, false, false, false, false, false, false);
+        fields1.add(sObjectField2);
+        final SObjectField sObjectField3 = createField("IsDeleted", "Deleted", "boolean", "xsd:boolean", 0, false, false, false, false, false, false, false);
+        fields1.add(sObjectField3);
+        final SObjectField sObjectField4 = createField("Name", "Merchandise Name", "string", "xsd:string", 80, false, true, true, false, false, false, true);
+        fields1.add(sObjectField4);
+        final SObjectField sObjectField5 = createField("CreatedDate", "Created Date", "datetime", "xsd:dateTime", 0, false, false, false, false, false, false, false);
+        fields1.add(sObjectField5);
+        final SObjectField sObjectField6 = createField("CreatedById", "Created By ID", "reference", "tns:ID", 18, false, false, false, false, false, false, false);
+        fields1.add(sObjectField6);
+        final SObjectField sObjectField7 = createField("LastModifiedDate", "Last Modified Date", "datetime", "xsd:dateTime", 0, false, false, false, false, false, false, false);
+        fields1.add(sObjectField7);
+        final SObjectField sObjectField8 = createField("LastModifiedById", "Last Modified By ID", "reference", "tns:ID", 18, false, false, false, false, false, false, false);
+        fields1.add(sObjectField8);
+        final SObjectField sObjectField9 = createField("SystemModstamp", "System Modstamp", "datetime", "xsd:dateTime", 0, false, false, false, false, false, false, false);
+        fields1.add(sObjectField9);
+        final SObjectField sObjectField10 = createField("LastActivityDate", "Last Activity Date", "date", "xsd:date", 0, false, true, false, false, false, false, false);
+        fields1.add(sObjectField10);
+        final SObjectField sObjectField11 = createField("LastViewedDate", "Last Viewed Date", "datetime", "xsd:dateTime", 0, false, true, false, false, false, false, false);
+        fields1.add(sObjectField11);
+        final SObjectField sObjectField12 = createField("LastReferencedDate", "Last Referenced Date", "datetime", "xsd:dateTime", 0, false, true, false, false, false, false, false);
+        fields1.add(sObjectField12);
+        final SObjectField sObjectField13 = createField("Description__c", "Description", "string", "xsd:string", 100, false, true, false, false, true, false, false);
+        fields1.add(sObjectField13);
+        final SObjectField sObjectField14 = createField("Price__c", "Price", "currency", "xsd:double", 0, false, false, false, false, true, false, false);
+        fields1.add(sObjectField14);
+        final SObjectField sObjectField15 = createField("Total_Inventory__c", "Total_Inventory", "double", "xsd:double", 0, false, false, false, false, true, false, false);
+        fields1.add(sObjectField15);
+
+        description.setLabel("Merchandise");
+        description.setLabelPlural("Merchandise");
+        description.setName("Merchandise__c");
+
+        final SObjectDescriptionUrls sObjectDescriptionUrls1 = new SObjectDescriptionUrls();
+        sObjectDescriptionUrls1.setApprovalLayouts("/services/data/v45.0/sobjects/Merchandise__c/describe/approvalLayouts");
+        sObjectDescriptionUrls1.setCompactLayouts("/services/data/v45.0/sobjects/Merchandise__c/describe/compactLayouts");
+        sObjectDescriptionUrls1.setDefaultValues("/services/data/v45.0/sobjects/Merchandise__c/defaultValues?recordTypeId&fields");
+        sObjectDescriptionUrls1.setDescribe("/services/data/v45.0/sobjects/Merchandise__c/describe");
+        sObjectDescriptionUrls1.setLayouts("/services/data/v45.0/sobjects/Merchandise__c/describe/layouts");
+        sObjectDescriptionUrls1.setQuickActions("/services/data/v45.0/sobjects/Merchandise__c/quickActions");
+        sObjectDescriptionUrls1.setRowTemplate("/services/data/v45.0/sobjects/Merchandise__c/{ID}");
+        sObjectDescriptionUrls1.setSobject("/services/data/v45.0/sobjects/Merchandise__c");
+        sObjectDescriptionUrls1.setUiDetailTemplate("https://customer-flow-8168-dev-ed.cs42.my.salesforce.com/{ID}");
+        sObjectDescriptionUrls1.setUiEditTemplate("https://customer-flow-8168-dev-ed.cs42.my.salesforce.com/{ID}/e");
+        sObjectDescriptionUrls1.setUiNewRecord("https://customer-flow-8168-dev-ed.cs42.my.salesforce.com/a02/e");
+        description.setUrls(sObjectDescriptionUrls1);
+
+        return description;
     }
 }
+
 //CHECKSTYLE:ON
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/QueryRecordsAccount.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/QueryRecordsAccount.java
new file mode 100644
index 0000000..82b6497
--- /dev/null
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/QueryRecordsAccount.java
@@ -0,0 +1,19 @@
+package org.apache.camel.component.salesforce.dto.generated;
+
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+import org.apache.camel.component.salesforce.api.dto.AbstractQueryRecordsBase;
+
+import java.util.List;
+
+public class QueryRecordsAccount extends AbstractQueryRecordsBase {
+    @XStreamImplicit
+    private List<Account> records;
+
+    public List<Account> getRecords() {
+        return records;
+    }
+
+    public void setRecords(List<Account> records) {
+        this.records = records;
+    }
+}
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/QueryRecordsContact.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/QueryRecordsContact.java
new file mode 100644
index 0000000..b3e9716
--- /dev/null
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/QueryRecordsContact.java
@@ -0,0 +1,19 @@
+package org.apache.camel.component.salesforce.dto.generated;
+
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+import org.apache.camel.component.salesforce.api.dto.AbstractQueryRecordsBase;
+
+import java.util.List;
+
+public class QueryRecordsContact extends AbstractQueryRecordsBase {
+    @XStreamImplicit
+    private List<Contact> records;
+
+    public List<Contact> getRecords() {
+        return records;
+    }
+
+    public void setRecords(List<Contact> records) {
+        this.records = records;
+    }
+}
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/resources/org/apache/camel/component/salesforce/api/dto/composite_request_example.json b/components/camel-salesforce/camel-salesforce-component/src/test/resources/org/apache/camel/component/salesforce/api/dto/composite_request_example.json
index 513e352..892bb39 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/resources/org/apache/camel/component/salesforce/api/dto/composite_request_example.json
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/resources/org/apache/camel/component/salesforce/api/dto/composite_request_example.json
@@ -9,7 +9,10 @@
       "BillingStreet" : "Landmark @ 1 Market Street",
       "BillingCity" : "San Francisco",
       "BillingState" : "California",
-      "Industry" : "Technology"
+      "Industry" : "Technology",
+      "attributes" : {
+        "type" : "Account"
+      }
     }
   }, {
     "method" : "POST",
@@ -17,7 +20,10 @@
     "referenceId" : "NewContact",
     "body" : {
       "LastName" : "John Doe",
-      "Phone" : "1234567890"
+      "Phone" : "1234567890",
+      "attributes" : {
+        "type" : "Contact"
+      }
     }
   }, {
     "method" : "POST",
@@ -25,7 +31,10 @@
     "referenceId" : "JunctionRecord",
     "body" : {
       "account__c" : "001xx000003DIpcAAG",
-      "contactId__c" : "@{NewContact.id}"
+      "contactId__c" : "@{NewContact.id}",
+      "attributes" : {
+        "type" : "AccountContactJunction__c"
+      }
     }
   } ]
 }
\ No newline at end of file
diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/GenerateMojo.java b/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/GenerateMojo.java
index 0e77139..9284924 100644
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/GenerateMojo.java
+++ b/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/GenerateMojo.java
@@ -41,6 +41,7 @@ import java.util.function.Function;
 import java.util.function.Supplier;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
+import java.util.stream.StreamSupport;
 
 import org.apache.camel.component.salesforce.api.dto.AbstractSObjectBase;
 import org.apache.camel.component.salesforce.api.dto.PickListValue;
@@ -179,6 +180,10 @@ public class GenerateMojo extends AbstractSalesforceMojo {
             return descriptions.hasExternalIds(name);
         }
 
+        public boolean atLeastOneHasExternalIds(final List<String> names) {
+            return names.stream().anyMatch(n -> descriptions.hasExternalIds(n));
+        }
+
         public boolean hasMultiSelectPicklists(final SObjectDescription desc) {
             for (final SObjectField field : desc.getFields()) {
                 if (isMultiSelectPicklist(field)) {
@@ -304,7 +309,6 @@ public class GenerateMojo extends AbstractSalesforceMojo {
     private static final String MULTIPICKLIST = "multipicklist";
     private static final String PACKAGE_NAME_PATTERN = "(\\p{javaJavaIdentifierStart}\\p{javaJavaIdentifierPart}*\\.)+\\p{javaJavaIdentifierStart}\\p{javaJavaIdentifierPart}*";
     private static final String PICKLIST = "picklist";
-    private static final String SOBJECT_LOOKUP_VM = "/sobject-lookup.vm";
     private static final String SOBJECT_PICKLIST_VM = "/sobject-picklist.vm";
     private static final String SOBJECT_POJO_OPTIONAL_VM = "/sobject-pojo-optional.vm";
 
@@ -399,7 +403,8 @@ public class GenerateMojo extends AbstractSalesforceMojo {
         parsePicklistOverrideArgs(picklistToStrings, picklistsStringToSObject);
     }
 
-    void processDescription(final File pkgDir, final SObjectDescription description, final GeneratorUtility utility)
+    void processDescription(final File pkgDir, final SObjectDescription description,
+            final GeneratorUtility utility, final Set<String> sObjectNames)
         throws IOException {
         useStringsForPicklists = useStringsForPicklists == null ? Boolean.FALSE : useStringsForPicklists;
 
@@ -416,6 +421,7 @@ public class GenerateMojo extends AbstractSalesforceMojo {
 
         final String pojoFileName = description.getName() + JAVA_EXT;
         final File pojoFile = new File(pkgDir, pojoFileName);
+        context.put("sObjectNames", sObjectNames);
         context.put("descriptions", descriptions);
         try (final Writer writer = new OutputStreamWriter(new FileOutputStream(pojoFile), StandardCharsets.UTF_8)) {
             final Template pojoTemplate = engine.getTemplate(SOBJECT_POJO_VM, UTF_8);
@@ -432,42 +438,6 @@ public class GenerateMojo extends AbstractSalesforceMojo {
             }
         }
 
-        // generate ExternalIds Lookup class for all lookup fields that point to
-        // an Object that has at least one externalId
-        final Set<String> generatedLookupObjects = new HashSet<>();
-        for (final SObjectField field : description.getFields()) {
-            if (!utility.isLookup(field)) {
-                continue;
-            }
-
-            for (final String reference : field.getReferenceTo()) {
-                final List<SObjectField> externalIds = descriptions.externalIdsOf(reference);
-                final String lookupClassName = reference + "_Lookup";
-
-                if (generatedLookupObjects.contains(lookupClassName)) {
-                    continue;
-                }
-
-                for (final SObjectField externalId : externalIds) {
-                    generatedLookupObjects.add(lookupClassName);
-                    final String lookupClassFileName = lookupClassName + JAVA_EXT;
-                    final File lookupClassFile = new File(pkgDir, lookupClassFileName);
-
-                    context.put("field", externalId);
-                    context.put("lookupRelationshipName", field.getRelationshipName());
-                    context.put("lookupType", lookupClassName);
-                    context.put("externalIdsList", externalIds);
-                    context.put("lookupClassName", lookupClassName);
-                    context.put("type", reference);                    
-
-                    try (final Writer writer = new OutputStreamWriter(new FileOutputStream(lookupClassFile),
-                        StandardCharsets.UTF_8)) {
-                        final Template lookupClassTemplate = engine.getTemplate(SOBJECT_LOOKUP_VM, UTF_8);
-                        lookupClassTemplate.merge(context, writer);
-                    }
-                }
-            }
-        }
 
         // write required Enumerations for any picklists
         for (final SObjectField field : description.getFields()) {
@@ -538,6 +508,9 @@ public class GenerateMojo extends AbstractSalesforceMojo {
         }
 
         getLog().info("Generating Java Classes...");
+        Set<String> sObjectNames = StreamSupport.stream(descriptions.fetched().spliterator(), false)
+                .map(d -> d.getName())
+                .collect(Collectors.toSet());
         // generate POJOs for every object description
         final GeneratorUtility utility = new GeneratorUtility();
         for (final SObjectDescription description : descriptions.fetched()) {
@@ -545,7 +518,7 @@ public class GenerateMojo extends AbstractSalesforceMojo {
                 continue;
             }
             try {
-                processDescription(pkgDir, description, utility);
+                processDescription(pkgDir, description, utility, sObjectNames);
             } catch (final IOException e) {
                 throw new MojoExecutionException("Unable to generate source files for: " + description.getName(), e);
             }
diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/ObjectDescriptions.java b/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/ObjectDescriptions.java
index 402a5c9..1b1d95d 100644
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/ObjectDescriptions.java
+++ b/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/ObjectDescriptions.java
@@ -66,6 +66,10 @@ final class ObjectDescriptions {
         return descriptions.computeIfAbsent(name, this::fetchDescriptionOf);
     }
 
+    boolean hasDescription(final String name) {
+        return descriptions.containsKey(name);
+    }
+
     List<SObjectField> externalIdsOf(final String name) {
         return descriptionOf(name).getFields().stream().filter(SObjectField::isExternalId).collect(Collectors.toList());
     }
diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/resources/sobject-lookup.vm b/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/resources/sobject-lookup.vm
deleted file mode 100644
index 8e53e28..0000000
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/resources/sobject-lookup.vm
+++ /dev/null
@@ -1,62 +0,0 @@
-## ------------------------------------------------------------------------
-## Licensed to the Apache Software Foundation (ASF) under one or more
-## contributor license agreements.  See the NOTICE file distributed with
-## this work for additional information regarding copyright ownership.
-## The ASF licenses this file to You under the Apache License, Version 2.0
-## (the "License"); you may not use this file except in compliance with
-## the License.  You may obtain a copy of the License at
-##
-## http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing, software
-## distributed under the License is distributed on an "AS IS" BASIS,
-## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-## See the License for the specific language governing permissions and
-## limitations under the License.
-## ------------------------------------------------------------------------
-## sobject-lookup.vm
-/*
- * Salesforce DTO generated by camel-salesforce-maven-plugin
- */
-package $packageName;
-
-import javax.annotation.Generated;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonInclude.Include;
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-
-
-/**
- * Salesforce Lookup class for SObject $lookupType
- */
-@Generated("org.apache.camel.maven.CamelSalesforceMojo")
-@XStreamAlias("$lookupClassName")
-@JsonInclude(Include.NON_NULL)
-public class $lookupClassName {
-    class Attributes {
-        @JsonProperty("type")
-        public String getType() {
-            return "$type";
-        }
-    }
-
-    @JsonProperty("attributes")
-    public Attributes getAttributes() {
-        return new Attributes();
-    }
-
-#foreach ( $externalId in $externalIdsList)
-    private String $externalId.Name;
-
-    @JsonProperty("${externalId.Name}")
-    public void set${externalId.Name}(String e){
-        this.$externalId.Name = e;
-    }
-
-    @JsonProperty("${externalId.Name}")
-    public String get${externalId.Name}(){
-        return this.$externalId.Name;
-    }
-#end
-}
diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/resources/sobject-pojo.vm b/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/resources/sobject-pojo.vm
index adf4644..746b2eb 100644
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/resources/sobject-pojo.vm
+++ b/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/resources/sobject-pojo.vm
@@ -48,6 +48,7 @@ import org.apache.camel.component.salesforce.api.MultiSelectPicklistSerializer;
 #end
 #end
 import org.apache.camel.component.salesforce.api.dto.AbstractDescribedSObjectBase;
+import org.apache.camel.component.salesforce.api.dto.Attributes;
 import org.apache.camel.component.salesforce.api.dto.ChildRelationShip;
 import org.apache.camel.component.salesforce.api.dto.InfoUrls;
 import org.apache.camel.component.salesforce.api.dto.NamedLayoutInfo;
@@ -71,6 +72,12 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include;
 @XStreamAlias("$desc.Name")
 public class $desc.Name extends AbstractDescribedSObjectBase {
 
+    public ${desc.Name}() {
+        Attributes attributes = new Attributes();
+        attributes.setType("$desc.Name");
+        setAttributes(attributes);
+    }
+
     private static final SObjectDescription DESCRIPTION = createSObjectDescription();
 
 #foreach ( $field in $desc.Fields )
@@ -78,7 +85,6 @@ public class $desc.Name extends AbstractDescribedSObjectBase {
 #if ( ($utility.notBaseField($field.Name)) && ($fieldType) )
 #set ( $fieldName = $field.Name )
 #set ( $isMultiSelectPicklist = $utility.isMultiSelectPicklist($field) )
-    // $fieldName
 #if ( $utility.isBlobField($field) )
 #set ( $propertyName = $fieldName + "Url" )
 #else
@@ -127,33 +133,50 @@ public class $desc.Name extends AbstractDescribedSObjectBase {
         this.$propertyName = $propertyName;
     }
 
-#if ( $utility.isLookup($field) )## IS LOOKUP
-#foreach ( $reference in $field.getReferenceTo() )## REFERENCE LOOP
-#if ( $utility.hasExternalIds($reference) )## HAS EXTERNAL IDS
-#set( $fieldName = $field.getName() )
-#if ( $fieldName.endsWith("Id") )## PROPERTY IS ID
-#set( $jsonPropertyName = $fieldName.substring(0, $fieldName.length() - 2) )
-#elseif ( $fieldName.endsWith("__pc") )
-#set ( $jsonPropertyName = $fieldName.replace("__pc", "__pr") )
+#if ( $field.type == "reference" && $utility.notNull($field.relationshipName)
+    && $utility.atLeastOneHasExternalIds($field.getReferenceTo()) ) ## IS LOOKUP $hasDescription
+#if ( $field.getReferenceTo().size() > 1)
+#set ( $propertyType = "AbstractDescribedSObjectBase")
+#set ( $needed = true )
 #else
-#set( $jsonPropertyName = $fieldName.replace("__c", "__r") )
-#end## PROPERTY IS ID
+#set ( $propertyType = $field.getReferenceTo().get(0) )
+#set ( $needed = $sObjectNames.contains($field.getReferenceTo().get(0)) )
+#end
+#if ( $needed )
+#set( $fieldName = $field.getName() )
+#set( $jsonPropertyName = $field.relationshipName )
 #set( $lookupObjectType = $reference )
-    private ${lookupObjectType}_Lookup ${fieldName}_Lookup;
+    @XStreamAlias("${jsonPropertyName}")
+    private $propertyType $jsonPropertyName;
 
-    @JsonProperty("$jsonPropertyName")
-    public ${lookupObjectType}_Lookup get${fieldName}_Lookup() {
-        return this.${fieldName}_Lookup;
+    @JsonProperty("${jsonPropertyName}")
+    public $propertyType get${jsonPropertyName}() {
+        return this.$jsonPropertyName;
     }
 
-    @JsonProperty("$jsonPropertyName")
-    public void set$fieldName(${lookupObjectType}_Lookup ${fieldName}_Lookup) {
-        this.${fieldName}_Lookup = ${fieldName}_Lookup;
+    @JsonProperty("${jsonPropertyName}")
+    public void set${jsonPropertyName}($propertyType $jsonPropertyName) {
+        this.${jsonPropertyName} = $jsonPropertyName;
     }
-#end## HAS EXTERNAL IDS
-#end## END REFERENCE LOOP
+#end
 #end## END IS LOOKUP
 #end
+#end ##foreach field
+#foreach ( $rel in $desc.childRelationships )
+#set (  $hasDescription = $sObjectNames.contains($rel.childSObject) )
+#if ( $utility.notNull($rel.relationshipName) && $hasDescription )
+    private QueryRecords${rel.childSObject} $rel.relationshipName;
+
+    @JsonProperty("$rel.relationshipName")
+    public QueryRecords${rel.childSObject} get${rel.relationshipName}() {
+        return $rel.relationshipName;
+    }
+
+    @JsonProperty("$rel.relationshipName")
+    public void set${rel.relationshipName}(QueryRecords${rel.childSObject} ${rel.relationshipName}) {
+        this.${rel.relationshipName} = ${rel.relationshipName};
+    }
+#end
 #end
 
 ##
diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoOutputTest.java b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoOutputTest.java
index d41347d..012e1c1 100644
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoOutputTest.java
+++ b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoOutputTest.java
@@ -20,12 +20,15 @@ import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Set;
 import java.util.function.Consumer;
 import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.StreamSupport;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 
@@ -77,14 +80,17 @@ public class CamelSalesforceMojoOutputTest {
     @Test
     public void testProcessDescription() throws Exception {
         final File pkgDir = temp.newFolder();
-
         final GenerateMojo.GeneratorUtility utility = mojo.new GeneratorUtility();
 
         final RestClient client = mockRestClient();
 
         mojo.descriptions = new ObjectDescriptions(client, 0, null, null, null, null, mojo.getLog());
 
-        mojo.processDescription(pkgDir, description, utility);
+        Set<String> sObjectNames = StreamSupport.stream(mojo.descriptions.fetched().spliterator(), false)
+                .map(SObjectDescription::getName)
+                .collect(Collectors.toSet());
+
+        mojo.processDescription(pkgDir, description, utility, sObjectNames);
 
         for (final String source : sources) {
             final String expected = fileNameAdapter.apply(source);
@@ -92,6 +98,7 @@ public class CamelSalesforceMojoOutputTest {
             final File generatedFile = new File(pkgDir, source);
             final String generatedContent = FileUtils.readFileToString(generatedFile, StandardCharsets.UTF_8);
 
+
             final String expectedContent = IOUtils.toString(
                 CamelSalesforceMojoOutputTest.class.getResource("/generated/" + expected), StandardCharsets.UTF_8);
 
@@ -116,7 +123,7 @@ public class CamelSalesforceMojoOutputTest {
 
                 mojo.setup();
             }, s -> "Asset_LocalDateTime.java", "Asset.java"), //
-            testCase("with_reference.json", "With_Reference__c.java", "With_External_Id__c_Lookup.java"));
+            testCase("with_reference.json", "With_Reference__c.java"));
     }
 
     static GenerateMojo createMojo() {
diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Asset.java b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Asset.java
index ac91e66..06292f9 100644
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Asset.java
+++ b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Asset.java
@@ -11,6 +11,7 @@ import javax.annotation.Generated;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 
 import org.apache.camel.component.salesforce.api.dto.AbstractDescribedSObjectBase;
+import org.apache.camel.component.salesforce.api.dto.Attributes;
 import org.apache.camel.component.salesforce.api.dto.ChildRelationShip;
 import org.apache.camel.component.salesforce.api.dto.InfoUrls;
 import org.apache.camel.component.salesforce.api.dto.NamedLayoutInfo;
@@ -28,9 +29,14 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 @XStreamAlias("Asset")
 public class Asset extends AbstractDescribedSObjectBase {
 
+    public Asset() {
+        Attributes attributes = new Attributes();
+        attributes.setType("Asset");
+        setAttributes(attributes);
+    }
+
     private static final SObjectDescription DESCRIPTION = createSObjectDescription();
 
-    // InstallDate
     private java.time.LocalDate InstallDate;
 
     @JsonProperty("InstallDate")
@@ -43,7 +49,6 @@ public class Asset extends AbstractDescribedSObjectBase {
         this.InstallDate = InstallDate;
     }
 
-    // date_time
     private java.time.ZonedDateTime date_time;
 
     @JsonProperty("date_time")
@@ -56,7 +61,6 @@ public class Asset extends AbstractDescribedSObjectBase {
         this.date_time = date_time;
     }
 
-    // time
     private java.time.OffsetTime time;
 
     @JsonProperty("time")
@@ -69,7 +73,7 @@ public class Asset extends AbstractDescribedSObjectBase {
         this.time = time;
     }
 
-
+ 
     @Override
     public final SObjectDescription description() {
         return DESCRIPTION;
diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Asset_LocalDateTime.java b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Asset_LocalDateTime.java
index d9f03f6..2fb1018 100644
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Asset_LocalDateTime.java
+++ b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Asset_LocalDateTime.java
@@ -11,6 +11,7 @@ import javax.annotation.Generated;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 
 import org.apache.camel.component.salesforce.api.dto.AbstractDescribedSObjectBase;
+import org.apache.camel.component.salesforce.api.dto.Attributes;
 import org.apache.camel.component.salesforce.api.dto.ChildRelationShip;
 import org.apache.camel.component.salesforce.api.dto.InfoUrls;
 import org.apache.camel.component.salesforce.api.dto.NamedLayoutInfo;
@@ -28,9 +29,14 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 @XStreamAlias("Asset")
 public class Asset extends AbstractDescribedSObjectBase {
 
+    public Asset() {
+        Attributes attributes = new Attributes();
+        attributes.setType("Asset");
+        setAttributes(attributes);
+    }
+
     private static final SObjectDescription DESCRIPTION = createSObjectDescription();
 
-    // InstallDate
     private java.time.LocalDateTime InstallDate;
 
     @JsonProperty("InstallDate")
@@ -43,7 +49,6 @@ public class Asset extends AbstractDescribedSObjectBase {
         this.InstallDate = InstallDate;
     }
 
-    // date_time
     private java.time.ZonedDateTime date_time;
 
     @JsonProperty("date_time")
@@ -56,7 +61,6 @@ public class Asset extends AbstractDescribedSObjectBase {
         this.date_time = date_time;
     }
 
-    // time
     private java.time.OffsetTime time;
 
     @JsonProperty("time")
@@ -69,7 +73,7 @@ public class Asset extends AbstractDescribedSObjectBase {
         this.time = time;
     }
 
-
+ 
     @Override
     public final SObjectDescription description() {
         return DESCRIPTION;
diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Case.java b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Case.java
index 1f852c0..f6d54a9 100644
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Case.java
+++ b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Case.java
@@ -13,6 +13,7 @@ import com.thoughtworks.xstream.annotations.XStreamConverter;
 
 import org.apache.camel.component.salesforce.api.PicklistEnumConverter;
 import org.apache.camel.component.salesforce.api.dto.AbstractDescribedSObjectBase;
+import org.apache.camel.component.salesforce.api.dto.Attributes;
 import org.apache.camel.component.salesforce.api.dto.ChildRelationShip;
 import org.apache.camel.component.salesforce.api.dto.InfoUrls;
 import org.apache.camel.component.salesforce.api.dto.NamedLayoutInfo;
@@ -30,9 +31,14 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 @XStreamAlias("Case")
 public class Case extends AbstractDescribedSObjectBase {
 
+    public Case() {
+        Attributes attributes = new Attributes();
+        attributes.setType("Case");
+        setAttributes(attributes);
+    }
+
     private static final SObjectDescription DESCRIPTION = createSObjectDescription();
 
-    // PickListAccentMark
     @XStreamConverter(PicklistEnumConverter.class)
     private Case_PickListAccentMarkEnum PickListAccentMark;
 
@@ -46,7 +52,6 @@ public class Case extends AbstractDescribedSObjectBase {
         this.PickListAccentMark = PickListAccentMark;
     }
 
-    // PickListSlash
     @XStreamConverter(PicklistEnumConverter.class)
     private Case_PickListSlashEnum PickListSlash;
 
@@ -60,7 +65,6 @@ public class Case extends AbstractDescribedSObjectBase {
         this.PickListSlash = PickListSlash;
     }
 
-    // PickListQuotationMark
     @XStreamConverter(PicklistEnumConverter.class)
     private Case_PickListQuotationMarkEnum PickListQuotationMark;
 
@@ -74,7 +78,7 @@ public class Case extends AbstractDescribedSObjectBase {
         this.PickListQuotationMark = PickListQuotationMark;
     }
 
-
+ 
     @Override
     public final SObjectDescription description() {
         return DESCRIPTION;
diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/ComplexCalculatedFormula.java b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/ComplexCalculatedFormula.java
index be2d97b..5f538fc 100644
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/ComplexCalculatedFormula.java
+++ b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/ComplexCalculatedFormula.java
@@ -11,6 +11,7 @@ import javax.annotation.Generated;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 
 import org.apache.camel.component.salesforce.api.dto.AbstractDescribedSObjectBase;
+import org.apache.camel.component.salesforce.api.dto.Attributes;
 import org.apache.camel.component.salesforce.api.dto.ChildRelationShip;
 import org.apache.camel.component.salesforce.api.dto.InfoUrls;
 import org.apache.camel.component.salesforce.api.dto.NamedLayoutInfo;
@@ -28,9 +29,14 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 @XStreamAlias("ComplexCalculatedFormula")
 public class ComplexCalculatedFormula extends AbstractDescribedSObjectBase {
 
+    public ComplexCalculatedFormula() {
+        Attributes attributes = new Attributes();
+        attributes.setType("ComplexCalculatedFormula");
+        setAttributes(attributes);
+    }
+
     private static final SObjectDescription DESCRIPTION = createSObjectDescription();
 
-    // ComplexCalculatedFormula
     private String ComplexCalculatedFormula;
 
     @JsonProperty("ComplexCalculatedFormula")
@@ -43,7 +49,7 @@ public class ComplexCalculatedFormula extends AbstractDescribedSObjectBase {
         this.ComplexCalculatedFormula = ComplexCalculatedFormula;
     }
 
-
+ 
     @Override
     public final SObjectDescription description() {
         return DESCRIPTION;
diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/With_Reference__c.java b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/With_Reference__c.java
index 0ac5100..66c7e37 100644
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/With_Reference__c.java
+++ b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/With_Reference__c.java
@@ -11,6 +11,7 @@ import javax.annotation.Generated;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 
 import org.apache.camel.component.salesforce.api.dto.AbstractDescribedSObjectBase;
+import org.apache.camel.component.salesforce.api.dto.Attributes;
 import org.apache.camel.component.salesforce.api.dto.ChildRelationShip;
 import org.apache.camel.component.salesforce.api.dto.InfoUrls;
 import org.apache.camel.component.salesforce.api.dto.NamedLayoutInfo;
@@ -28,9 +29,14 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 @XStreamAlias("With_Reference__c")
 public class With_Reference__c extends AbstractDescribedSObjectBase {
 
+    public With_Reference__c() {
+        Attributes attributes = new Attributes();
+        attributes.setType("With_Reference__c");
+        setAttributes(attributes);
+    }
+
     private static final SObjectDescription DESCRIPTION = createSObjectDescription();
 
-    // account_ref__c
     private String account_ref__c;
 
     @JsonProperty("account_ref__c")
@@ -43,7 +49,6 @@ public class With_Reference__c extends AbstractDescribedSObjectBase {
         this.account_ref__c = account_ref__c;
     }
 
-    // ProductId__c
     private String ProductId__c;
 
     @JsonProperty("ProductId__c")
@@ -56,7 +61,6 @@ public class With_Reference__c extends AbstractDescribedSObjectBase {
         this.ProductId__c = ProductId__c;
     }
 
-    // External__c
     private String External__c;
 
     @JsonProperty("External__c")
@@ -69,18 +73,7 @@ public class With_Reference__c extends AbstractDescribedSObjectBase {
         this.External__c = External__c;
     }
 
-    private With_External_Id__c_Lookup External__c_Lookup;
-
-    @JsonProperty("External__r")
-    public With_External_Id__c_Lookup getExternal__c_Lookup() {
-        return this.External__c_Lookup;
-    }
-
-    @JsonProperty("External__r")
-    public void setExternal__c(With_External_Id__c_Lookup External__c_Lookup) {
-        this.External__c_Lookup = External__c_Lookup;
-    }
-
+  
     @Override
     public final SObjectDescription description() {
         return DESCRIPTION;
diff --git a/components/camel-salesforce/it/resources/salesforce/objects/Account.object b/components/camel-salesforce/it/resources/salesforce/objects/Account.object
index 72e1a87..85daa86 100644
--- a/components/camel-salesforce/it/resources/salesforce/objects/Account.object
+++ b/components/camel-salesforce/it/resources/salesforce/objects/Account.object
@@ -17,6 +17,17 @@
 -->
 <CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
     <fields>
+        <fullName>External_Id__c</fullName>
+        <caseSensitive>false</caseSensitive>
+        <externalId>true</externalId>
+        <label>External Id</label>
+        <length>255</length>
+        <required>false</required>
+        <trackFeedHistory>false</trackFeedHistory>
+        <type>Text</type>
+        <unique>true</unique>
+    </fields>
+    <fields>
         <fullName>Shipping_Location__c</fullName>
         <displayLocationInDecimal>false</displayLocationInDecimal>
         <externalId>false</externalId>
diff --git a/components/camel-salesforce/it/resources/salesforce/package.xml b/components/camel-salesforce/it/resources/salesforce/package.xml
index bb974e6..a8d1095 100644
--- a/components/camel-salesforce/it/resources/salesforce/package.xml
+++ b/components/camel-salesforce/it/resources/salesforce/package.xml
@@ -32,6 +32,7 @@
     </types>
     <types>
         <members>Account.Shipping_Location__c</members>
+        <members>Account.External_Id__c</members>
         <members>Invoice__c.Status__c</members>
         <members>Line_Item__c.Merchandise__c</members>
         <members>Line_Item__c.Unit_Price__c</members>
diff --git a/components/camel-salesforce/it/resources/salesforce/profiles/System Administrator With Hard Delete.profile b/components/camel-salesforce/it/resources/salesforce/profiles/System Administrator With Hard Delete.profile
index 0ef5451..6729c8a 100644
--- a/components/camel-salesforce/it/resources/salesforce/profiles/System Administrator With Hard Delete.profile	
+++ b/components/camel-salesforce/it/resources/salesforce/profiles/System Administrator With Hard Delete.profile	
@@ -31,11 +31,16 @@
     </classAccesses>
     <classAccesses>
         <apexClass>UpdateProfile</apexClass>
-        <enabled>false</enabled>
+        <enabled>true</enabled>
     </classAccesses>
     <custom>true</custom>
     <fieldPermissions>
         <editable>true</editable>
+        <field>Account.External_Id__c</field>
+        <readable>true</readable>
+    </fieldPermissions>
+    <fieldPermissions>
+        <editable>true</editable>
         <field>Account.Shipping_Location__c</field>
         <readable>true</readable>
     </fieldPermissions>