Salvar dados vindo de um webservice

Alguém pode me ajudar? Segui um tutorial para buscar o cep pelo webservice viacep funcionou corretamente gostaria de salvar esses dados da consulta no banco já pré-definido na minha aplicação. Tenho a classe Managed Bean Aluno onde faço as operações de crud, optei por utilizar a anotação @Embedded na classe Endereco. Ao salvar os dados de endereço não são salvos apenas os do aluno.

Minha classe Endereco
package modelo.dominio;

import javax.persistence.Column;
import javax.persistence.Embeddable;

import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

@Embeddable
public class Endereco {

@Column(name= "cep")
@SerializedName("cep")
@Expose
private String cep;

@Column(name= "logradouro")
@SerializedName("logradouro")
@Expose
private String logradouro;

@Column(name= "complemento")
@SerializedName("complemento")
@Expose
private String complemento;

@Column(name= "bairro")
@SerializedName("bairro")
@Expose
private String bairro;

@Column(name="localidade")
@SerializedName("localidade")
@Expose
private String localidade;

@Column(name= "uf")
@SerializedName("uf")
@Expose
private String uf;

@Column(name= "numero")
private Integer numero;

public Endereco() {
	super();
}

public Endereco(String cep, String logradouro, String complemento, String bairro, String localidade, String uf,
		Integer numero) {
	super();
	this.cep = cep;
	this.logradouro = logradouro;
	this.complemento = complemento;
	this.bairro = bairro;
	this.localidade = localidade;
	this.uf = uf;
	this.numero = numero;
}



public String getCep() {
	return cep;
}

public void setCep(String cep) {
	this.cep = cep;
}

public String getLogradouro() {
	return logradouro;
}

public void setLogradouro(String logradouro) {
	this.logradouro = logradouro;
}

public String getComplemento() {
	return complemento;
}

public void setComplemento(String complemento) {
	this.complemento = complemento;
}

public String getBairro() {
	return bairro;
}

public void setBairro(String bairro) {
	this.bairro = bairro;
}

public String getLocalidade() {
	return localidade;
}

public void setLocalidade(String localidade) {
	this.localidade = localidade;
}

public String getUf() {
	return uf;
}

public void setUf(String uf) {
	this.uf = uf;
}


public Integer getNumero() {
	return numero;
}

public void setNumero(Integer numero) {
	this.numero = numero;
}

@Override
public String toString() {
	return new ToStringBuilder(this).append("cep", cep).append("logradouro", logradouro)
			.append("complemento", complemento).append("bairro", bairro).append("localidade", localidade)
			.append("uf", uf).toString();
}

@Override
public int hashCode() {
	return new HashCodeBuilder().append(bairro).append(complemento).append(cep).append(uf).append(localidade)
			.append(logradouro).toHashCode();
}

@Override
public boolean equals(Object other) {
	if (other == this) {
		return true;
	}
	if ((other instanceof Endereco) == false) {
		return false;
	}
	Endereco rhs = ((Endereco) other);
	return new EqualsBuilder().append(bairro, rhs.bairro).append(complemento, rhs.complemento).append(cep, rhs.cep)
			.append(uf, rhs.uf).append(localidade, rhs.localidade).append(logradouro, rhs.logradouro).isEquals();
}

}

Mimha classe de Servico

package controle;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;

import modelo.dominio.Endereco;
import webservice.ServicoEndereco;

@ManagedBean(name = “cepMB”)
@SessionScoped
public class CepMB implements Serializable{
private static final long serialVersionUID = -7312656320297107777L;

private List<Endereco> lista = new ArrayList<Endereco>();
private Endereco endereco;
private String cep;

private ServicoEndereco servico = new ServicoEndereco();

public Endereco carregarEndereco() {
	endereco = new Endereco();
	Client cli = Client.create();
	WebResource wr = cli.resource("https://viacep.com.br/ws/" + this.getCep() + "/json/");
	System.out.println("Chamando WebService...");
	this.endereco = servico.buscarEnderecoPor(wr.get(String.class));
	String JSON = wr.get(String.class);
	System.out.println(JSON);
	return this.getEndereco();
}

public List<Endereco> getLista(){
	return lista;
}

public void setLista(List<Endereco> lista) {
	this.lista = lista;
}

public Endereco getEndereco() {
	return endereco;
}

public void setEndereco(Endereco endereco) {
	this.endereco = endereco;
}

public String getCep() {
	return cep;
}

public void setCep(String cep) {
	this.cep = cep;
}

public void limpar() {
	this.endereco = new Endereco();
}

}

