users@jaxb.java.net

Re: Exception using JAXB with Struts

From: Ed Mooney <Ed.Mooney_at_Sun.COM>
Date: Wed, 05 Mar 2003 09:55:31 -0500

Hi Jeroen,

The bottom line seems to be that the Marshaller isn't happy either with
the well-formedness or content model of user. Adding
System.out.println(e.toString())to your catch block might provide clues.

How do you unmarshal the form instance?

Regards,
--
Ed Mooney         |Sun Microsystems, Inc.|Time flies like
Java Web Services |UBUR02-201            |an arrow, but
Ed.Mooney_at_Sun.COM |1 Network Drive       |fruit flies like
781-442-0459      |Burlington, MA  01803 |a banana. Groucho
Jeroen Breedveld wrote:
> Hi all,
>
> I'm trying to use JAXB in combination with Struts like this:
>
>     public class UserForm extends ActionForm {
>
>       private com.xhive.support.jaxb.User user;
>
>       public UserForm() {
>         System.out.println("in constructor");
>         try {
>           JAXBContext jc =
> JAXBContext.newInstance("com.xhive.support.jaxb");
>           user = new ObjectFactory().createUser();
>         } catch (JAXBException e) {
>           e.printStackTrace();
>         }
>       }
>     }
>
>
> the User class is created using JAXB and I use the constructor of the
> UserForm class to make an instance of the User class using the default
> factories.
> But when I marshall the User class instance to System.out I get the
> exception below. I added some debug output to check if the User class
> instance had any information in it I entered in form on a jsp. As you
> can see in the output the instance does have my information in it,
> namely "Jeroen Breedveld" which I entered in the form.
>
>     public class NewUserAction extends Action {
>
>       public ActionForward perform(ActionMapping mapping, ActionForm
> form, HttpServletRequest request, HttpServletResponse response) throws
> IOException, ServletException {
>         try {
>           JAXBContext jc =
> JAXBContext.newInstance("com.xhive.support.jaxb");
>           com.xhive.support.jaxb.User user = ((UserForm)
> form).getUser();
>           Marshaller m = jc.createMarshaller();
>           m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
>           System.out.println("user.getName()" + user.getName());
>           m.marshal(user, System.out);
>         } catch (JAXBException e) {
>           e.printStackTrace();
>         }
>         return mapping.findForward("user-home");
>       }
>     }
>
> Can anyone tell me what this exception "a required object is missing"
> means?
>
> Thanks and regards,
>
> Jeroen Breeveld
>
> output and exception:
>
> in constructor
> in constructor
> user.getName() Jeroen Breedveld
> DefaultValidationEventHandler: [ERROR]: a required object is missing
> DefaultValidationEventHandler: [ERROR]: a required object is missing
> com.sun.xml.bind.serializer.AbortSerializationException: a required
> object is mi
> ssing
>         at
> com.sun.xml.bind.marshaller.SAXMarshaller.reportError(SAXMarshaller.j
> ava:348)
>         at
> com.sun.xml.bind.marshaller.Util.handlePrintConversionException(Util.
> java:35)
>         at
> com.xhive.support.jaxb.impl.UserTypeImpl.serializeElements(UserTypeIm
> pl.java:402)
>         at
> com.xhive.support.jaxb.impl.UserImpl.serializeElements(UserImpl.java:
> 44)
>         at
> com.sun.xml.bind.marshaller.MarshallerImpl.write(MarshallerImpl.java:
> 140)
>         at
> com.sun.xml.bind.marshaller.MarshallerImpl.marshal(MarshallerImpl.jav
> a:112)
>         at
> javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshal
> lerImpl.java:73)
>         at
> com.xhive.support.NewUserAction.perform(NewUserAction.java:28)
>         at
> org.apache.struts.action.ActionServlet.processActionPerform(ActionSer
> vlet.java:1787)
>         at
> org.apache.struts.action.ActionServlet.process(ActionServlet.java:158
> 6)
>         at
> org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:510)
>
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>         at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
> icationFilterChain.java:247)
>         at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
> ilterChain.java:193)
>         at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
> alve.java:260)
>         at
> org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
> t.invokeNext(StandardPipeline.java:643)
>         at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
> a:480)
>         at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
>
>         at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
> alve.java:191)
>         at
> org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
> t.invokeNext(StandardPipeline.java:643)
>         at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
> a:480)
>         at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
>
>         at
> org.apache.catalina.core.StandardContext.invoke(StandardContext.java:
> 2396)
>         at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
> ava:180)
>         at
> org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
> t.invokeNext(StandardPipeline.java:643)
>         at
> org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatche
> rValve.java:170)
>         at
> org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
> t.invokeNext(StandardPipeline.java:641)
>         at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
> ava:172)
>         at
> org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
> t.invokeNext(StandardPipeline.java:641)
>         at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
> a:480)
>         at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
>
>         at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
> ve.java:174)
>         at
> org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
> t.invokeNext(StandardPipeline.java:643)
>         at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
> a:480)
>         at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
>
>         at
> org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:22
> 3)
>         at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
> :405)
>         at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proce
> ssConnection(Http11Protocol.java:380)
>         at
> org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java
> :508)
>         at
> org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP
> ool.java:533)
>         at java.lang.Thread.run(Thread.java:536)
> --------------- linked to ------------------
> javax.xml.bind.MarshalException
>  - with linked exception:
> [com.sun.xml.bind.serializer.AbortSerializationException: a required
> object is m
> issing]
>         at
> com.sun.xml.bind.marshaller.MarshallerImpl.write(MarshallerImpl.java:
> 143)
>         at
> com.sun.xml.bind.marshaller.MarshallerImpl.marshal(MarshallerImpl.jav
> a:112)
>         at
> javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshal
> lerImpl.java:73)
>         at
> com.xhive.support.NewUserAction.perform(NewUserAction.java:28)
>         at
> org.apache.struts.action.ActionServlet.processActionPerform(ActionSer
> vlet.java:1787)
>         at
> org.apache.struts.action.ActionServlet.process(ActionServlet.java:158
> 6)
>         at
> org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:510)
>
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>         at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
> icationFilterChain.java:247)
>         at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
> ilterChain.java:193)
>         at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
> alve.java:260)
>         at
> org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
> t.invokeNext(StandardPipeline.java:643)
>         at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
> a:480)
>         at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
>
>         at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
> alve.java:191)
>         at
> org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
> t.invokeNext(StandardPipeline.java:643)
>         at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
> a:480)
>         at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
>
>         at
> org.apache.catalina.core.StandardContext.invoke(StandardContext.java:
> 2396)
>         at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
> ava:180)
>         at
> org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
> t.invokeNext(StandardPipeline.java:643)
>         at
> org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatche
> rValve.java:170)
>         at
> org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
> t.invokeNext(StandardPipeline.java:641)
>         at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
> ava:172)
>         at
> org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
> t.invokeNext(StandardPipeline.java:641)
>         at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
> a:480)
>         at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
>
>         at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
> ve.java:174)
>         at
> org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
> t.invokeNext(StandardPipeline.java:643)
>         at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
> a:480)
>         at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
>
>         at
> org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:22
> 3)
>         at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
> :405)
>         at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proce
> ssConnection(Http11Protocol.java:380)
>         at
> org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java
> :508)
>         at
> org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP
> ool.java:533)
>         at java.lang.Thread.run(Thread.java:536)
>
> --
>
> X-Hive Corporation
> e-mail: jeroenb_at_x-hive.com
> phone: +31 10 2818080
> http://www.x-hive.com