obtendo o erro de primavera "o bean chamado 'x' deve ser do tipo [y], mas era realmente do tipo [$ proxy]" no jenkins
<p>estou depurando isso há algum tempo agora, e espero que alguém possa lançar alguma luz aqui.</p><p>eu tenho um projeto maven que é adicionado ao jenkins, usando o jdk 1.6. estou usando o aop neste projeto para lidar com a transação do banco de dados.</p><p>quando executo a compilação no jenkins, meu testcase falha com as seguintes exceções: -</p><pre><code>caused by: org.springframework.beans.factory.beancreationexception: error creating bean with name 'datahandlerclassificationimpl': injection of resource dependencies failed; nested exception is org.springframework.beans.factory.beannotofrequiredtypeexception: bean named 'writerdatalocationimpl' must be of type [xxx.script.writerdata], but was actually of type [$proxy17] ... ... caused by: org.springframework.beans.factory.beannotofrequiredtypeexception: bean named 'writerdatalocationimpl' must be of type [xxx.script.writerdata], but was actually of type [$proxy17] ... ... </code></pre><p>a classe <code>datahandlerclassificationimpl</code> se parece com isso: -</p><pre><code>@service public class datahandlerclassificationimpl extends datahandler { @resource(name="writerdatalocationimpl") private writerdata writerdata; ... } </code></pre><p><code>writerdata</code> é uma interface com múltiplas implementações.</p><p>eu sou capaz de executar o código sem problemas do ide. para determinar se é um problema do maven ou do jenkins, naveguei para a pasta de tarefas do projeto do jenkins usando a linha de comando e sou capaz de executar <code>mvn test</code> sem erros.</p><p>eu sei que o erro de proxy tem algo a ver com o aop, e que eu só posso conectar automaticamente a uma interface em vez de uma classe concreta ... mas esse não é o caso aqui, pois sou capaz de executar meu código muito bem fora do jenkins.</p><p>alguma ideia? obrigado.</p>
<p><em>trecho dos comentários da pergunta acima:</em></p><p>você está executando o cobertura, o sonar ou outra ferramenta de instrumentação de código no jenkins? observe que <code>mvn site</code> também pode ser configurado para incluir o relatório cobertura em <code>site</code> gerado.</p><p>o problema com o cobertura é que ele executa uma instrumentação de código de bytes bastante pesada, incluindo a adição de algumas interfaces personalizadas. quando o spring é iniciado, ele gera proxies para beans. se o bean tiver pelo menos uma interface, ele usará o proxy padrão java. caso contrário, ele tentará criar um proxy baseado em classe.</p><p>acho que, no seu caso, o proxy da classe cglib foi usado, mas após a instrumentação cobertura, a primavera voltou a java proxies. isso causou erro de inicialização porque a injeção de dependência esperava a classe (ou subclasse cglib)).</p><p>para encurtar a história, force os proxies da classe cglib e você ficará bem:</p><pre><code>&lt;aop:config proxy-target-class="true"/&gt; </code></pre>
<p>olá henrique!</p>
<p>esse erro ocorreu devido ao tipo de visibilidade da classe e dos atributos.</p>
<p>o que aconteceu é que você declarou a classe como <code>public</code>, onde todos podem acessar, mas os atributos, por não terem nenhuma visibilidade declarada, estavam como <code>package</code> (ou <code>default</code> ou <code>friendly</code>) que apenas classes dentro do mesmo pacote conseguem acessar. isso causou uma inconsistência no seu código.</p>
<p>quanto a segunda pergunta, o comum é sempre colocar uma visibilidade para suas classes e para seus atributos, salvos casos que apenas as classes de um determinado pacote podem ter acesso. teste o seguinte: coloque a visibilidade da classe e dos atributos como <code>public</code>. depois que os atributos estiverem públicos, tente remover a visibilidade da classe e veja o que acontece.</p>
<p>continuando o curso, você verá mais detalhes sobre o assunto, mas para mais informações, <a href="http://www.dsc.ufcg.edu.br/~jacques/cursos/p2/html/oo/visibilidade.htm" rel="nofollow">segue um link</a> onde encontra um compilado sobre o assunto.</p>
<p>espero ter ajudado!</p> <p>olá lars!</p>
<p>o <em>super</em> é utilizado como uma referência a classe pai. com ele você pode acessar seus métodos e atributos.</p>
<p>já sobre o o <em>getbonificacao()</em> acredito que daria erro em tempo de desenvolvimento. a assinatura teria que ser igual, não podendo ser alterada.</p>
<p>para ter certeza, faça o teste tentando alterar o método e veja se é possível fazer isso.</p>
<p>aguardo seu retorno!</p> <p>otávio,</p>
<p> permita-me reformular minha pergunta: a inversão de controle é a habilidade de criar e de gerenciar objetos de configuração, dao e pojos de um spring ou um laravel, no caso do php, da vida.</p>
<p> e, no caso do spring, para que sejam automaticamente gerenciados, devem ser anotados com &#64;bean.</p>
<p> ou não ?</p> <p>consegui resolver o erro na pipeline, por tentativa e erro coloquei o db\_host na .env como &#39;mysql&#39; e ele não reclamou no stage de build. mesmo assim ficando diferente do que foi passado pelo instrutor!</p> certifique-se que no seu servidor você tem apr-iconv instalado. Sem apr-iconv, Subversion não pode converter cadeias utf8 e irá lançar um erro se não conseguir fazê-lo.


