Então Lucas eu dei uma olhada lá e adaptei no meu projeto o exemplo que ele dá deu certo, mas quando uso uma classe do model que tem a tabela no meu banco de dados dá erro:
segue:
Do exemplo:
Obejto Item (Iguais na aplicação web e Desktop)
package br.com.caelum.example.model;
import com.thoughtworks.xstream.annotations.XStreamAlias;
@XStreamAlias("item")
public class Item {
private Integer id;
private String name;
private Double price;
public Item(String nome, Double preco) {
this.name = nome;
this.price = preco;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String nome) {
this.name = nome;
}
public Double getPrice() {
return price;
}
public void setPrice(Double preco) {
this.price = preco;
}
}
Controller Item
@Resource
public class ItemsController {
private final Database database;
private final Result result;
public ItemsController(Database database, Result result) {
this.database = database;
this.result = result;
}
@Get
@Path("/items")
public void list() {
List<Item> list = database.lista();
result.use(representation()).from(list, "items").serialize();
}
....
Database Item
package br.com.caelum.example.infra;
import java.util.ArrayList;
import java.util.List;
import br.com.caelum.example.model.Item;
import br.com.caelum.vraptor.ioc.ApplicationScoped;
import br.com.caelum.vraptor.ioc.Component;
@Component
@ApplicationScoped
public class Database {
private int contador = 0;
private final List<Item> items;
public Database() {
this.items = new ArrayList<Item>();
this.adiciona(new Item("Chave", 20.0));
this.adiciona(new Item("Lousa", 35.0));
}
public void adiciona(Item item) {
item.setId(++contador);
this.items.add(item);
}
public Item get(int id) {
if(id > this.items.size()) {
return null;
}
return this.items.get(id - 1);
}
public List<Item> lista() {
return items;
}
}
Na minha Aplicação Desktop:
public EcfCaixa() {
initComponents();
restfulie = Restfulie.custom();
restfulie.getMediaTypes().register(new XmlMediaType().withTypes(Item.class));
}
...
public void shouldBeAbleToGetAnItem() throws Exception {
Response response = restfulie.at("http://localhost:8080/CP/items").accept("application/xml").get();
List<Item> item = response.getResource();
for (Item itens : item) {
System.out.println(itens.getName());
}
}
Retorno:
Chave
Lousa
Classe que estou usando que esta dando erro:
Uf.java (Iguais na apliacação web e desktop)
package br.com.coliseu.model;
// Generated 18/06/2011 09:46:05 by Hibernate Tools 3.4.0.CR1
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import com.thoughtworks.xstream.annotations.XStreamAlias;
/**
* Uf generated by hbm2java
*/
@Entity
@Table(name = "uf", schema = "coliseusys")
@XStreamAlias("uf")
public class Uf implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private String uf;
private String nomeuf;
private String paissigla;
private String siglauf;
public Uf() {
}
public Uf(String uf, String nomeuf, String paissigla) {
this.uf = uf;
this.nomeuf = nomeuf;
this.paissigla = paissigla;
}
public Uf(String uf, String nomeuf, String paissigla, String siglauf) {
this.uf = uf;
this.nomeuf = nomeuf;
this.paissigla = paissigla;
this.siglauf = siglauf;
}
@Id
@Column(name = "uf", unique = true, nullable = false, length = 2)
public String getUf() {
return this.uf;
}
public void setUf(String uf) {
this.uf = uf;
}
@Column(name = "nomeuf", length = 60)
public String getNomeuf() {
return this.nomeuf;
}
public void setNomeuf(String nomeuf) {
this.nomeuf = nomeuf;
}
@Column(name = "paissigla",length = 2)
public String getPaissigla() {
return this.paissigla;
}
public void setPaissigla(String paissigla) {
this.paissigla = paissigla;
}
@Column(name = "siglauf", length = 2)
public String getSiglauf() {
return this.siglauf;
}
public void setSiglauf(String siglauf) {
this.siglauf = siglauf;
}
}
Controller:
@Resource
public class UfController {
private final UfRepository repository;
private final Result result;
public UfController(UfRepository repository, Result result) {
this.repository = repository;
this.result = result;
}
@Get
@Path("/uf/carregaUF")
public void carregaSubgrupoTeste() {
try {
List<Uf> list = repository.listCombo("uf");
result.use(representation()).from(list, "uf").serialize();
} catch (PersistenceException ex) {
result.include("cmbSubgrupo", null);
}
}
.....
Aqui no controller ele retorna a lista de uf certinho
Na aplicação Desktop:
....
Response response = restfulie.at("http://localhost:8080/CP/uf/carregaUF").accept("application/xml").get();
List<Uf> uf = response.getResource();
for (Uf itens : uf) {
System.out.println(itens.getNomeuf());
System.out.println(itens.getUf());
}
...
ele chama a aplicação web e tals, só na hora de retonar ele da esse erro:
Ago 21, 2012 6:59:34 PM br.com.arena.view.EcfCaixa jButton1ActionPerformed
Grave: null
com.thoughtworks.xstream.mapper.CannotResolveClassException: uf : uf
at com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:68)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:71)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.PackageAliasingMapper.realClass(PackageAliasingMapper.java:88)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.ClassAliasingMapper.realClass(ClassAliasingMapper.java:86)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.ArrayMapper.realClass(ArrayMapper.java:96)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.CachingMapper.realClass(CachingMapper.java:52)
at com.thoughtworks.xstream.core.util.HierarchicalStreams.readClassType(HierarchicalStreams.java:29)
at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:136)
at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:33)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:923)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:909)
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:853)
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:845)
at br.com.caelum.restfulie.mediatype.XmlMediaType.unmarshal(XmlMediaType.java:90)
at br.com.caelum.restfulie.http.apache.ApacheResponse.getResource(ApacheResponse.java:59)
at br.com.arena.view.EcfCaixa.shouldBeAbleToGetAnItem(EcfCaixa.java:288)
at br.com.arena.view.EcfCaixa.jButton1ActionPerformed(EcfCaixa.java:270)
at br.com.arena.view.EcfCaixa.access$300(EcfCaixa.java:26)
at br.com.arena.view.EcfCaixa$4.actionPerformed(EcfCaixa.java:166)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2713)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:680)
at java.awt.EventQueue$4.run(EventQueue.java:678)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Pode por gentileza me dar uma ajudinha?
Obrigado!