I've got very basic experience in apex codes and pretty much cloned an existing one developed for us and modified it to run a similar process. I'm now stuck in terms of how I can go about fixing this issue.
I'm getting a code coverage of only 8% with one of my apex classes and wanting to know how I can fix this/increase this. When I run a test on the class I receive the following error message:
Error: System.NullPointerException: null input to JSON parser
Stack Trace: (System Code) Class.ParFX_FH_PC_PDF_ctr.unpack_form_data: line 39, column 1 Class.ParFX_PDF_Test2.PrimeClient: line 342, column 1
I previously had the same error when attempting to run the VF page which is linked to this class, but that seems to be working. Any ideas why I'm receiving this message?
This is the class I'm attempting to fix (I've noted where line 39 is in the code):
public class ParFX_FH_PC_PDF_ctr {
public ParFX_PrimeClient_App_Forms__c app_form;
private Account account;
private Contact user;
private String submitter_name;
private Datetime submit_date;
private Map<String,String> form_data;
private List<Map<String,String>> primary_bank_reps;
private List<Map<String,String>> contingency_bank_reps;
private List<Map<String,String>> desk_groups;
private List<Map<String,String>> authorised_persons;
private List<Map<String,String>> network_support_contacts;
private List<Map<String,String>> application_support_contacts;
private List<Map<String,String>> trading_support_contacts;
private List<Map<String,String>> pm_contacts;
public ParFX_FH_PC_PDF_ctr() {
}
public ParFX_FH_PC_PDF_ctr(ApexPages.StandardController stdController) {
ParFX_PrimeClient_App_Forms__c af = (ParFX_PrimeClient_App_Forms__c)stdController.getRecord();
this.unpack_form_data(af.Id);
}
public void unpack_form_data(Id afi) {
for(ParFX_PrimeClient_App_Forms__c afm:[select Id,Name,user_name__c,Form_Template__c,CreatedDate,Revision__c,Submitter_Name__c,Form_Data__c,Reps1__c,Reps2__c,Reps3__c,Reps4__c,Reps5__c,Reps6__c from ParFX_PrimeClient_App_Forms__c where Id=:afi limit 1]) {
app_form = afm;
String user_name_text = app_form.user_name__c;
submitter_name = app_form.Submitter_Name__c;
submit_date = app_form.CreatedDate;
for(Contact ct:[select Id,Name,AccountId,ParFX_Username__c,LastName,FirstName,Email,Title,Phone from Contact where ParFX_Username__c=:user_name_text limit 1]) {
user=ct;
}
form_data = (Map<String,String>)JSON.deserialize(app_form.Form_Data__c, Map<String,String>.class);
if(app_form.Form_Template__c == 'Firm') {
primary_bank_reps = (List<Map<String,String>>)JSON.deserialize(app_form.Reps1__c, List<Map<String,String>>.class);
contingency_bank_reps = (List<Map<String,String>>)JSON.deserialize(app_form.Reps2__c, List<Map<String,String>>.class);
system.debug('*****'+app_form.reps3__c);
system.debug('*****'+List<Map<String,String>>.class);
LINE 39 > desk_groups = (List<Map<String,String>>)JSON.deserialize(app_form.Reps3__c, List<Map<String,String>>.class);
}
else if(app_form.Form_Template__c == 'Contacts') {
authorised_persons = (List<Map<String,String>>)JSON.deserialize(app_form.Reps1__c, List<Map<String,String>>.class);
network_support_contacts = (List<Map<String,String>>)JSON.deserialize(app_form.Reps3__c, List<Map<String,String>>.class);
application_support_contacts = (List<Map<String,String>>)JSON.deserialize(app_form.Reps4__c, List<Map<String,String>>.class);
trading_support_contacts = (List<Map<String,String>>)JSON.deserialize(app_form.Reps5__c, List<Map<String,String>>.class);
pm_contacts = (List<Map<String,String>>)JSON.deserialize(app_form.Reps6__c, List<Map<String,String>>.class);
}
}
}
public String getFormTemplate() {
return ( null==app_form || null==app_form.Form_Template__c ? 'None' : app_form.Form_Template__c);
}
public String firm_row_simple(String lbl,String v) {
String[] ftls = new List<String>();
ftls.add('<tr><td class="tc0"><p><span class="c0L">'+lbl+'</span></p><p><span class="c0"></span></p></td><td colspan="3" class="tc"><p><span>');
ftls.add(v);
ftls.add('</span></p></td></tr>');
return String.join(ftls,'');
}
//********************** ParFX Client Application – Prime Client Firm Hierarchy Form
public String getFirmTbl() {
String[] ftls = new List<String>();
ftls.add('<tr class="c-lbls"><td rowspan="2" class="tc0"><p><span>Firm</span></p></td>');
ftls.add('<td colspan="2" class="tc"><p><span>Firm Entity Name</span></p></td><td class="tc"><p><span>LEI</span></p></td></tr>');
ftls.add( sp_prov_row( form_data.get('firm_entity_name'), form_data.get('lei')) );
ftls.add( gen_ctact_row('Principal Business contact',form_data.get('contact_business_first_name'), form_data.get('contact_business_last_name'), form_data.get('contact_business_job_title'), form_data.get('contact_business_email'), form_data.get('contact_business_tel'),2) );
ftls.add( gen_ctact_row('Lead Technical contact',form_data.get('contact_technical_first_name'), form_data.get('contact_technical_last_name'), form_data.get('contact_technical_job_title'), form_data.get('contact_technical_email'), form_data.get('contact_technical_tel'),2) );
ftls.add( gen_ctact_row('Lead Compliance contact',form_data.get('contact_compliance_first_name'), form_data.get('contact_compliance_last_name'), form_data.get('contact_compliance_job_title'), form_data.get('contact_compliance_email'), form_data.get('contact_compliance_tel'),2) );
ftls.add( gen_ctact_row('Lead Legal contact',form_data.get('contact_legal_first_name'), form_data.get('contact_legal_last_name'), form_data.get('contact_legal_job_title'), form_data.get('contact_legal_email'), form_data.get('contact_legal_tel'),2) );
ftls.add( gen_ctact_row('Lead Risk contact',form_data.get('contact_risk_first_name'), form_data.get('contact_risk_last_name'), form_data.get('contact_risk_job_title'), form_data.get('contact_risk_email'), form_data.get('contact_risk_tel'),2) );
return String.join(ftls,'');
}
public String sp_lbl_row() {
String[] ftls = new List<String>();
ftls.add('<td class="tc"><p><span>Name /Job Title</span></p></td><td class="tc"><p><span>E-mail</span></p></td><td class="tc"><p><span>Phone</span></p></td></tr>');
return String.join(ftls,'');
}
public String sp_prov_row(String name,String bic) {
String[] ftls = new List<String>();
ftls.add('<tr class="c-data"><td colspan="2" class="tc"><p><span>');
ftls.add(name);
ftls.add('</span></p></td>');
ftls.add('<td class="tc"><p><span>');
ftls.add(bic);
ftls.add('</span></p></td></tr>');
return String.join(ftls,'');
}
public String sp_ctct_row(String first_name,String last_name,String job,String email,String phone) {
String[] ftls = new List<String>();
ftls.add('<tr class="c-data"><td class="tc"><p><span>');
ftls.add(first_name);
ftls.add(' ');
ftls.add(last_name);
ftls.add('<div class="job-ttl">');
ftls.add(job);
ftls.add('</div></span></p></td><td class="tc"><p><span>');
ftls.add(email);
ftls.add('</span></p></td><td class="tc"><p><span>');
ftls.add(phone);
ftls.add('</span></p></td></tr>');
return String.join(ftls,'');
}
public String getPrimaTbl() {
String[] ftls = new List<String>();
ftls.add('<tr class="c-lbls"><td rowspan="2" class="tc0"><p><span>Primary bank</span></p></td>');
ftls.add('<td colspan="2" class="tc"><p><span>Primary Bank Name</span></p></td><td class="tc"><p><span>Primary Bank SWIFT BIC (if applicable)</span></p></td></tr>');
ftls.add( sp_prov_row( form_data.get('primary_bank'), form_data.get('primary_bank_swift_bic')) );
Integer i = 0;
for(Map<String,String> p_b:primary_bank_reps) {
i++;
ftls.add('<tr class="c-lbls">');
if(i==1) ftls.add('<td rowspan="'+(2*primary_bank_reps.size())+'" class="tc0"><p><span>Primary bank representatives</span></p></td>');
ftls.add( sp_lbl_row() );
ftls.add( sp_ctct_row( p_b.get('primary_bank_rep_first_name'), p_b.get('primary_bank_rep_last_name'), p_b.get('primary_bank_rep_job_title'), p_b.get('primary_bank_rep_email'), p_b.get('primary_bank_rep_tel')) );
}
return String.join(ftls,'');
}
public String gen_3col_row(String lbl0,String lbl1,String lbl2,String lbl3,String dta1,String dta2,String dta3) {
String[] ftls = new List<String>();
ftls.add('<tr class="c-lbls"><td rowspan="2" class="tc0"><p><span>'+lbl0+'</span></p></td>');
ftls.add('<td class="tc"><p><span>'+lbl1+'</span></p></td>');
ftls.add('<td class="tc"><p><span>'+lbl2+'</span></p></td>');
ftls.add('<td class="tc"><p><span>'+lbl3+'</span></p></td></tr>');
ftls.add('<tr class="c-data"><td class="tc"><p><span>');
ftls.add(dta1);
ftls.add('</span></p></td><td class="tc"><p><span>');
ftls.add(dta2);
ftls.add('</span></p></td><td class="tc"><p><span>');
ftls.add(dta3);
ftls.add('</span></p></td></tr>');
return String.join(ftls,'');
}
public String gen_2on3col_row(String lbl0,String lbl1,String lbl2,String dta1,String dta2) {
String[] ftls = new List<String>();
ftls.add('<tr class="c-lbls"><td rowspan="2" class="tc0"><p><span>'+lbl0+'</span></p></td>');
ftls.add('<td colspan="2" class="tc"><p><span>'+lbl1+'</span></p></td>');
ftls.add('<td class="tc"><p><span>'+lbl2+'</span></p></td></tr>');
ftls.add('<tr class="c-data"><td colspan="2" class="tc"><p><span>');
ftls.add(dta1);
ftls.add('</span></p></td><td class="tc"><p><span>');
ftls.add(dta2);
ftls.add('</span></p></td></tr>');
return String.join(ftls,'');
}
public String gen_4col_row(String lbl0,String lbl1,String lbl2,String lbl3,String lbl4,String dta1,String dta2,String dta3,String dta4) {
String[] ftls = new List<String>();
ftls.add('<tr class="c-lbls"><td rowspan="2" class="tc0"><p><span>'+lbl0+'</span></p></td>');
ftls.add('<td class="tc"><p><span>'+lbl1+'</span></p></td>');
ftls.add('<td class="tc"><p><span>'+lbl2+'</span></p></td>');
ftls.add('<td class="tc"><p><span>'+lbl3+'</span></p></td>');
ftls.add('<td class="tc"><p><span>'+lbl4+'</span></p></td></tr>');
ftls.add('<tr class="c-data"><td class="tc"><p><span>');
ftls.add(dta1);
ftls.add('</span></p></td><td class="tc"><p><span>');
ftls.add(dta2);
ftls.add('</span></p></td><td class="tc"><p><span>');
ftls.add(dta3);
ftls.add('</span></p></td><td class="tc"><p><span>');
ftls.add(dta4);
ftls.add('</span></p></td></tr>');
return String.join(ftls,'');
}
public String gen_ctact_row(String lbl0,String first_name,String last_name,String job,String email,String phone,Integer n) {
String[] ftls = new List<String>();
ftls.add('<tr class="c-lbls">');
if(n>0) ftls.add('<td rowspan="'+n+'" class="tc0"><p><span>'+lbl0+'</span></p></td>');
ftls.add('<td class="tc"><p><span>Name /Job Title</span></p></td>');
ftls.add('<td class="tc"><p><span>E-mail</span></p></td>');
ftls.add('<td class="tc"><p><span>Phone</span></p></td></tr>');
ftls.add('<tr class="c-data"><td class="tc"><p><span>');
ftls.add(first_name);
ftls.add(' ');
ftls.add(last_name);
ftls.add('<div class="job-ttl">');
ftls.add(job);
ftls.add('</div></span></p></td><td class="tc"><p><span>');
ftls.add(email);
ftls.add('</span></p></td><td class="tc"><p><span>');
ftls.add(phone);
ftls.add('</span></p></td></tr>');
return String.join(ftls,'');
}
public String getContiTbl() {
String[] ftls = new List<String>();
ftls.add('<tr class="c-lbls"><td rowspan="2" class="tc0"><p><span>Contingency bank</span></p></td>');
ftls.add('<td colspan="2" class="tc"><p><span>Contingency Bank Name</span></p></td><td class="tc"><p><span>Contingency Bank SWIFT BIC (if applicable)</span></p></td></tr>');
ftls.add( sp_prov_row( form_data.get('contingency_bank'), form_data.get('contingency_bank_swift_bic')) );
Integer i = 0;
for(Map<String,String> c_b:contingency_bank_reps) {
i++;
ftls.add('<tr class="c-lbls">');
if(i==1) ftls.add('<td rowspan="'+(2*contingency_bank_reps.size())+'" class="tc0"><p><span>Contingency bank representatives</span></p></td>');
ftls.add( sp_lbl_row() );
ftls.add( sp_ctct_row( c_b.get('contingency_bank_rep_first_name'), c_b.get('contingency_bank_rep_last_name'), c_b.get('contingency_bank_rep_job_title'), c_b.get('contingency_bank_rep_email'), c_b.get('contingency_bank_rep_tel')) );
}
return String.join(ftls,'');
}
public String gen_5col_row(String lbl0,String lbl1,String lbl2,String lbl3,String dta1,String dta2,String dta3) {
String[] ftls = new List<String>();
ftls.add('<tr class="c-lbls"><td rowspan="2" class="tc0"><p><span>'+lbl0+'</span></p></td>');
ftls.add('<td class="tc"><p><span>'+lbl1+'</span></p></td>');
ftls.add('<td class="tc"><p><span>'+lbl2+'</span></p></td>');
ftls.add('<td class="tc"><p><span>'+lbl3+'</span></p></td></tr>');
ftls.add('<tr class="c-data"><td class="tc"><p><span>');
ftls.add(dta1);
ftls.add('</span></p></td><td class="tc"><p><span>');
ftls.add(dta2);
ftls.add('</span></p></td><td class="tc"><p><span>');
ftls.add(dta3);
ftls.add('</span></p></td></tr>');
return String.join(ftls,'');
}
public String gen_2on5col_row(String lbl0,String lbl1,String lbl2,String dta1,String dta2) {
String[] ftls = new List<String>();
ftls.add('<tr class="c-lbls"><td rowspan="2" class="tc0"><p><span>'+lbl0+'</span></p></td>');
ftls.add('<td colspan="2" class="tc"><p><span>'+lbl1+'</span></p></td>');
ftls.add('<td class="tc"><p><span>'+lbl2+'</span></p></td></tr>');
ftls.add('<tr class="c-data"><td colspan="2" class="tc"><p><span>');
ftls.add(dta1);
ftls.add('</span></p></td><td class="tc"><p><span>');
ftls.add(dta2);
ftls.add('</span></p></td></tr>');
return String.join(ftls,'');
}
public String gen_6col_row(String lbl0,String lbl1,String lbl2,String lbl3,String lbl4,String dta1,String dta2,String dta3,String dta4) {
String[] ftls = new List<String>();
ftls.add('<tr class="c-lbls"><td rowspan="2" class="tc0"><p><span>'+lbl0+'</span></p></td>');
ftls.add('<td class="tc"><p><span>'+lbl1+'</span></p></td>');
ftls.add('<td class="tc"><p><span>'+lbl2+'</span></p></td>');
ftls.add('<td class="tc"><p><span>'+lbl3+'</span></p></td>');
ftls.add('<td class="tc"><p><span>'+lbl4+'</span></p></td></tr>');
ftls.add('<tr class="c-data"><td class="tc"><p><span>');
ftls.add(dta1);
ftls.add('</span></p></td><td class="tc"><p><span>');
ftls.add(dta2);
ftls.add('</span></p></td><td class="tc"><p><span>');
ftls.add(dta3);
ftls.add('</span></p></td><td class="tc"><p><span>');
ftls.add(dta4);
ftls.add('</span></p></td></tr>');
return String.join(ftls,'');
}
public String gen_2ctact_row(String lbl0,String first_name,String last_name,String job,String email,String phone,Integer n) {
String[] ftls = new List<String>();
ftls.add('<tr class="c-lbls">');
if(n>0) ftls.add('<td rowspan="'+n+'" class="tc0"><p><span>'+lbl0+'</span></p></td>');
ftls.add('<td class="tc"><p><span>Name /Job Title</span></p></td>');
ftls.add('<td class="tc"><p><span>E-mail</span></p></td>');
ftls.add('<td class="tc"><p><span>Phone</span></p></td></tr>');
ftls.add('<tr class="c-data"><td class="tc"><p><span>');
ftls.add(first_name);
ftls.add(' ');
ftls.add(last_name);
ftls.add('<div class="job-ttl">');
ftls.add(job);
ftls.add('</div></span></p></td><td class="tc"><p><span>');
ftls.add(email);
ftls.add('</span></p></td><td class="tc"><p><span>');
ftls.add(phone);
ftls.add('</span></p></td></tr>');
return String.join(ftls,'');
}
public String getBranchTbl() {
String[] ftls = new List<String>();
ftls.add( gen_3col_row('Branch/regional entity','Name (eg. ABC London)','Four-letter code (eg. ABCL)','BIC',form_data.get('branch'),form_data.get('branch_code'),form_data.get('branch_swift_bic')) );
ftls.add( gen_ctact_row('Representative',form_data.get('branch_rep_first_name'),form_data.get('branch_rep_last_name'),form_data.get('branch_rep_job_title'),form_data.get('branch_rep_email'),form_data.get('branch_rep_tel'),2) );
return String.join(ftls,'');
}
public String getDeskTbl() {
String[] ftls = new List<String>();
for(Map<String,String> d_g:desk_groups) {
ftls.add( gen_2on3col_row('Desk Group Entity','Name','Four-letter code (eg. ABCL)',d_g.get('desk_group_name'),d_g.get('desk_group_code')) );
ftls.add( gen_ctact_row('Contact',d_g.get('desk_group_first_name'),d_g.get('desk_group_last_name'),d_g.get('desk_group_job_title'),d_g.get('desk_group_email'),d_g.get('desk_group_tel'),2) );
}
return String.join(ftls,'');
}
public String getSenderTbl() {
String[] ftls = new List<String>();
ftls.add( gen_4col_row('ParFX User','Name','Version','Date','',submitter_name,(null==app_form || null==app_form.Revision__c ? '': app_form.Revision__c.format() ),(submit_date.date()).format(),(null==app_form || null==app_form.user_name__c ? '': app_form.user_name__c)) );
return String.join(ftls,'');
}
//********************** ParFX Client Application – Prime Client User Contact Form
public String gen_trad_user_row(String first_name,String last_name,String tid,String email,String phone,String mobile) {
String[] ftls = new List<String>();
ftls.add('<tr class="c-lbls">');
ftls.add('<td class="tc"><p><span>Name</span></p></td>');
ftls.add('<td class="tc"><p><span>Trader ID</span></p></td>');
ftls.add('<td class="tc"><p><span>E-mail</span></p></td>');
ftls.add('<td class="tc"><p><span>Phone</span></p></td>');
ftls.add('<td class="tc"><p><span>Mobile</span></p></td></tr>');
ftls.add('<tr class="c-data"><td class="tc"><p><span>');
ftls.add(first_name);
ftls.add(' ');
ftls.add(last_name);
ftls.add('</span></p></td><td class="tc"><p><span>');
ftls.add(tid);
ftls.add('</span></p></td><td class="tc"><p><span>');
ftls.add(email);
ftls.add('</span></p></td><td class="tc"><p><span>');
ftls.add(phone);
ftls.add('</span></p></td><td class="tc"><p><span>');
ftls.add(mobile);
ftls.add('</span></p></td></tr>');
return String.join(ftls,'');
}
public String gen_user_row(String first_name,String last_name,String tid,String email,String phone,String mobile) {
String[] ftls = new List<String>();
ftls.add('<tr class="c-lbls">');
ftls.add('<td class="tc"><p><span>Name</span></p></td>');
ftls.add('<td class="tc"><p><span>E-mail</span></p></td>');
ftls.add('<td class="tc"><p><span>Phone</span></p></td>');
ftls.add('<td class="tc"><p><span>Mobile</span></p></td></tr>');
ftls.add('<tr class="c-data"><td class="tc"><p><span>');
ftls.add(first_name);
ftls.add(' ');
ftls.add(last_name);
ftls.add('</span></p></td><td class="tc"><p><span>');
ftls.add(email);
ftls.add('</span></p></td><td class="tc"><p><span>');
ftls.add(phone);
ftls.add('</span></p></td><td class="tc"><p><span>');
ftls.add(mobile);
ftls.add('</span></p></td></tr>');
return String.join(ftls,'');
}
public String getAuthPersTbl() {
String[] ftls = new List<String>();
Integer i = 0;
for(Map<String,String> r:authorised_persons) {
ftls.add( gen_trad_user_row( r.get('authorised_person_first_name'), r.get('authorised_person_last_name'), r.get('authorised_person_trader_id'), r.get('authorised_person_email'), r.get('authorised_person_tel'), r.get('authorised_person_mobile')) );
}
return String.join(ftls,'');
}
public String getNetSuppTbl() {
String[] ftls = new List<String>();
for(Map<String,String> r:network_support_contacts) {
ftls.add( gen_user_row( r.get('network_support_contact_first_name'), r.get('network_support_contact_last_name'), r.get('network_support_contact_trader_id'), r.get('network_support_contact_email'), r.get('network_support_contact_tel'), r.get('network_support_contact_mobile')) );
}
return String.join(ftls,'');
}
public String getAppSuppTbl() {
String[] ftls = new List<String>();
for(Map<String,String> r:application_support_contacts) {
ftls.add( gen_user_row( r.get('application_support_contact_first_name'), r.get('application_support_contact_last_name'), r.get('application_support_contact_trader_id'), r.get('application_support_contact_email'), r.get('application_support_contact_tel'), r.get('application_support_contact_mobile')) );
}
return String.join(ftls,'');
}
public String getTradeSuppTbl() {
String[] ftls = new List<String>();
for(Map<String,String> r:trading_support_contacts) {
ftls.add( gen_user_row( r.get('trading_support_contact_first_name'), r.get('trading_support_contact_last_name'), r.get('trading_support_contact_trader_id'), r.get('trading_support_contact_email'), r.get('trading_support_contact_tel'), r.get('trading_support_contact_mobile')) );
}
return String.join(ftls,'');
}
public String getPMTbl() {
String[] ftls = new List<String>();
for(Map<String,String> r:pm_contacts) {
ftls.add( gen_user_row( r.get('pm_contact_first_name'), r.get('pm_contact_last_name'), r.get('pm_contact_trader_id'), r.get('pm_contact_email'), r.get('pm_contact_tel'), r.get('pm_contact_mobile')) );
}
return String.join(ftls,'');
}
public String getPBEntity() {
String[] ftls = new List<String>();
String en = ( null==form_data || null==form_data.get('desk_group_entity_name') ? '' : form_data.get('desk_group_entity_name'));
ftls.add('<tr class="c-data"><td class="tc"><p><span>');
ftls.add(en);
ftls.add('</span></p></td></tr>');
return String.join(ftls,'');
}
}
Due to this error, it then ignores the remainder of the code when running the test class.
Cheers.
Attribution to: Jeff
Possible Suggestion/Solution #1
The error message:
Error: System.NullPointerException: null input to JSON parser
on line 39 is a pretty clear statement that app_form.Reps3__c
is null.
If you are getting this when you run a test, check that the test always defines a value for the Reps3__c
field. If your test is using the anti-pattern of SeeAllData=true
, then check that all referenced record have a non-null Reps3__c
field.
Outside of tests, you need to decide if a null Reps3__c
is valid or not and change your code appropriately. (The fact that your Visualforce failed sometimes suggests that you have data in your org that has null Reps3__c
.)
Attribution to: Keith C
This content is remixed from stackoverflow or stackexchange. Please visit https://salesforce.stackexchange.com/questions/32156