Reino: API Abuse

Uma API é um contrato entre quem chama e o que se chama. As formas mais comuns de abuso de API ocorrem quando o responsável pela chamada não respeita sua parte do contrato. Por exemplo, se um programa não chama chdir() após chamar chroot(), ele viola o contrato que especifica como alterar o diretório raiz ativo de forma segura. Outro bom exemplo de abuso de biblioteca é esperar que o elemento chamado retorne informações confiáveis de DNS ao responsável pela chamada. Nesse caso, o responsável pela chamada abusa a API do elemento chamado ao fazer certas suposições sobre seu comportamento (isto é, que o valor de retorno pode ser usado para fins de autenticação). A outra parte também pode violar o contrato entre quem chama e o que se chama. Por exemplo, se um programador definir SecureRandom como subclasse e retornar um valor não aleatório, o contrato será violado.

Object Model Violation: Just one of restoreState() and saveState() Defined

Abstract
Essa classe substitui apenas saveState() ou restoreState().
Explanation
Qualquer classe que herda a interface StateHolder deve implementar tanto saveState(javax.faces.context.FacesContext) quanto restoreState(javax.faces.context.FacesContext, java.lang.Object) ou implementar nenhum dos dois. Como esses dois métodos têm uma relação fortemente acoplada, não é permitido que os métodos saveState(javax.faces.context.FacesContext) e restoreState(javax.faces.context.FacesContext, java.lang.Object) residam em diferentes níveis da hierarquia de herança.

Exemplo 1: A classe a seguir define saveState() e não restoreState() e, por isso, é sempre um erro, não importa o que qualquer classe que a estende
possa fazer.

public class KibitzState implements StateHolder {
public Object saveState(FacesContext fc) {
...
}
}
References
[1] Sun Microsystems JavaDoc for StateHolder Interface
[2] Standards Mapping - Common Weakness Enumeration CWE ID 398
desc.structural.java.object_model_violation_just_one_of_restoreState_saveState_defined