Eu desenvolvi uma DLL 32 bits com grande parte das rotinas da NF-e (Cte, mdfe e Gnre) do ACBR e as classes em Java, está funcionando bem, exceto pelo seguinte:
As vezes na transmissão da NF-e parece que não vem o retorno do sefaz, mas a NF-e é transmitida. Só que como não vem o retorno, a nota fica com status não transmitida para o cliente, que acaba tentando transmitir de novo aí retorna duplicidade. Com isso tenho que acessar o Sefaz baixar o XML e marcar a nota como transmitida no banco. Isso é muito chato.
Já tentei configurar aquele esquema de aguardarConsultaRet, não adiantou, para mim, isso só deixa a transmissão mais lenta.
Agora não sei se o problema é o fato de usar uma DLL delphi no Java ou isso acontece nos programas feitos em delphi também.
Sobre a DLL, ela tem funções que preenchem o componente da NFe e essas funções sempre retornam alguma informação que pode ser tratada no Java.
Por exemplo na hora de transmitir, a função transmite e retorna para o Java uma string com o Código do retorno do Sefaz, a descrição (xmotivo), chave, protocolo... separados por | (pipe), bastando tratar essa mensagem. É simples, qualquer programador delphi/java faz.