Page 1 of 1

Adding charts in 2.7.0

PostPosted: Sat Sep 10, 2011 5:00 am
by jchenry
I am attempting to add a chart to a slide part with the following code.

Code: Select all
      String name = "/ppt/slides/slide"+slideIndex+".xml";

        SlidePart  slidePart = new SlidePart(new PartName(name));
        slidePart.setJaxbElement( slideTemplate );

      // do slide template modifications here.
      List shapeTree = slideTemplate.getCSld().getSpTree().getSpOrGrpSpOrGraphicFrame();
      CTGraphicFrame gf = new CTGraphicFrame();
      shapeTree.add(gf);
      
      
      Graphic g = new Graphic();
      gf.setGraphic(g);
      
      GraphicData gd = new GraphicData();
      g.setGraphicData(gd);

      CTRelId cri = new CTRelId();
      gd.getAny().add(cri);
      cri.setId("rId2");


when I save i get get the following exception:

Code: Select all
Caused by: com.sun.istack.internal.SAXException2: unable to marshal type "org.docx4j.dml.chart.CTRelId" as an element because it is missing an @XmlRootElement annotation
   at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:216)
   at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeRoot(ClassBeanInfoImpl.java:286)
   at com.sun.xml.internal.bind.v2.runtime.property.ArrayReferenceNodeProperty.serializeListBody(ArrayReferenceNodeProperty.java:103)
   at com.sun.xml.internal.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:141)
   at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:306)
   at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:664)
   at com.sun.xml.internal.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:141)
   at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:306)
   at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:664)
   at com.sun.xml.internal.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:141)
   at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:306)
   at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:664)
   at com.sun.xml.internal.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(ArrayElementProperty.java:154)
   at com.sun.xml.internal.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:141)
   at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:306)
   at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:664)
   at com.sun.xml.internal.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:141)
   at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:306)
   at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:664)
   at com.sun.xml.internal.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:141)
   at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:306)
   at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsSoleContent(XMLSerializer.java:561)
   at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeRoot(ClassBeanInfoImpl.java:290)
   at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:462)
   at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:314)
   ... 7 more



Am I missing something or am I just using the using the API incorrectly?

Thanks.

Re: Adding charts in 2.7.0

PostPosted: Sat Sep 10, 2011 7:24 pm
by jason
ObjectFactory (in that same package) contains:

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
   /**
     * Create an instance of {@link JAXBElement }{@code <}{@link CTRelId }{@code >}}
     *
     */

    @XmlElementDecl(namespace = "http://schemas.openxmlformats.org/drawingml/2006/chart", name = "chart")
    public JAXBElement<CTRelId> createChart(CTRelId value) {
        return new JAXBElement<CTRelId>(_Chart_QNAME, CTRelId.class, null, value);
    }
 
Parsed in 0.015 seconds, using GeSHi 1.0.8.4


Use that to tell JAXB how to marshall CTRelId, ie if that is yourJAXBElement, you'd:

Code: Select all
gd.getAny().add(yourJAXBElement);

Re: Adding charts in 2.7.0

PostPosted: Tue Sep 13, 2011 6:32 am
by jchenry
I'm an idiot. thank you.