persistence@glassfish.java.net

Re: _at_OneToMany - _at_ManyToOne WebService and _at_XmlRootElement

From: kriskross <kristian_at_smartere.no>
Date: Wed, 19 Sep 2007 22:27:48 -0700 (PDT)

Three classes and the stack trace. The sessions is default
sessions-from-entityclasses they are not included.
The webservice has four methods.
1. Test() - creates a new Parent and return a String with id and name
2. Test2() - finds the Parent with Id 2, and creates and add a child
3. getParent1 - finds a parent and returns the id & name + id & name for
childs
4. getParent2 - finds a parent and return it.
Now when I test this in order. Step 1 - 2 - 3 works perfectly, and the sql
and data in tables looks nice.
But 4 - gives error.


javax.xml.ws.WebServiceException
        at
com.sun.xml.ws.message.jaxb.JAXBMessage.writePayloadTo(JAXBMessage.java:300)
        at
com.sun.xml.ws.message.AbstractMessageImpl.writeTo(AbstractMessageImpl.java:171)
        at
com.sun.xml.ws.message.AbstractMessageImpl.readAsSOAPMessage(AbstractMessageImpl.java:193)
        at
com.sun.enterprise.webservice.SOAPMessageContextImpl.getMessage(SOAPMessageContextImpl.java:87)
        at
com.sun.enterprise.webservice.monitoring.MessageTraceImpl.setMessageContext(MessageTraceImpl.java:124)
        at
com.sun.enterprise.webservice.monitoring.JAXWSEndpointImpl.processResponse(JAXWSEndpointImpl.java:105)
        at
com.sun.enterprise.webservice.MonitoringPipe.process(MonitoringPipe.java:155)
        at
com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:115)
        at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:595)
        at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:554)
        at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:539)
        at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:436)
        at
com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.process(AbstractTubeImpl.java:106)
        at
com.sun.xml.ws.tx.service.TxServerPipe.process(TxServerPipe.java:317)
        at
com.sun.enterprise.webservice.CommonServerSecurityPipe.processRequest(CommonServerSecurityPipe.java:218)
        at
com.sun.enterprise.webservice.CommonServerSecurityPipe.process(CommonServerSecurityPipe.java:129)
        at
com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:115)
        at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:595)
        at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:554)
        at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:539)
        at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:436)
        at
com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:243)
        at
com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:444)
        at
com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:244)
        at
com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:135)
        at
com.sun.enterprise.webservice.Ejb3MessageDispatcher.handlePost(Ejb3MessageDispatcher.java:113)
        at
com.sun.enterprise.webservice.Ejb3MessageDispatcher.invoke(Ejb3MessageDispatcher.java:87)
        at
com.sun.enterprise.webservice.EjbWebServiceServlet.dispatchToEjbEndpoint(EjbWebServiceServlet.java:200)
        at
com.sun.enterprise.webservice.EjbWebServiceServlet.service(EjbWebServiceServlet.java:129)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
        at
com.sun.enterprise.web.AdHocContextValve.invoke(AdHocContextValve.java:114)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:87)
        at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
        at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
        at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
        at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
        at
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:270)
        at
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
        at
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
        at
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
        at
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:339)
        at
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:261)
        at
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:212)
        at
com.sun.enterprise.web.portunif.PortUnificationPipeline$PUTask.doTask(PortUnificationPipeline.java:361)
        at
com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
        at
com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
Caused by: javax.xml.bind.MarshalException
 - with linked exception:
[com.sun.istack.SAXException2: A cycle is detected in the object graph. This
will cause infinitely deep XML: entity.Parent_at_10ba2d1 -> entity.Child_at_ee791d
-> entity.Parent_at_10ba2d1]
        at
com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:282)
        at
com.sun.xml.bind.v2.runtime.BridgeImpl.marshal(BridgeImpl.java:110)
        at com.sun.xml.bind.api.Bridge.marshal(Bridge.java:178)
        at
