Java EE javax.xml.binden.MarshalException
Ich bin immer javax.xml.bind.MarshalException
Fehler. Ich sende Liste von meinen webservice an die backingbean und ich haben diesen Fehler.
WARNING: invocation error on ejb endpoint Login_webservice at /Login_webserviceService/Login_webservice : javax.xml.bind.MarshalException
- with linked exception:
[javax.xml.bind.JAXBException: class JPA.Cantable nor any of its super class is known to this context.]
javax.xml.ws.WebServiceException: javax.xml.bind.MarshalException
- with linked exception:
[javax.xml.bind.JAXBException: class JPA.Cantable nor any of its super class is known to this context.]
at com.sun.xml.ws.message.jaxb.JAXBMessage.writePayloadTo(JAXBMessage.java:325)
at com.sun.xml.ws.message.AbstractMessageImpl.writeTo(AbstractMessageImpl.java:142)
at com.sun.xml.ws.encoding.StreamSOAPCodec.encode(StreamSOAPCodec.java:109)
at com.sun.xml.ws.encoding.SOAPBindingCodec.encode(SOAPBindingCodec.java:278)
at com.sun.xml.ws.transport.http.HttpAdapter.encodePacket(HttpAdapter.java:380)
at com.sun.xml.ws.transport.http.HttpAdapter.access$100(HttpAdapter.java:92)
at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:525)
at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:285)
at com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:143)
at org.glassfish.webservices.Ejb3MessageDispatcher.handlePost(Ejb3MessageDispatcher.java:116)
at org.glassfish.webservices.Ejb3MessageDispatcher.invoke(Ejb3MessageDispatcher.java:87)
at org.glassfish.webservices.EjbWebServiceServlet.dispatchToEjbEndpoint(EjbWebServiceServlet.java:196)
at org.glassfish.webservices.EjbWebServiceServlet.service(EjbWebServiceServlet.java:127)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
Hier ist mein code:
Backing bean
@WebServiceRef(wsdlLocation = "http://localhost:26565/Login_webserviceService/Login_webservice?WSDL")
public String login() {
System.out.println("Login Phase entered");
int result = 0;
List list;
List finalList = null;
try {
Weblogin.LoginWebserviceService service = new Weblogin.LoginWebserviceService();
Weblogin.LoginWebservice port = service.getLoginWebservicePort();
result = port.login(voterID, password);
Weblogin.LoginWebservice port1 = service.getLoginWebservicePort();
list = port1.candDetails(1);
finalList = list;
this.setList(finalList);
} catch (Exception e) {
e.printStackTrace();
}
if (result == 1)
return "polling";
else
return "login";
}
Webservice
public List candDetails(int pollEvent) {
List resultList = null;
List finalList = null;
try {
if (pollEvent == 1) {
resultList = em.createNamedQuery("Cantable.findAll").getResultList();
finalList = resultList;
}
} catch (Exception e) {
e.printStackTrace();
}
return resultList;
}
- Bitte aktualisieren Sie Ihre Frage auf den gesamten stacktrace (formatiert!!). Überprüfen Sie die Rechte-Spalte-box für die Formatierung Regeln. Wählen Sie einfach code-block und dann drücken Sie
010101
Schaltfläche in der Symbolleiste oderCtrl+K
- Taste.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, dass das Problem irgendwie mit der JAX-WS und type substitution problem (es gibt viele thread über dieses problem auf den java.net Foren z.B. diese eine oder diese eine). In einer nussschale, JAXB ist nicht in der Lage, Marschall Klassen, die nicht referenziert sind explizit, wenn die
JAXBContext
erstellt wird, was der Fall fürCantable
hier.Bin ich mir nicht 100% sicher, dass dies das problem lösen, aber könnten Sie versuchen, einen parametrisierten
List
statt einer raw-Typ in Ihrem webservice:Folgenden bis auf Pascal ' s Antwort für eine ähnliche Frage auf der web-service-Seite, die parametrisierte Liste hat das problem nicht lösen, aber die @XmlSeeAlso annotation haben.
Dank Pascal!