JAXB Unmarshaller - avax.xml.bind.UnmarshalException: unexpected element

Andyx1975

Mitglied
Hallo,

ich habe eine @post methode für einen Restful geschrieben, der einen per xml übermitteleten String in ein Objekt umwandeln soll. Hierzu verwende ich den Unmarshaller und bekomme den folgenden Fehler nicht behoben:

Java:
javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"dEmails"). Expected elements are <{}dEmail>
	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:642)
	at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:254)
	at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:249)
	at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:116)
	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:1049)
	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:478)
	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:459)
	at com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:148)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:506)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:376)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:602)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3063)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:881)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:116)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:488)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568)
	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:211)
	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:184)
	at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:157)
	at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:214)
	at com.uds.webadmin.server.CRestEmails.createEmail(CRestEmails.java:100)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
	at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185)
	at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
	at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288)
	at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
	at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
	at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
	at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
	at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469)
	at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400)
	at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349)
	at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339)
	at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
	at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
	at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:708)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)
	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at org.mortbay.jetty.Server.handle(Server.java:324)
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
	at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843)
	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
	at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
Dez 02, 2011 10:50:55 AM com.sun.jersey.spi.container.ContainerResponse mapMappableContainerException
Schwerwiegend: The exception contained within MappableContainerException could not be mapped to a response, re-throwing to the HTTP container
java.lang.UnsatisfiedLinkError: com.smartgwt.client.util.SC.say(Ljava/lang/String;)V
	at com.smartgwt.client.util.SC.say(Native Method)
	at com.uds.webadmin.server.CRestEmails.createEmail(CRestEmails.java:106)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
	at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185)
	at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
	at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288)
	at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
	at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
	at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
	at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
	at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469)
	at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400)
	at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349)
	at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339)
	at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
	at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
	at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:708)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)
	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at org.mortbay.jetty.Server.handle(Server.java:324)
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
	at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843)
	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
	at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)

Der XML String sieht wie folgt aus:
XML:
<dEmails>
<dEmail>
<email_text>test 1</email_text>
<email_type>Studiengangsinformation</email_type>
<toRecipients>andy@web.de</toRecipients>
<ccRecipients>andy@web.de</ccRecipients>
<bccRecipients>andy@web.de</bccRecipients>
<headline>test 1</headline>
<selfCopy>true</selfCopy>
<creator>Andy</creator>
<creation_date>null</creation_date>
</dEmail>
</dEmails>

die @POST Methode sieht wie folgt aus:
Java:
 @POST
    @Path( "create/email" )
    @Consumes(MediaType.APPLICATION_XML)
    @Produces( MediaType.APPLICATION_XML )
    public DEmail createEmail(String xml)
    {
        System.out.println("XML: " + xml);
        
        JAXBContext jaxbContext = null;
        DEmail email = null;
        
        try
        {

            jaxbContext = JAXBContext.newInstance(DEmail.class);
            Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
            email = (DEmail) unmarshaller.unmarshal(new StringReader(xml));

        }
        catch ( JAXBException e )
        {
            e.printStackTrace();
            SC.say( String.valueOf( e ));
        }
        return email;
    }

Meine Entety Klasse so:
Java:
package com.uds.webadmin.server;

import java.io.Serializable;
import java.lang.Boolean;
import java.lang.String;
import java.util.Date;

import javax.persistence.*;
import static javax.persistence.TemporalType.TIMESTAMP;
import javax.xml.bind.annotation.XmlRootElement;

/**
 * Entity implementation class for Entity: DEmail
 *
 */
@Entity
@XmlRootElement
@Table(name = "email_sended")
@NamedQuery(name = "findEmails", query = "SELECT e FROM DEmail e")
public class DEmail implements Serializable {

	
    @Id
    @GeneratedValue( strategy = GenerationType.SEQUENCE)
    @Column(columnDefinition="SERIAL")
    private long email_id;
	
	@Column
	private String to_recipients;
	
	@Column
	private String cc_recipients;
	
	@Column
	private String bcc_recipients;

    @Column
	private String headline;
	
	@Column(columnDefinition="TEXT")
	private String email_text;
	
	@Column
	private String email_type;
	
	@Column
	private Boolean self_copy;
	
	@Column
	private String creator;
	
	@Column
	@Temporal( TIMESTAMP )
    private Date creation_date;
	
	private static final long serialVersionUID = 1L;

	
	public DEmail() {
		super();
	}   
	

	
	public long getEmail_id() {
		return this.email_id;
	}

	public void setEmail_id(long email_id) {
		this.email_id = email_id;
	}   
	public String getto_recipients() {
		return this.to_recipients;
	}

	public void setto_recipients(String to_recipients) {
		this.to_recipients = to_recipients;
	}   
	public String getcc_recipients() {
		return this.cc_recipients;
	}

	public void setcc_recipients(String cc_recipients) {
		this.cc_recipients = cc_recipients;
	}   
	public String getbcc_recipients() {
		return this.bcc_recipients;
	}

	public void setbcc_recipients(String bcc_recipients) {
		this.bcc_recipients = bcc_recipients;
	}   
	public String getHeadline() {
		return this.headline;
	}

	public void setHeadline(String headline) {
		this.headline = headline;
	}   
	public String getText() {
		return this.email_text;
	}

	public void setText(String text) {
		this.email_text = text;
	}   
	public String getEmail_type() {
		return this.email_type;
	}

	public void setEmail_type(String email_type) {
		this.email_type = email_type;
	}   
	public Boolean getself_copy() {
		return this.self_copy;
	}

	public void setself_copy(Boolean self_copy) {
		this.self_copy = self_copy;
	}   
	public String getCreator() {
		return this.creator;
	}

	public void setCreator(String creator) {
		this.creator = creator;
	}   
	public Date getCreations_date() {
		return this.creation_date;
	}

	public void setCreations_date(Date creations_date) {
		this.creation_date = creations_date;
	}
   
}
 
Zuletzt bearbeitet von einem Moderator:
Ok habe die Lösung gefunden. Ich musste nur das <DEmails> weglassen, weil ich damit auf eine Liste verweise, in wirklichkeit mich aber nur auf ein Objekt beziehe Wenn ich den String wie folgt anpasse funktioniert es:

XML:
<?xml version="1.0" encoding="UTF-8"?>
<dEmail>
<email_text>test 1</email_text>
<email_type>Studiengangsinformation</email_type>
<toRecipients>andy@web.de</toRecipients>
<ccRecipients>andy@web.de</ccRecipients>
<bccRecipients>andy@web.de</bccRecipients>
<headline>test 1</headline>
<selfCopy>true</selfCopy>
<creator>Andy</creator>
<creation_date>null</creation_date>
</dEmail>
 
Zuletzt bearbeitet von einem Moderator:
Zurück