1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Duvida sobre Conversão XML para JPA e Vice e Versa.

Olá pessoal, criei uma classe Usando o BeanUtilsBean e o ConvertUtilsBean para realizar conversão do tipo JPA para XML e XML para JPA.

Exemplo:

Minha Generic Converter:

@SuppressWarnings({"unchecked","rawtypes"})
public class GenericConverter<T> extends AbstractConverter{

    private final Class<T> toClass;

    private BeanUtilsBean beanUtil;

    public GenericConverter(Class toClass, BeanUtilsBean beanUtil) {
        this.toClass = toClass;
        this.beanUtil = beanUtil;
    }

    @Override
    protected T convertToType( Class toClass, Object fromBean) throws Throwable {

        if (fromBean != null) {
            T toBean = (T) toClass.newInstance();
            System.out.println(toBean.getClass());
            beanUtil.copyProperties(toBean,fromBean);

            return toBean;
        }
        return null;
    }

    @Override
    protected Class getDefaultType() {
        return toClass;
    }

}

Minha Classe Registradora de meios de conversão:

public class ConvertersProvider {
public static BeanUtilsBean getBeanUtils() {

        BeanUtilsBean beanUtil = BeanUtilsBean.getInstance(); 

        ConvertUtilsBean convert = beanUtil.getConvertUtils();

        DateTimeConverter dtc = new DateConverter(null);
        dtc.setPattern("EEE MMM d HH:mm:ss z yyyy");
        convert.register(dtc, java.util.Date.class);

        //TO XML
        convert.register(new GenericConverter<com.br.pacote.jpa.classeX>(com.br.pacote.jpa.classeX.class,beanUtil), com.br.pacote.xml.classeX.class);


        //TO JPA 
        convert.register(new GenericConverter<com.br.pacote.xml.classeX>(com.br.pacote.xml.classeX.class,beanUtil), com.br.pacote.jpa.classeX.class);


        return beanUtil;
    }
}

Minha ClasseX Converter:

public class ClasseXConverter {

    private static BeanUtilsBean beanUtils = ConvertersProvider.getBeanUtils();

    public static com.br.pacote.jpa.ClasseX  classeXToJPA( com.br.pacote.xml.ClasseX xml){

        com.br.pacote.jpa.ClasseX jpa = new com.br.pacote.jpa.ClasseX();

        try {
            beanUtils.copyProperties(jpa,xml);

        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

        return jpa;
    }

        public static com.br.pacote.xml.ClasseX  classeXToXML( com.br.pacote.jpa.ClasseX jpa){

        com.br.pacote.xml.ClasseX xml = new com.br.pacote.xml.ClasseX();

        try {
            beanUtils.copyProperties(xml,jpa);

        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

        return xml;
    }

Minha Classe que gera o Client:

@WebService
public class ClasseXWS{

\\ metodos para exemplo:

@WebMethod
    public boolean validaClasseX(ClasseX classeX) throws PhoenixException {
        return 
ClasseXoBO.validaLogin(ClasseXConverter.classeXToJPA(classeX));
    }

@WebMethod 
    public ClasseX saveClasseX(ClasseX classeX, String documento) throws PhoenixUserException, PhoenixException {
        this.authentication();
        return 
ClasseXConverter.classeXToXML(ClasseXBO.saveClasseX(ClasseXConverter.classeXToJPA(classeX),documento));
    }

Obs:

Minha ClasseX.XML é uma classe sem nenhuma notação, minha ClasseX.JPA é uma classe com notações comuns do JPA.

Após isso :

Ao entrar com usuário e senha no sistema é exibido a mensagem:

org.apache.commons.beanutils.ConversionException: No value specified for com.br.pacote.classeX

Se eu apago a ClasseX do registro da classe ConverterProvider (conversora) consigo fazer o login mas ao executar uma funcionalidade que envolve "outra Classe que chama a Classe X" o sistema informa:

javax.xml.bind.JAXBException: "Classe envolvida na funcionalidade, que Chama a ClasseX"  nor any of its super class is known to this context.

Alguém tem noção de como solucionar isso, ou alguma outra maneira de fazer, pois estou a 3 dias parado nesse ponto. Ficarei muito grato pela ajuda.

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags xml jpa java conversão jaxb exception glassfish ou faça a sua própria pergunta.