com.sun.xml.ws.message.jaxb.JAXBMessage.writePayloadTo(JAXBMessage.java:294)
        ... 54 more
Caused by: com.sun.istack.SAXException2: A cycle is detected in the object
graph. This will cause infinitely deep XML: entity.Parent_at_10ba2d1 ->
entity.Child_at_ee791d -> entity.Parent_at_10ba2d1
        at
com.sun.xml.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:244)
        at
com.sun.xml.bind.v2.runtime.XMLSerializer.pushObject(XMLSerializer.java:533)
        at
com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:627)
        at
com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:150)
        at
com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:322)
        at
com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:681)
        at
com.sun.xml.bind.v2.runtime.property.ArrayElementNodeProperty.serializeItem(ArrayElementNodeProperty.java:65)
        at
com.sun.xml.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(ArrayElementProperty.java:168)
        at
com.sun.xml.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:152)
        at
com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:322)
        at
com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:681)
        at
com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:150)
        at
com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:322)
        at
com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:681)
        at
com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:277)
        ... 57 more
Cannot log SOAP Message null
invocation error on ejb endpoint testWS at /testWSService/testWS :
javax.xml.bind.MarshalException
 - with linked exception:
[com.sun.istack.SAXException2: A cycle is detected in the object graph. This
will cause infinitely deep XML: entity.Parent_at_10ba2d1 -> entity.Child_at_ee791d
-> entity.Parent_at_10ba2d1]
javax.xml.ws.WebServiceException: javax.xml.bind.MarshalException
 - with linked exception:
[com.sun.istack.SAXException2: A cycle is detected in the object graph. This
will cause infinitely deep XML: entity.Parent_at_10ba2d1 -> entity.Child_at_ee791d
-> entity.Parent_at_10ba2d1]
        at
com.sun.xml.ws.message.jaxb.JAXBMessage.writePayloadTo(JAXBMessage.java:317)
        at
com.sun.xml.ws.message.AbstractMessageImpl.writeTo(AbstractMessageImpl.java:142)
        at
com.sun.xml.ws.encoding.StreamSOAPCodec.encode(StreamSOAPCodec.java:108)
        at
com.sun.xml.ws.encoding.SOAPBindingCodec.encode(SOAPBindingCodec.java:265)
        at
com.sun.xml.ws.transport.http.HttpAdapter.encodePacket(HttpAdapter.java:320)
        at
com.sun.xml.ws.transport.http.HttpAdapter.access$100(HttpAdapter.java:93)
        at
com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:454)
        at
com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:244)
        at
com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:135)
        at
com.sun.enterprise.webservice.Ejb3MessageDispatcher.handlePost(Ejb3MessageDispatcher.java:113)
        at
com.sun.enterprise.webservice.Ejb3MessageDispatcher.invoke(Ejb3MessageDispatcher.java:87)
        at
com.sun.enterprise.webservice.EjbWebServiceServlet.dispatchToEjbEndpoint(EjbWebServiceServlet.java:200)
        at
com.sun.enterprise.webservice.EjbWebServiceServlet.service(EjbWebServiceServlet.java:129)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
        at
com.sun.enterprise.web.AdHocContextValve.invoke(AdHocContextValve.java:114)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:87)
        at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
        at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
        at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
        at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
        at
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:270)
        at
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
        at
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
        at
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
        at
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:339)
        at
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:261)
        at
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:212)
        at
com.sun.enterprise.web.portunif.PortUnificationPipeline$PUTask.doTask(PortUnificationPipeline.java:361)
        at
com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
        at
com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
Caused by: javax.xml.bind.MarshalException
 - with linked exception:
[com.sun.istack.SAXException2: A cycle is detected in the object graph. This
will cause infinitely deep XML: entity.Parent_at_10ba2d1 -> entity.Child_at_ee791d
-> entity.Parent_at_10ba2d1]
        at
com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:282)
        at
com.sun.xml.bind.v2.runtime.BridgeImpl.marshal(BridgeImpl.java:100)
        at com.sun.xml.bind.api.Bridge.marshal(Bridge.java:141)
        at
