通过现有的实体类的会话bean 创建了一个web服务, 在findAll() 执行是报了以下错误:javax.xml.ws.WebServiceException
        at com.sun.xml.ws.message.jaxb.JAXBMessage.writePayloadTo(JAXBMessage.java:305)
        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)
         - with linked exception:
[com.sun.istack.SAXException2: 在对象图形中检测到循环。这将造成 XML 有无限深度: enta.Grade[gradeid=1] -> enta.Student[studentid=1] -> enta.Grade[gradeid=1]]
        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:299)
        ... 54 more
Caused by: com.sun.istack.SAXException2: 在对象图形中检测到循环。这将造成 XML 有无限深度: enta.Grade[gradeid=1] -> enta.Student[studentid=1] -> enta.Grade[gradeid=1]
        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)
               ... 57 more
Cannot log SOAP Message null
invocation error on ejb endpoint NewWebService at /NewWebServiceService/NewWebService : javax.xml.bind.MarshalException
 - with linked exception:
[com.sun.istack.SAXException2: 在对象图形中检测到循环。这将造成 XML 有无限深度: enta.Grade[gradeid=1] -> enta.Student[studentid=1] -> enta.Grade[gradeid=1]]
javax.xml.ws.WebServiceException: javax.xml.bind.MarshalException
 - with linked exception:
[com.sun.istack.SAXException2: 在对象图形中检测到循环。这将造成 XML 有无限深度: enta.Grade[gradeid=1] -> enta.Student[studentid=1] -> enta.Grade[gradeid=1]]
        at com.sun.xml.ws.message.jaxb.JAXBMessage.writePayloadTo(JAXBMessage.java:322)
        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:258)
        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:226)
        at com.sun.enterprise.webservice.EjbWebServiceServlet.service(EjbWebServiceServlet.java:155)
        Caused by: javax.xml.bind.MarshalException
 - with linked exception:
[com.sun.istack.SAXException2: 在对象图形中检测到循环。这将造成 XML 有无限深度: enta.Grade[gradeid=1] -> enta.Student[studentid=1] -> enta.Grade[gradeid=1]]
        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:315)
        ... 38 more
Caused by: com.sun.istack.SAXException2: 在对象图形中检测到循环。这将造成 XML 有无限深度: enta.Grade[gradeid=1] -> enta.Student[studentid=1] -> enta.Grade[gradeid=1]
        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.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

解决方案 »

  1.   

    感觉你返回的对象太大了,或者是有循环引用的情况,这样将对象序列化为xml时会报错。
      

  2.   

    我是在EJB 里建立了 一对多关系, 封装成 WEBSERVICE 就出错,EJB调用没有问题,这是怎么回事呢?
      

  3.   

    是关联映射的问题,弄清楚是双向还是单向。
    多对一,一端不要配置就可以。
    你可以查看sql语句,如果配置了,你调用一次查询它会执行许多没必要的查询,而且有重复