Você também pode obter mais informações de log de erro do servidor. <p>consegui encontrar o erro. isto é, consegui encontrar onde estava o erro.
o erro estava no arquivo index.html, no ponto onde indico o arquivo javascript principal:</p>
<pre class="prettyprint"><code> &lt;script&gt;
 system.defaultjsextesions &#61; true;
 system.import(&#39;js/app.js&#39;).catch(err &#61;&gt; console.error(err));
 &lt;/script&gt;</code></pre><p>embora o código visível estava identico ao atual, acredito que havia algum caracter especial não imprimível que ocasionava o erro.
ao ponto que refiz o código o erro parou de ocorrer.</p> <p>dá true... 
consegui resolver aqui... refiz todo o curso a partir do início. e instalei novamente o hsqldb.jar.
não deu mais erro.
obrigado a todos pela ajuda!</p> <p>oi andré tudo bem?</p>
<p>verifique se o arquivo não foi salvo como .txt ao invés de .java</p>
<p>enquanto o professor não chega na parte da ide eclipse você pode também usar esse site <a href="https://www.jdoodle.com/online-java-compiler" rel="nofollow">https://www.jdoodle.com/online-java-compiler</a> para testar os códigos java.</p> boa noite jorge, 
já consegui… estava a tentar aceder pelo chrome (com android 8.1) e a porra da apn da vodafone estava a dar problemas. 
visto que não conseguia editar as apn´s de “origem” … adicionei uma exactamente igual à de origem, excepto que na parte do proxy… deixei em branco e pimba!!! 
pro… <p>olá rafael!</p>
<p>baixei seu projeto e encontrei os problemas que impedem a migração de acontecer.</p>
<p>primeiro de tudo, no seu contexto tem as duas propriedades relativas ao seu modelo que não tem as propriedades de <code>{ get; set; }</code>. nessa parte é só incluir:</p>
<pre class="prettyprint"><code>public dbset&lt;categoria&gt; dbcategoria { get; set; }
public dbset&lt;produto&gt; dbproduto { get; set; }</code></pre><p>com isso dará um erro dizendo sua classe categoria não tem uma chave primária. fui investigar e encontrei o <code>id</code> da sua classe de <code>categoria</code> sem o <code>set;</code>. também foi só adicionar e a partir daí funcionou.</p>
<p>espero ter ajudado! bons estudos!</p>