com.sun.xml.ws.message.jaxb.JAXBMessage.writePayloadTo(JAXBMessage.java:310)
        ... 38 more
Caused by: com.sun.istack.SAXException2: A cycle is detected in the object
graph. This will cause infinitely deep XML: entity.Parent_at_10ba2d1 ->
entity.Child_at_ee791d -> entity.Parent_at_10ba2d1
        at
com.sun.xml.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:244)
        at
com.sun.xml.bind.v2.runtime.XMLSerializer.pushObject(XMLSerializer.java:533)
        at
com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:627)
        at
com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:150)
        at
com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:322)
        at
com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:681)
        at
com.sun.xml.bind.v2.runtime.property.ArrayElementNodeProperty.serializeItem(ArrayElementNodeProperty.java:65)
        at
com.sun.xml.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(ArrayElementProperty.java:168)
        at
com.sun.xml.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:152)
        at
com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:322)
        at
com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:681)
        at
com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:150)
        at
com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:322)
        at
com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:681)
        at
com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:277)
        ... 41 more




@WebService()
@Stateless()
public class testWS {

    @EJB
    session.ParentFacadeRemote pfr;
    
    @EJB
    session.ChildFacadeRemote cfr;
    
    /**
     * Web service operation
     */
    @WebMethod(operationName = "test")
    public String test() {
        Parent p = new Parent();
        p.setName("test1");
        pfr.create(p);
        String result = "";
        @SuppressWarnings("unchecked")
        List<Parent> pl = pfr.findAll();
        for(Parent pa : pl) {
            result += "|" + pa.getId() + " | " + pa.getName();
        }
        
        return result;
    }

/**
     * Web service operation
     */
    @WebMethod(operationName = "test2")
    public String test2() {
        Parent parent = pfr.find(new Integer(2));
        String result = "|" +parent.getId() + "-" + parent.getName() + "|";
        
        Child child = new Child();
        child.setName("Child1");
        child.setParent(parent);
        cfr.create(child);
        
        @SuppressWarnings("unchecked")
        List<Child> childList = cfr.findAll();
        for(Child child2 : childList) {
            parent.getChilds().add(child2);
        }
        pfr.edit(parent);
        
        Parent parent2 = pfr.find(new Integer(2));
        result += "|PARENT2:" +parent.getId() + "-" + parent.getName() +
"|";
        result += "CHILD:";
        for(Child c : parent2.getChilds()) {
            result += "c:" + c.getId() + "-" + c.getName();
        }
        return result;
    }

    /**
     * Web service operation
     */
    @WebMethod(operationName = "getParent2")
    public Parent getParent2(@WebParam(name = "id")
    Integer id) {
        Parent parent = pfr.find(id);
        return parent;
    }
    
    /**
     * Web service operation
     */
    @WebMethod(operationName = "getParent1")
    public String getParent1(@WebParam(name = "id")
    Integer id) {
        Parent parent = pfr.find(id);
        String r = "|" + parent.getId() + "-" + parent.getName();
        for(Child child : parent.getChilds()) {
            r += "" + child.getId() + "|" + child.getName() + "<br>";
        }
        return r;
    }

}


@Entity
public class Parent implements Serializable {
    private static final long serialVersionUID = 1L;
    private Integer id;
    
    private String name;
    
    private List<Child> childs;

    public void setId(Integer id) {
        this.id = id;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Integer getId() {
        return id;
    }

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "parent", fetch =
FetchType.EAGER)
    public List<Child> getChilds() {
        return childs;
    }

    public void setChilds(List<Child> childs) {
        this.childs = childs;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    
}


@Entity
public class Child implements Serializable {
    private static final long serialVersionUID = 1L;
    private Integer id;
    
    String name;
    
    Parent parent;