Minha classe DAO

package controle;

import java.io.IOException;
import java.io.OutputStream;
import java.io.Serializable;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;

import org.primefaces.model.UploadedFile;

import modelo.dominio.Aluno;
import modelo.dominio.Turno;
import modelo.dao.AlunoDAO;
import modelo.dao.TurnoDAO;

@ManagedBean(name = “alunoMB”)
@SessionScoped
public class AlunoMB implements Serializable{

private static final long serialVersionUID = 1L;

@ManagedProperty(value = "#{loginMB}")
private LoginMB loginMB;

private List<Aluno> alunos = null;
private List<Turno> turnos = null;
private Aluno aluno = new Aluno();
private AlunoDAO dao = new AlunoDAO();

private Turno filtroTurno;
private String filtroNome;

private UploadedFile uploadedFile;


public String getContador() {

	if (this.aluno.getNome() == null)
		return "";

	return String.valueOf(this.aluno.getNome().length());
}

public void caixaAlta() {
	if (this.aluno.getNome() != null) {
		String maiusculas = this.aluno.getNome().toUpperCase();
		this.aluno.setNome(maiusculas);
	}
}

public Turno getFiltroTurno() {
	return filtroTurno;
}

public void setFiltroTurno(Turno filtroTurno) {
	this.filtroTurno = filtroTurno;
}

public String getFiltroNome() {
	return filtroNome;
}

public void setFiltroNome(String filtroNome) {
	this.filtroNome = filtroNome;
}

public LoginMB getLoginMB() {
	return loginMB;
}

public void setLoginMB(LoginMB loginMB) {
	this.loginMB = loginMB;
}


public Aluno getAluno() {
	return aluno;
}

public void setAluno(Aluno aluno) {
	this.aluno = aluno;
}

public List<Turno> getTurnos() {

	if (this.turnos == null) {
		TurnoDAO turnoDao = new TurnoDAO();
		this.turnos = turnoDao.lerTodos();
	}

	return turnos;
}

public void setTurnos(List<Turno> turnos) {
	this.turnos = turnos;
}

public UploadedFile getUploadedFile() {
	return uploadedFile;
}

public void setUploadedFile(UploadedFile uploadedFile) {
	this.uploadedFile = uploadedFile;
}

public List<Aluno> getAlunos() {

	if (this.alunos == null)
		this.alunos = this.dao.filtrar(filtroTurno, filtroNome);

	return alunos;
}

public void setAlunos(List<Aluno> alunos) {
	this.alunos = alunos;
}

// Métodos

public void acaoPesquisar() {
	this.alunos = null;
}

// Listar todos
public String acaoListar() {
	return "alunoListar.jsf?faces-redirect=true";
}

// Fazer cadastro
public String acaoAbrirInclusao() {
	return "alunoEditar.jsf";
}

// Alterar pela matricula
public String acaoAbrirAlteracao(Integer matricula) {

	this.aluno = this.dao.lerPorId(matricula);

	return "alunoEditar.jsf";
}

// Salvar imagem no banco
public String acaoSalvar() {
	byte[] foto = null;
	
	if (this.uploadedFile != null)
		foto = this.uploadedFile.getContents();

	if (foto != null)
		this.aluno.setFoto(foto);

	this.dao.salvar(this.aluno);

	return acaoListar();
}

// Excluir do banco
public String acaoExcluir(Integer matricula) {

	this.aluno = this.dao.lerPorId(matricula);
	
	this.dao.excluir(this.aluno);
	
	this.alunos = null;
	
	return acaoListar();
}

public void download() throws IOException {
	FacesContext contexto = FacesContext.getCurrentInstance();
	ExternalContext external = contexto.getExternalContext();
	OutputStream saida = external.getResponseOutputStream();

	// ler o código passado como parâmetro
	String matricula = external.getRequestParameterMap().get("matricula");
	Integer id = Integer.parseInt(matricula);
	
	external.responseReset();
	external.setResponseContentType("image/jpeg");
	external.setResponseHeader("Content-Disposition", "attachment; filename=foto-" + matricula + ".jpg");

	external.setResponseHeader("Cache-Control", "no-cache, no-store, must-revalidate");
	external.setResponseHeader("Pragma", "no-cache"); // HTTP 1.0
	external.setResponseHeader("Expires", "0"); // Proxies.


	Aluno aluno = dao.lerPorId(id);
	byte[] foto = aluno.getFoto();
	if (foto != null) {
		
		external.setResponseContentLength(foto.length);
		saida.write(foto);
	}

	contexto.responseComplete();
}

}