I have a component that gets an instance custom Apex Class as an attribute, ie:

<apex:component controller="ComponentController">
    <apex:attribute name="myAttr" assignTo="{!attr}" type="MyApexClass" />


I also have this class:

public with sharing class MyApexClass{
    //lots of content

But, since I updated Eclipse to the latest version (Summer '14, API version 31) I get this error when I try to save the component (or a page on which the component is used): Compilation error: Type is not visible: myapexclass.

I've already tried making MyApexClass global, doing so does solve the problem, however, this is for managed package so I really want to avoid making anything global that doesn't logically have to be, especially because it does work if I use Eclipse for version 30.

  • 2
    Same problem here :-( But it's not connected to Eclipse as I can reproduce it within the Developer Console. Aug 12, 2014 at 14:24
  • 1
    Yeah, I got the same error on the developer console too. However, changing the pages or the component through the normal web interface does seem to work... Aug 15, 2014 at 13:35
  • 1
    I can't find the reference to this now, but it is a bug in the tooling API. If you can change Eclipse to use the metadata API instead, then you can bypass this.
    – Mike Ginou
    Mar 24, 2016 at 19:32
  • 1
    seems like this should be closed since Eclipse IDE has been retired
    – cropredy
    Oct 27, 2019 at 14:43
  • 1
    I wouldn't mind at all if this question gets closed. :) Oct 28, 2019 at 10:09

1 Answer 1


Please Find the solution.

 <apex:attribute name="myAttr" assignTo="{!attr}" type="MyApexClass" />

In this line attribute type should be object then it would work fine you can take reference from my code;

aura component

<apex:component controller="ComponentController">

   <aura:attribute name="check" type="object" description="" access="public"/>
    <h1>"{!v.check.accountList[0].Name}"</h1>//showing data


controller or helper

    var wrapperList=response.getReturnValue();

//apex class

public class Test {

public with sharing class wrapperList{

        public List<Account> accountList;

    public static wrapperList containerofList(){
        wrapperList obj=new wrapperList();

      list<Account> aclist = new list<Account>();

        aclist = [Select id,name from account limit 20];


     return obj;


Not the answer you're looking for? Browse other questions tagged .