    public void setId(Integer id) {
        this.id = id;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Integer getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @ManyToOne
    @JoinColumn(name = "parent_id")
    public Parent getParent() {
        return parent;
    }

    public void setParent(Parent parent) {
        this.parent = parent;
    }
    
}






James Sutherland wrote:
>
> What errors do you get?
>
> Please include stack trace and what you did to get the error.
>
> ---
> http://wiki.java.net/bin/view/People/JamesSutherland James Sutherland
>
>
> kriskross wrote:
>>
>> Hi.
>> I have not bin able to solve this problem.
>> It's all about @OneToMany - @ManyToOne relations in entitys.
>> As long as I use my entitys in a session bean, there is no problem.
>> But, when I try to use them as objects in a webservice I'll get plenty of
>> errors.
>> I've tried serveral methods with @XmlRootElement and @XmlTransient with
>> no luck.
>>
>> Using the webservice I'm able to create objects, connect objects, but
>> when I try to recive an object from the db it allways gives errors.
>>
>> So, if you have anything, any tips or other questions, please let me
>> know. I've bin strugling with this for over a year now.
>>
>> Best Regards
>> Kristian
>>
>>
>> Marina Vatkina wrote:
>>>
>>> Hi,
>>>
>>> Did you solve your problem? If not, can you please explain what does it
>>> mean
>>> "does not set any Produkt"?
>>>
>>> thanks,
>>> -marina
>>>
>>> kriskross wrote:
>>>> Hi
>>>> Hope someone can helpe me. I'm stuck here.Having two objects:
>>>>
>>>> @XmlRootElement
>>>> @Entity
>>>> public class Produkt implements Serializable {
>>>>
>>>> @Id
>>>> @GeneratedValue(strategy = GenerationType.SEQUENCE, generator =
>>>> "Produkt_id_seq")
>>>> private Integer id;
>>>> ...
>>>> @XmlElement(name = "varelagers")
>>>> @OneToMany(cascade = CascadeType.ALL, mappedBy = "produkt", fetch =
>>>> FetchType.EAGER)
>>>> private List<Varelager> varelagers;
>>>>
>>>> public List<Varelager> getVarelager() {
>>>> return this.varelagers;
>>>> }
>>>> ..
>>>> }
>>>>
>>>>
>>>> and
>>>> @Entity
>>>> public class Varelager implements Serializable {
>>>> @Id
>>>> @GeneratedValue(strategy = GenerationType.SEQUENCE, generator =
>>>> "Varelager_id_seq")
>>>> private Integer id;
>>>>
>>>> ......
>>>>
>>>> @ManyToOne
>>>> @JoinColumn(name = "produkt_id")
>>>> private Produkt produkt;
>>>>
>>>> @ManyToOne
>>>> @JoinColumn(name = "storelse_id")
>>>> private Storelse storelse;
>>>>
>>>> public Produkt getProdukt() {
>>>> return produkt;
>>>> }
>>>>
>>>> public void setProdukt(Produkt produkt) {
>>>> this.produkt = produkt;
>>>> }
>>>> }
>>>>
>>>> I've created an webservice that exposes both produkt and varelager.
>>>> And I'm trying to add a "varelager" to "produkt", using the webservice.
>>>> But here my objects does not have all the same methods.
>>>> I'm missing Varelager.getProdukt(), and Varelager.setProdukt(Produkt
>>>> produkt).
>>>>
>>>> Anyone who can tell me why??
>>>>
>>>>
>>>> I've allso tried this as a workarround
>>>> Produkt p = webservice.getproddukt(new Integer(1));
>>>> Varelager vl = new Varelager();
>>>> vl = webservice.createVarelager(vl);
>>>> p.getVarelagers().add(vl);
>>>> webservice.editProdukt(p);
>>>>
>>>> This creates the varelager object, but does not set any Produkt.
>>>> Any other way?
>>>
>>>
>>
>>
>
>

-- 
View this message in context: http://www.nabble.com/%40OneToMany---%40ManyToOne-WebService-and-%40XmlRootElement-tf4405404.html#a12791120
Sent from the java.net - glassfish persistence mailing list archive at Nabble.com.